Skip to content

Replace print-at-pass-number cl::opt with print-before-pass-number #76211

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion llvm/include/llvm/Passes/StandardInstrumentations.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class PrintIRInstrumentation {
bool shouldPrintBeforePass(StringRef PassID);
bool shouldPrintAfterPass(StringRef PassID);
bool shouldPrintPassNumbers();
bool shouldPrintAtPassNumber();
bool shouldPrintBeforePassNumber();

void pushPassRunDescriptor(StringRef PassID, Any IR,
std::string &DumpIRFilename);
Expand Down
52 changes: 22 additions & 30 deletions llvm/lib/Passes/StandardInstrumentations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ 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>
PrintAtPassNumber("print-at-pass-number", cl::init(0), cl::Hidden,
cl::desc("Print IR at pass with this number as "
"reported by print-passes-names"));
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 "
"reported by print-pass-numbers"));

static cl::opt<std::string> IRDumpDirectory(
"ir-dump-directory",
Expand Down Expand Up @@ -806,8 +806,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
// Note: here we rely on a fact that we do not change modules while
// traversing the pipeline, so the latest captured module is good
// for all print operations that has not happen yet.
if (shouldPrintPassNumbers() || shouldPrintAtPassNumber() ||
shouldPrintAfterPass(PassID))
if (shouldPrintAfterPass(PassID))
pushPassRunDescriptor(PassID, IR, DumpIRFilename);

if (!shouldPrintIR(IR))
Expand All @@ -823,8 +822,10 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
return;

auto WriteIRToStream = [&](raw_ostream &Stream) {
Stream << "; *** IR Dump Before " << PassID << " on " << getIRName(IR)
<< " ***\n";
Stream << "; *** IR Dump Before ";
if (shouldPrintBeforePassNumber())
Stream << CurrentPassNumber << "-";
Stream << PassID << " on " << getIRName(IR) << " ***\n";
unwrapAndPrint(Stream, IR);
};

Expand All @@ -842,8 +843,7 @@ void PrintIRInstrumentation::printAfterPass(StringRef PassID, Any IR) {
if (isIgnored(PassID))
return;

if (!shouldPrintAfterPass(PassID) && !shouldPrintPassNumbers() &&
!shouldPrintAtPassNumber())
if (!shouldPrintAfterPass(PassID))
return;

auto [M, DumpIRFilename, IRName, StoredPassID] = popPassRunDescriptor(PassID);
Expand All @@ -853,10 +853,7 @@ void PrintIRInstrumentation::printAfterPass(StringRef PassID, Any IR) {
return;

auto WriteIRToStream = [&](raw_ostream &Stream, const StringRef IRName) {
Stream << "; *** IR Dump "
<< (shouldPrintAtPassNumber()
? StringRef(formatv("At {0}-{1}", CurrentPassNumber, PassID))
: StringRef(formatv("After {0}", PassID)))
Stream << "; *** IR Dump " << StringRef(formatv("After {0}", PassID))
<< " on " << IRName << " ***\n";
unwrapAndPrint(Stream, IR);
};
Expand All @@ -879,8 +876,7 @@ void PrintIRInstrumentation::printAfterPassInvalidated(StringRef PassID) {
if (isIgnored(PassID))
return;

if (!shouldPrintAfterPass(PassID) && !shouldPrintPassNumbers() &&
!shouldPrintAtPassNumber())
if (!shouldPrintAfterPass(PassID))
return;

auto [M, DumpIRFilename, IRName, StoredPassID] = popPassRunDescriptor(PassID);
Expand All @@ -893,12 +889,8 @@ void PrintIRInstrumentation::printAfterPassInvalidated(StringRef PassID) {
auto WriteIRToStream = [&](raw_ostream &Stream, const Module *M,
const StringRef IRName) {
SmallString<20> Banner;
if (shouldPrintAtPassNumber())
Banner = formatv("; *** IR Dump At {0}-{1} on {2} (invalidated) ***",
CurrentPassNumber, PassID, IRName);
else
Banner = formatv("; *** IR Dump After {0} on {1} (invalidated) ***",
PassID, IRName);
Banner = formatv("; *** IR Dump After {0} on {1} (invalidated) ***", PassID,
IRName);
Stream << Banner << "\n";
printIR(Stream, M);
};
Expand All @@ -921,6 +913,10 @@ bool PrintIRInstrumentation::shouldPrintBeforePass(StringRef PassID) {
if (shouldPrintBeforeAll())
return true;

if (shouldPrintBeforePassNumber() &&
CurrentPassNumber == PrintBeforePassNumber)
return true;

StringRef PassName = PIC->getPassNameForClassName(PassID);
return is_contained(printBeforePasses(), PassName);
}
Expand All @@ -929,9 +925,6 @@ bool PrintIRInstrumentation::shouldPrintAfterPass(StringRef PassID) {
if (shouldPrintAfterAll())
return true;

if (shouldPrintAtPassNumber() && CurrentPassNumber == PrintAtPassNumber)
return true;

StringRef PassName = PIC->getPassNameForClassName(PassID);
return is_contained(printAfterPasses(), PassName);
}
Expand All @@ -940,8 +933,8 @@ bool PrintIRInstrumentation::shouldPrintPassNumbers() {
return PrintPassNumbers;
}

bool PrintIRInstrumentation::shouldPrintAtPassNumber() {
return PrintAtPassNumber > 0;
bool PrintIRInstrumentation::shouldPrintBeforePassNumber() {
return PrintBeforePassNumber > 0;
}

void PrintIRInstrumentation::registerCallbacks(
Expand All @@ -950,13 +943,12 @@ void PrintIRInstrumentation::registerCallbacks(

// BeforePass callback is not just for printing, it also saves a Module
// for later use in AfterPassInvalidated.
if (shouldPrintPassNumbers() || shouldPrintAtPassNumber() ||
if (shouldPrintPassNumbers() || shouldPrintBeforePassNumber() ||
shouldPrintBeforeSomePass() || shouldPrintAfterSomePass())
PIC.registerBeforeNonSkippedPassCallback(
[this](StringRef P, Any IR) { this->printBeforePass(P, IR); });

if (shouldPrintPassNumbers() || shouldPrintAtPassNumber() ||
shouldPrintAfterSomePass()) {
if (shouldPrintAfterSomePass()) {
PIC.registerAfterPassCallback(
[this](StringRef P, Any IR, const PreservedAnalyses &) {
this->printAfterPass(P, IR);
Expand Down
10 changes: 3 additions & 7 deletions llvm/test/Other/print-at-pass-number.ll
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-pass-numbers -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=NUMBER
; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-at-pass-number=3 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=AT
; RUN: opt -passes="loop(indvars,loop-deletion,loop-unroll-full)" -print-module-scope -print-at-pass-number=4 -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=AT-INVALIDATE
; 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

define i32 @bar(i32 %arg) {
; AT: *** IR Dump At 3-IndVarSimplifyPass on bb1 ***
; AT: define i32 @bar(i32 %arg) {

; AT-INVALIDATE: *** IR Dump At 4-LoopDeletionPass on bb1 (invalidated) ***
; AT-INVALIDATE: define i32 @bar(i32 %arg) {
; BEFORE: *** IR Dump Before 3-IndVarSimplifyPass on bb1 ***
; BEFORE: define i32 @bar(i32 %arg) {

bb:
br label %bb1
Expand Down