Skip to content

Commit da3ee97

Browse files
authored
StandardInstrumentation: Fix -ir-dump-directory with -print-before-pass-number (#130983)
1 parent 792a6f8 commit da3ee97

File tree

4 files changed

+151
-81
lines changed

4 files changed

+151
-81
lines changed

llvm/include/llvm/Passes/StandardInstrumentations.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,16 @@ class PrintIRInstrumentation {
5353
private:
5454
struct PassRunDescriptor {
5555
const Module *M;
56-
const std::string DumpIRFilename;
56+
const unsigned PassNumber;
57+
const std::string IRFileDisplayName;
5758
const std::string IRName;
5859
const StringRef PassID;
5960

60-
PassRunDescriptor(const Module *M, std::string DumpIRFilename,
61-
std::string IRName, const StringRef PassID)
62-
: M{M}, DumpIRFilename{DumpIRFilename}, IRName{IRName}, PassID(PassID) {
63-
}
61+
PassRunDescriptor(const Module *M, unsigned PassNumber,
62+
std::string &&IRFileDisplayName, std::string &&IRName,
63+
const StringRef PassID)
64+
: M{M}, PassNumber{PassNumber}, IRFileDisplayName(IRFileDisplayName),
65+
IRName{IRName}, PassID(PassID) {}
6466
};
6567

6668
void printBeforePass(StringRef PassID, Any IR);
@@ -75,10 +77,20 @@ class PrintIRInstrumentation {
7577
bool shouldPrintBeforeSomePassNumber();
7678
bool shouldPrintAfterSomePassNumber();
7779

78-
void pushPassRunDescriptor(StringRef PassID, Any IR,
79-
std::string &DumpIRFilename);
80+
void pushPassRunDescriptor(StringRef PassID, Any IR, unsigned PassNumber);
8081
PassRunDescriptor popPassRunDescriptor(StringRef PassID);
81-
std::string fetchDumpFilename(StringRef PassId, Any IR);
82+
83+
enum class IRDumpFileSuffixType {
84+
Before,
85+
After,
86+
Invalidated,
87+
};
88+
89+
static StringRef
90+
getFileSuffix(PrintIRInstrumentation::IRDumpFileSuffixType Type);
91+
std::string fetchDumpFilename(StringRef PassId, StringRef IRFileDisplayName,
92+
unsigned PassNumber,
93+
IRDumpFileSuffixType SuffixType);
8294

8395
PassInstrumentationCallbacks *PIC;
8496
/// Stack of Pass Run descriptions, enough to print the IR unit after a given

llvm/lib/Passes/StandardInstrumentations.cpp

Lines changed: 47 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -755,9 +755,7 @@ PrintIRInstrumentation::~PrintIRInstrumentation() {
755755
"PassRunDescriptorStack is not empty at exit");
756756
}
757757

758-
static SmallString<32> getIRFileDisplayName(Any IR) {
759-
SmallString<32> Result;
760-
raw_svector_ostream ResultStream(Result);
758+
static void writeIRFileDisplayName(raw_ostream &ResultStream, Any IR) {
761759
const Module *M = unwrapModule(IR, /*Force=*/true);
762760
assert(M && "should have unwrapped module");
763761
uint64_t NameHash = xxh3_64bits(M->getName());
@@ -786,44 +784,44 @@ static SmallString<32> getIRFileDisplayName(Any IR) {
786784
} else {
787785
llvm_unreachable("Unknown wrapped IR type");
788786
}
787+
}
788+
789+
static std::string getIRFileDisplayName(Any IR) {
790+
std::string Result;
791+
raw_string_ostream ResultStream(Result);
792+
writeIRFileDisplayName(ResultStream, IR);
789793
return Result;
790794
}
791795

792-
std::string PrintIRInstrumentation::fetchDumpFilename(StringRef PassName,
793-
Any IR) {
794-
const StringRef RootDirectory = IRDumpDirectory;
795-
assert(!RootDirectory.empty() &&
796+
StringRef PrintIRInstrumentation::getFileSuffix(IRDumpFileSuffixType Type) {
797+
static constexpr std::array FileSuffixes = {"-before.ll", "-after.ll",
798+
"-invalidated.ll"};
799+
return FileSuffixes[static_cast<size_t>(Type)];
800+
}
801+
802+
std::string PrintIRInstrumentation::fetchDumpFilename(
803+
StringRef PassName, StringRef IRFileDisplayName, unsigned PassNumber,
804+
IRDumpFileSuffixType SuffixType) {
805+
assert(!IRDumpDirectory.empty() &&
796806
"The flag -ir-dump-directory must be passed to dump IR to files");
797-
SmallString<128> ResultPath;
798-
ResultPath += RootDirectory;
807+
799808
SmallString<64> Filename;
800809
raw_svector_ostream FilenameStream(Filename);
801-
FilenameStream << CurrentPassNumber;
802-
FilenameStream << "-";
803-
FilenameStream << getIRFileDisplayName(IR);
804-
FilenameStream << "-";
810+
FilenameStream << PassNumber;
811+
FilenameStream << '-' << IRFileDisplayName << '-';
805812
FilenameStream << PassName;
806-
sys::path::append(ResultPath, Filename);
807-
return std::string(ResultPath);
808-
}
813+
FilenameStream << getFileSuffix(SuffixType);
809814

810-
enum class IRDumpFileSuffixType {
811-
Before,
812-
After,
813-
Invalidated,
814-
};
815-
816-
static StringRef getFileSuffix(IRDumpFileSuffixType Type) {
817-
static constexpr std::array FileSuffixes = {"-before.ll", "-after.ll",
818-
"-invalidated.ll"};
819-
return FileSuffixes[static_cast<size_t>(Type)];
815+
SmallString<128> ResultPath;
816+
sys::path::append(ResultPath, IRDumpDirectory, Filename);
817+
return std::string(ResultPath);
820818
}
821819

822-
void PrintIRInstrumentation::pushPassRunDescriptor(
823-
StringRef PassID, Any IR, std::string &DumpIRFilename) {
820+
void PrintIRInstrumentation::pushPassRunDescriptor(StringRef PassID, Any IR,
821+
unsigned PassNumber) {
824822
const Module *M = unwrapModule(IR);
825-
PassRunDescriptorStack.emplace_back(
826-
PassRunDescriptor(M, DumpIRFilename, getIRName(IR), PassID));
823+
PassRunDescriptorStack.emplace_back(M, PassNumber, getIRFileDisplayName(IR),
824+
getIRName(IR), PassID);
827825
}
828826

829827
PrintIRInstrumentation::PassRunDescriptor
@@ -857,19 +855,12 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
857855
if (isIgnored(PassID))
858856
return;
859857

860-
std::string DumpIRFilename;
861-
if (!IRDumpDirectory.empty() &&
862-
(shouldPrintBeforePass(PassID) || shouldPrintAfterPass(PassID) ||
863-
shouldPrintBeforeCurrentPassNumber() ||
864-
shouldPrintAfterCurrentPassNumber()))
865-
DumpIRFilename = fetchDumpFilename(PassID, IR);
866-
867858
// Saving Module for AfterPassInvalidated operations.
868859
// Note: here we rely on a fact that we do not change modules while
869860
// traversing the pipeline, so the latest captured module is good
870861
// for all print operations that has not happen yet.
871862
if (shouldPrintAfterPass(PassID))
872-
pushPassRunDescriptor(PassID, IR, DumpIRFilename);
863+
pushPassRunDescriptor(PassID, IR, CurrentPassNumber);
873864

874865
if (!shouldPrintIR(IR))
875866
return;
@@ -881,7 +872,7 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
881872
<< " on " << getIRName(IR) << "\n";
882873

883874
if (shouldPrintAfterCurrentPassNumber())
884-
pushPassRunDescriptor(PassID, IR, DumpIRFilename);
875+
pushPassRunDescriptor(PassID, IR, CurrentPassNumber);
885876

886877
if (!shouldPrintBeforePass(PassID) && !shouldPrintBeforeCurrentPassNumber())
887878
return;
@@ -894,8 +885,10 @@ void PrintIRInstrumentation::printBeforePass(StringRef PassID, Any IR) {
894885
unwrapAndPrint(Stream, IR);
895886
};
896887

897-
if (!DumpIRFilename.empty()) {
898-
DumpIRFilename += getFileSuffix(IRDumpFileSuffixType::Before);
888+
if (!IRDumpDirectory.empty()) {
889+
std::string DumpIRFilename =
890+
fetchDumpFilename(PassID, getIRFileDisplayName(IR), CurrentPassNumber,
891+
IRDumpFileSuffixType::Before);
899892
llvm::raw_fd_ostream DumpIRFileStream{
900893
prepareDumpIRFileDescriptor(DumpIRFilename), /* shouldClose */ true};
901894
WriteIRToStream(DumpIRFileStream);
@@ -911,7 +904,8 @@ void PrintIRInstrumentation::printAfterPass(StringRef PassID, Any IR) {
911904
if (!shouldPrintAfterPass(PassID) && !shouldPrintAfterCurrentPassNumber())
912905
return;
913906

914-
auto [M, DumpIRFilename, IRName, StoredPassID] = popPassRunDescriptor(PassID);
907+
auto [M, PassNumber, IRFileDisplayName, IRName, StoredPassID] =
908+
popPassRunDescriptor(PassID);
915909
assert(StoredPassID == PassID && "mismatched PassID");
916910

917911
if (!shouldPrintIR(IR) ||
@@ -927,12 +921,11 @@ void PrintIRInstrumentation::printAfterPass(StringRef PassID, Any IR) {
927921
};
928922

929923
if (!IRDumpDirectory.empty()) {
930-
assert(!DumpIRFilename.empty() && "DumpIRFilename must not be empty and "
931-
"should be set in printBeforePass");
932-
const std::string DumpIRFilenameWithSuffix =
933-
DumpIRFilename + getFileSuffix(IRDumpFileSuffixType::After).str();
924+
std::string DumpIRFilename =
925+
fetchDumpFilename(PassID, getIRFileDisplayName(IR), CurrentPassNumber,
926+
IRDumpFileSuffixType::After);
934927
llvm::raw_fd_ostream DumpIRFileStream{
935-
prepareDumpIRFileDescriptor(DumpIRFilenameWithSuffix),
928+
prepareDumpIRFileDescriptor(DumpIRFilename),
936929
/* shouldClose */ true};
937930
WriteIRToStream(DumpIRFileStream, IRName);
938931
} else {
@@ -947,7 +940,8 @@ void PrintIRInstrumentation::printAfterPassInvalidated(StringRef PassID) {
947940
if (!shouldPrintAfterPass(PassID) && !shouldPrintAfterCurrentPassNumber())
948941
return;
949942

950-
auto [M, DumpIRFilename, IRName, StoredPassID] = popPassRunDescriptor(PassID);
943+
auto [M, PassNumber, IRFileDisplayName, IRName, StoredPassID] =
944+
popPassRunDescriptor(PassID);
951945
assert(StoredPassID == PassID && "mismatched PassID");
952946
// Additional filtering (e.g. -filter-print-func) can lead to module
953947
// printing being skipped.
@@ -965,13 +959,12 @@ void PrintIRInstrumentation::printAfterPassInvalidated(StringRef PassID) {
965959
};
966960

967961
if (!IRDumpDirectory.empty()) {
968-
assert(!DumpIRFilename.empty() && "DumpIRFilename must not be empty and "
969-
"should be set in printBeforePass");
970-
const std::string DumpIRFilenameWithSuffix =
971-
DumpIRFilename + getFileSuffix(IRDumpFileSuffixType::Invalidated).str();
962+
std::string DumpIRFilename =
963+
fetchDumpFilename(PassID, IRFileDisplayName, PassNumber,
964+
IRDumpFileSuffixType::Invalidated);
972965
llvm::raw_fd_ostream DumpIRFileStream{
973-
prepareDumpIRFileDescriptor(DumpIRFilenameWithSuffix),
974-
/* shouldClose */ true};
966+
prepareDumpIRFileDescriptor(DumpIRFilename),
967+
/*shouldClose=*/true};
975968
WriteIRToStream(DumpIRFileStream, M, IRName);
976969
} else {
977970
WriteIRToStream(dbgs(), M, IRName);
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; Make sure that -print-before-pass-number works to write to a
2+
; temporary file, and not stderr, when combined with
3+
; -ir-dump-directory
4+
5+
; RUN_PASS_NUMBERS: Running pass 1 NoOpModulePass on [module]
6+
; RUN_PASS_NUMBERS: Running pass 2 NoOpModulePass on [module]
7+
; RUN_PASS_NUMBERS: Running pass 3 NoOpModulePass on [module]
8+
9+
10+
; RUN: rm -rf %t/logs
11+
; RUN: opt %s -disable-output -passes='no-op-module,no-op-module,no-op-module' -print-before-pass-number=2 -print-pass-numbers -ir-dump-directory %t/logs 2>&1 | FileCheck -check-prefix=RUN_PASS_NUMBERS %s
12+
; RUN: ls %t/logs | FileCheck --check-prefix=BEFORE2 %s
13+
; RUN: ls %t/logs | count 1
14+
; BEFORE2: 2-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-before.ll
15+
16+
; RUN: cat %t/logs/* | FileCheck -check-prefix=BEFORE2_COMMENT %s
17+
; BEFORE2_COMMENT: ; *** IR Dump Before 2-NoOpModulePass on [module] ***
18+
19+
20+
21+
; RUN: rm -rf %t/logs
22+
; RUN: opt %s -disable-output -passes='no-op-module,no-op-module,no-op-module' -print-before-pass-number=1 -print-pass-numbers -ir-dump-directory %t/logs 2>&1 | FileCheck -check-prefix=RUN_PASS_NUMBERS %s
23+
; RUN: ls %t/logs | FileCheck --check-prefix=BEFORE1 %s
24+
; RUN: ls %t/logs | count 1
25+
26+
; BEFORE1: 1-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-before.ll
27+
28+
; RUN: cat %t/logs/* | FileCheck -check-prefix=BEFORE1_COMMENT %s
29+
; BEFORE1_COMMENT: ; *** IR Dump Before 1-NoOpModulePass on [module] ***
30+
31+
32+
33+
; RUN: rm -rf %t/logs
34+
; RUN: opt %s -disable-output -passes='no-op-module,no-op-module,no-op-module' -print-after-pass-number=2 -print-pass-numbers -ir-dump-directory %t/logs 2>&1 | FileCheck -check-prefix=RUN_PASS_NUMBERS %s
35+
; RUN: ls %t/logs | FileCheck --check-prefix=AFTER2 %s
36+
; RUN: ls %t/logs | count 1
37+
; AFTER2: 2-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
38+
39+
40+
; RUN: cat %t/logs/* | FileCheck -check-prefix=AFTER2_COMMENT %s
41+
; AFTER2_COMMENT: ; *** IR Dump After 2-NoOpModulePass on [module] ***
42+
43+
44+
45+
; RUN: rm -rf %t/logs
46+
; RUN: opt %s -disable-output -passes='no-op-module,no-op-module,no-op-module' -print-after-pass-number=1 -print-pass-numbers -ir-dump-directory %t/logs 2>&1 | FileCheck -check-prefix=RUN_PASS_NUMBERS %s
47+
; RUN: ls %t/logs | FileCheck --check-prefix=AFTER1 %s
48+
; RUN: ls %t/logs | count 1
49+
; AFTER1: 1-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
50+
51+
52+
; RUN: cat %t/logs/* | FileCheck -check-prefix=AFTER1_COMMENT %s
53+
; AFTER1_COMMENT: ; *** IR Dump After 1-NoOpModulePass on [module] ***
54+
55+
define void @foo() {
56+
ret void
57+
}
58+
59+
define void @bar() {
60+
entry:
61+
br label %my-loop
62+
63+
my-loop:
64+
br label %my-loop
65+
}

llvm/test/Other/dump-before-after.ll

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
; RUN: opt %s -disable-output -passes='no-op-module' -ir-dump-directory %t/logs -print-after=no-op-module -print-before=no-op-module
66
; RUN: ls %t/logs | FileCheck %s --check-prefix=SINGLE-PASS
77
; RUN: ls %t/logs | count 2
8-
; SINGLE-PASS-DAG: 0-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
9-
; SINGLE-PASS-DAG: 0-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
8+
; SINGLE-PASS-DAG: 1-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
9+
; SINGLE-PASS-DAG: 1-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
1010
; RUN: cat %t/logs/*after.ll | FileCheck %s --check-prefix=SINGLE-PASS-CONTENTS
1111

1212
; SINGLE-PASS-CONTENTS: ; *** IR Dump After NoOpModulePass on [module] ***
@@ -31,33 +31,33 @@
3131
; RUN: opt %s -disable-output -passes='no-op-module,no-op-module,no-op-module' -ir-dump-directory %t/logs -print-after=no-op-module -print-before=no-op-module
3232
; RUN: ls %t/logs | FileCheck %s --check-prefix=MULTIPLE-PASSES
3333
; RUN: ls %t/logs | count 6
34-
; MULTIPLE-PASSES-DAG: 0-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
35-
; MULTIPLE-PASSES-DAG: 0-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
36-
; MULTIPLE-PASSES-DAG: 1-[[MODULE_NAME_HASH]]-module-NoOpModulePass-after.ll
34+
; MULTIPLE-PASSES-DAG: 1-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
3735
; MULTIPLE-PASSES-DAG: 1-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
3836
; MULTIPLE-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-module-NoOpModulePass-after.ll
3937
; MULTIPLE-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
38+
; MULTIPLE-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-module-NoOpModulePass-after.ll
39+
; MULTIPLE-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
4040
; RUN: rm -rf %t/logs
4141

4242
; Dump before and after multiple passes, of various levels of granularity
4343

4444
; RUN: opt %s -disable-output -passes='no-op-module,cgscc(no-op-cgscc),function(no-op-function),function(loop(no-op-loop)),no-op-module' -ir-dump-directory %t/logs -print-after=no-op-module,no-op-cgscc,no-op-function,no-op-loop -print-before=no-op-module,no-op-cgscc,no-op-function,no-op-loop
4545
; RUN: ls %t/logs | FileCheck %s --check-prefix=MULTIPLE-GRANULAR-PASSES
4646
; RUN: ls %t/logs | count 14
47-
; MULTIPLE-GRANULAR-PASSES-DAG: 0-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
48-
; MULTIPLE-GRANULAR-PASSES-DAG: 0-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
49-
; MULTIPLE-GRANULAR-PASSES-DAG: 1-[[MODULE_NAME_HASH]]-scc-[[SCC_FOO_HASH:[a-z0-9]+]]-NoOpCGSCCPass-after.ll
50-
; MULTIPLE-GRANULAR-PASSES-DAG: 1-[[MODULE_NAME_HASH]]-scc-[[SCC_FOO_HASH]]-NoOpCGSCCPass-before.ll
51-
; MULTIPLE-GRANULAR-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-scc-[[SCC_BAR_HASH:[a-z0-9]+]]-NoOpCGSCCPass-after.ll
52-
; MULTIPLE-GRANULAR-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-scc-[[SCC_BAR_HASH]]-NoOpCGSCCPass-before.ll
53-
; MULTIPLE-GRANULAR-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-function-[[FUNCTION_FOO_HASH:[a-z0-9]+]]-NoOpFunctionPass-after.ll
54-
; MULTIPLE-GRANULAR-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-function-[[FUNCTION_FOO_HASH]]-NoOpFunctionPass-before.ll
55-
; MULTIPLE-GRANULAR-PASSES-DAG: 4-[[MODULE_NAME_HASH]]-function-[[FUNCTION_BAR_HASH:[a-z0-9]+]]-NoOpFunctionPass-after.ll
56-
; MULTIPLE-GRANULAR-PASSES-DAG: 4-[[MODULE_NAME_HASH]]-function-[[FUNCTION_BAR_HASH]]-NoOpFunctionPass-before.ll
57-
; MULTIPLE-GRANULAR-PASSES-DAG: 9-[[MODULE_NAME_HASH]]-loop-[[LOOP_NAME_HASH:[a-z0-9]+]]-NoOpLoopPass-after.ll
58-
; MULTIPLE-GRANULAR-PASSES-DAG: 9-[[MODULE_NAME_HASH]]-loop-[[LOOP_NAME_HASH]]-NoOpLoopPass-before.ll
59-
; MULTIPLE-GRANULAR-PASSES-DAG: 10-[[MODULE_NAME_HASH]]-module-NoOpModulePass-after.ll
60-
; MULTIPLE-GRANULAR-PASSES-DAG: 10-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
47+
; MULTIPLE-GRANULAR-PASSES-DAG: 1-[[MODULE_NAME_HASH:[a-z0-9]+]]-module-NoOpModulePass-after.ll
48+
; MULTIPLE-GRANULAR-PASSES-DAG: 1-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
49+
; MULTIPLE-GRANULAR-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-scc-[[SCC_FOO_HASH:[a-z0-9]+]]-NoOpCGSCCPass-after.ll
50+
; MULTIPLE-GRANULAR-PASSES-DAG: 2-[[MODULE_NAME_HASH]]-scc-[[SCC_FOO_HASH]]-NoOpCGSCCPass-before.ll
51+
; MULTIPLE-GRANULAR-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-scc-[[SCC_BAR_HASH:[a-z0-9]+]]-NoOpCGSCCPass-after.ll
52+
; MULTIPLE-GRANULAR-PASSES-DAG: 3-[[MODULE_NAME_HASH]]-scc-[[SCC_BAR_HASH]]-NoOpCGSCCPass-before.ll
53+
; MULTIPLE-GRANULAR-PASSES-DAG: 4-[[MODULE_NAME_HASH]]-function-[[FUNCTION_FOO_HASH:[a-z0-9]+]]-NoOpFunctionPass-after.ll
54+
; MULTIPLE-GRANULAR-PASSES-DAG: 4-[[MODULE_NAME_HASH]]-function-[[FUNCTION_FOO_HASH]]-NoOpFunctionPass-before.ll
55+
; MULTIPLE-GRANULAR-PASSES-DAG: 5-[[MODULE_NAME_HASH]]-function-[[FUNCTION_BAR_HASH:[a-z0-9]+]]-NoOpFunctionPass-after.ll
56+
; MULTIPLE-GRANULAR-PASSES-DAG: 5-[[MODULE_NAME_HASH]]-function-[[FUNCTION_BAR_HASH]]-NoOpFunctionPass-before.ll
57+
; MULTIPLE-GRANULAR-PASSES-DAG: 10-[[MODULE_NAME_HASH]]-loop-[[LOOP_NAME_HASH:[a-z0-9]+]]-NoOpLoopPass-after.ll
58+
; MULTIPLE-GRANULAR-PASSES-DAG: 10-[[MODULE_NAME_HASH]]-loop-[[LOOP_NAME_HASH]]-NoOpLoopPass-before.ll
59+
; MULTIPLE-GRANULAR-PASSES-DAG: 11-[[MODULE_NAME_HASH]]-module-NoOpModulePass-after.ll
60+
; MULTIPLE-GRANULAR-PASSES-DAG: 11-[[MODULE_NAME_HASH]]-module-NoOpModulePass-before.ll
6161
; RUN: rm -rf %t/logs
6262

6363
define void @foo() {

0 commit comments

Comments
 (0)