@@ -188,9 +188,6 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
188188 }
189189
190190protected:
191- template <typename PassT>
192- using has_required_t = decltype (std::declval<PassT &>().isRequired());
193-
194191 template <typename PassT>
195192 using is_module_pass_t = decltype (std::declval<PassT &>().run(
196193 std::declval<Module &>(), std::declval<ModuleAnalysisManager &>()));
@@ -214,14 +211,12 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
214211 ~AddIRPass () { flushFPMToMPM (); }
215212
216213 template <typename PassT>
217- void operator ()(PassT &&Pass, StringRef Name = PassT::name()) {
214+ void operator ()(PassT &&Pass, bool Force = false ,
215+ StringRef Name = PassT::name()) {
218216 static_assert ((is_detected<is_function_pass_t , PassT>::value ||
219217 is_detected<is_module_pass_t , PassT>::value) &&
220218 " Only module pass and function pass are supported." );
221- bool Required = false ;
222- if constexpr (is_detected<has_required_t , PassT>::value)
223- Required = PassT::isRequired ();
224- if (!PB.runBeforeAdding (Name) && !Required)
219+ if (!Force && !PB.runBeforeAdding (Name))
225220 return ;
226221
227222 // Add Function Pass
@@ -625,9 +620,12 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::buildPipeline(
625620
626621 {
627622 AddIRPass addIRPass (MPM, derived ());
628- addIRPass (RequireAnalysisPass<MachineModuleAnalysis, Module>());
629- addIRPass (RequireAnalysisPass<ProfileSummaryAnalysis, Module>());
630- addIRPass (RequireAnalysisPass<CollectorMetadataAnalysis, Module>());
623+ addIRPass (RequireAnalysisPass<MachineModuleAnalysis, Module>(),
624+ /* Force=*/ true );
625+ addIRPass (RequireAnalysisPass<ProfileSummaryAnalysis, Module>(),
626+ /* Force=*/ true );
627+ addIRPass (RequireAnalysisPass<CollectorMetadataAnalysis, Module>(),
628+ /* Force=*/ true );
631629 addISelPasses (addIRPass);
632630 }
633631
@@ -743,7 +741,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
743741 // Before running any passes, run the verifier to determine if the input
744742 // coming from the front-end and/or optimizer is valid.
745743 if (!Opt.DisableVerify )
746- addPass (VerifierPass ());
744+ addPass (VerifierPass (), /* Force= */ true );
747745
748746 // Run loop strength reduction before anything else.
749747 if (getOptLevel () != CodeGenOptLevel::None && !Opt.DisableLSR ) {
@@ -883,7 +881,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPrepare(
883881 // All passes which modify the LLVM IR are now complete; run the verifier
884882 // to ensure that the IR is valid.
885883 if (!Opt.DisableVerify )
886- addPass (VerifierPass ());
884+ addPass (VerifierPass (), /* Force= */ true );
887885}
888886
889887template <typename Derived, typename TargetMachineT>
0 commit comments