[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