@@ -188,9 +188,6 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
188
188
}
189
189
190
190
protected:
191
- template <typename PassT>
192
- using has_required_t = decltype (std::declval<PassT &>().isRequired());
193
-
194
191
template <typename PassT>
195
192
using is_module_pass_t = decltype (std::declval<PassT &>().run(
196
193
std::declval<Module &>(), std::declval<ModuleAnalysisManager &>()));
@@ -214,14 +211,12 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
214
211
~AddIRPass () { flushFPMToMPM (); }
215
212
216
213
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()) {
218
216
static_assert ((is_detected<is_function_pass_t , PassT>::value ||
219
217
is_detected<is_module_pass_t , PassT>::value) &&
220
218
" 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))
225
220
return ;
226
221
227
222
// Add Function Pass
@@ -625,9 +620,12 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::buildPipeline(
625
620
626
621
{
627
622
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 );
631
629
addISelPasses (addIRPass);
632
630
}
633
631
@@ -743,7 +741,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
743
741
// Before running any passes, run the verifier to determine if the input
744
742
// coming from the front-end and/or optimizer is valid.
745
743
if (!Opt.DisableVerify )
746
- addPass (VerifierPass ());
744
+ addPass (VerifierPass (), /* Force= */ true );
747
745
748
746
// Run loop strength reduction before anything else.
749
747
if (getOptLevel () != CodeGenOptLevel::None && !Opt.DisableLSR ) {
@@ -883,7 +881,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPrepare(
883
881
// All passes which modify the LLVM IR are now complete; run the verifier
884
882
// to ensure that the IR is valid.
885
883
if (!Opt.DisableVerify )
886
- addPass (VerifierPass ());
884
+ addPass (VerifierPass (), /* Force= */ true );
887
885
}
888
886
889
887
template <typename Derived, typename TargetMachineT>
0 commit comments