[llvm] [StandardInstrumentations] Make -print-after-pass-number/-print-after-pass-number options allow multiple pass numbers specified (PR #155228)

Mingjie Xu via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 25 05:10:41 PDT 2025


https://github.com/Enna1 updated https://github.com/llvm/llvm-project/pull/155228

>From a8a67861ec40ba722e59ea27c5e2c5658726263a Mon Sep 17 00:00:00 2001
From: "xumingjie.enna1" <xumingjie.enna1 at bytedance.com>
Date: Mon, 25 Aug 2025 17:51:32 +0800
Subject: [PATCH] [StandardInstrumentations] Make
 -print-after-pass-number/-print-after-pass-number options allow multilple
 pass numbers specified

`-print-before` and `-print-after` support multiple passes as a list of
strings, so it makes sense that we also support `-print-before-pass-number`
and `-print-after-pass-number` taking a list of pass numbers as input.
This is useful if you want to print out the IRs before/after specified passes
with pass numbers reported by print-pass-numbers in a single run.
---
 llvm/lib/Passes/StandardInstrumentations.cpp | 22 ++++++++++----------
 llvm/test/Other/print-at-pass-number.ll      | 10 +++++++++
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp
index f165e85baf611..de293308ae69e 100644
--- a/llvm/lib/Passes/StandardInstrumentations.cpp
+++ b/llvm/lib/Passes/StandardInstrumentations.cpp
@@ -118,15 +118,15 @@ static cl::opt<bool> PrintPassNumbers(
     "print-pass-numbers", cl::init(false), cl::Hidden,
     cl::desc("Print pass names and their ordinals"));
 
-static cl::opt<unsigned> PrintBeforePassNumber(
-    "print-before-pass-number", cl::init(0), cl::Hidden,
-    cl::desc("Print IR before the pass with this number as "
+static cl::list<unsigned> PrintBeforePassNumber(
+    "print-before-pass-number", cl::CommaSeparated, cl::Hidden,
+    cl::desc("Print IR before the passes with specified numbers as "
              "reported by print-pass-numbers"));
 
-static cl::opt<unsigned>
-    PrintAfterPassNumber("print-after-pass-number", cl::init(0), cl::Hidden,
-                         cl::desc("Print IR after the pass with this number as "
-                                  "reported by print-pass-numbers"));
+static cl::list<unsigned> PrintAfterPassNumber(
+    "print-after-pass-number", cl::CommaSeparated, cl::Hidden,
+    cl::desc("Print IR after the passes with specified numbers as "
+             "reported by print-pass-numbers"));
 
 static cl::opt<std::string> IRDumpDirectory(
     "ir-dump-directory",
@@ -984,12 +984,12 @@ bool PrintIRInstrumentation::shouldPrintAfterPass(StringRef PassID) {
 
 bool PrintIRInstrumentation::shouldPrintBeforeCurrentPassNumber() {
   return shouldPrintBeforeSomePassNumber() &&
-         (CurrentPassNumber == PrintBeforePassNumber);
+         (is_contained(PrintBeforePassNumber, CurrentPassNumber));
 }
 
 bool PrintIRInstrumentation::shouldPrintAfterCurrentPassNumber() {
   return shouldPrintAfterSomePassNumber() &&
-         (CurrentPassNumber == PrintAfterPassNumber);
+         (is_contained(PrintAfterPassNumber, CurrentPassNumber));
 }
 
 bool PrintIRInstrumentation::shouldPrintPassNumbers() {
@@ -997,11 +997,11 @@ bool PrintIRInstrumentation::shouldPrintPassNumbers() {
 }
 
 bool PrintIRInstrumentation::shouldPrintBeforeSomePassNumber() {
-  return PrintBeforePassNumber > 0;
+  return !PrintBeforePassNumber.empty();
 }
 
 bool PrintIRInstrumentation::shouldPrintAfterSomePassNumber() {
-  return PrintAfterPassNumber > 0;
+  return !PrintAfterPassNumber.empty();
 }
 
 void PrintIRInstrumentation::registerCallbacks(
diff --git a/llvm/test/Other/print-at-pass-number.ll b/llvm/test/Other/print-at-pass-number.ll
index 4930eaa5a8656..4a023dec7a2ce 100644
--- a/llvm/test/Other/print-at-pass-number.ll
+++ b/llvm/test/Other/print-at-pass-number.ll
@@ -2,12 +2,22 @@
 ; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-pass-numbers -filter-print-funcs=baz -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=NUMBER-FILTERED
 ; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-before-pass-number=3 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=BEFORE
 ; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-after-pass-number=2 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=AFTER
+; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-before-pass-number=2,3 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=BEFORE-MULTI
+; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-after-pass-number=2,3 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=AFTER-MULTI
 
 define i32 @bar(i32 %arg) {
 ; BEFORE: *** IR Dump Before 3-IndVarSimplifyPass on loop %bb1 in function bar ***
 ; BEFORE: define i32 @bar(i32 %arg) {
 ; AFTER:  *** IR Dump After 2-LCSSAPass on bar ***
 ; AFTER:  define i32 @bar(i32 %arg) {
+; BEFORE-MULTI: *** IR Dump Before 2-LCSSAPass on bar ***
+; BEFORE-MULTI: define i32 @bar(i32 %arg) {
+; BEFORE-MULTI: *** IR Dump Before 3-IndVarSimplifyPass on loop %bb1 in function bar ***
+; BEFORE-MULTI: define i32 @bar(i32 %arg) {
+; AFTER-MULTI:  *** IR Dump After 2-LCSSAPass on bar ***
+; AFTER-MULTI:  define i32 @bar(i32 %arg) {
+; AFTER-MULTI:  *** IR Dump After 3-IndVarSimplifyPass on loop %bb1 in function bar ***
+; AFTER-MULTI:  define i32 @bar(i32 %arg) {
 
 bb:
   br label %bb1



More information about the llvm-commits mailing list