diff --git a/llvm/include/llvm/Passes/StandardInstrumentations.h b/llvm/include/llvm/Passes/StandardInstrumentations.h index 2ec36cad244fd..8c6a44876d545 100644 --- a/llvm/include/llvm/Passes/StandardInstrumentations.h +++ b/llvm/include/llvm/Passes/StandardInstrumentations.h @@ -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); diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp b/llvm/lib/Passes/StandardInstrumentations.cpp index fd1317e3eb256..d467fe5c9a8e7 100644 --- a/llvm/lib/Passes/StandardInstrumentations.cpp +++ b/llvm/lib/Passes/StandardInstrumentations.cpp @@ -118,10 +118,10 @@ static cl::opt PrintPassNumbers( "print-pass-numbers", cl::init(false), cl::Hidden, cl::desc("Print pass names and their ordinals")); -static cl::opt - 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 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 IRDumpDirectory( "ir-dump-directory", @@ -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)) @@ -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); }; @@ -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); @@ -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); }; @@ -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); @@ -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); }; @@ -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); } @@ -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); } @@ -940,8 +933,8 @@ bool PrintIRInstrumentation::shouldPrintPassNumbers() { return PrintPassNumbers; } -bool PrintIRInstrumentation::shouldPrintAtPassNumber() { - return PrintAtPassNumber > 0; +bool PrintIRInstrumentation::shouldPrintBeforePassNumber() { + return PrintBeforePassNumber > 0; } void PrintIRInstrumentation::registerCallbacks( @@ -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); diff --git a/llvm/test/Other/print-at-pass-number.ll b/llvm/test/Other/print-at-pass-number.ll index 8b2d3144e0925..b9c09a36ca1fa 100644 --- a/llvm/test/Other/print-at-pass-number.ll +++ b/llvm/test/Other/print-at-pass-number.ll @@ -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