[llvm] [CodeGen] Fix llc -start/stop-after/before bug for inserted machine passes (PR #200631)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 14 04:33:39 PDT 2026
================
@@ -526,15 +541,39 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
[](StringRef Name) { return ((Name != PassTs::name()) && ...); });
}
- /// Insert InsertedPass pass after TargetPass pass.
- /// Only machine function passes are supported.
+ /// Register a callback that handles insertion of InsertedPass after
+ /// TargetPass. Only machine function passes are supported.
+ ///
+ /// The callback behavior depends on the current AfterCallback mode:
+ /// - Probe: count the number of inserted passes matching the current target
+ /// pass.
+ /// - ConsumeOnly: advance start/stop state via runBeforeAdding without adding
+ /// them.
+ /// - Normal: insert the pass if runBeforeAdding allows it.
template <typename TargetPassT, typename InsertedPassT>
void insertPass(InsertedPassT &&Pass) const {
AfterCallbacks.emplace_back(
[&](StringRef Name, MachineFunctionPassManager &MFPM) mutable {
- if (Name == TargetPassT::name() &&
- runBeforeAdding(InsertedPassT::name())) {
- MFPM.addPass(std::forward<InsertedPassT>(Pass));
+ if (Name != TargetPassT::name())
+ return;
+
+ switch (AfterCtrl.ModeValue) {
+ // Check how many insertedPasses that match TargetPass.
+ case AfterCallbackControl::Mode::Probe:
+ if (SSState.getInfo().StartPass ==
+ PIC->getPassNameForClassName(InsertedPassT::name())) {
+ ++AfterCtrl.InsertedTargetPassCount;
+ }
+ break;
+ // Update count of TargetPass managed by runBeforeAdding.
+ case AfterCallbackControl::Mode::ConsumeOnly:
+ runBeforeAdding(InsertedPassT::name());
+ break;
+ case AfterCallbackControl::Mode::Normal:
+ if (runBeforeAdding(InsertedPassT::name())) {
+ MFPM.addPass(std::forward<InsertedPassT>(Pass));
----------------
paperchalice wrote:
Omit braces: https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements
https://github.com/llvm/llvm-project/pull/200631
More information about the llvm-commits
mailing list