[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