Skip to content

Commit 8f85b3d

Browse files
committed
Print a pass number of the current SIL pass when a compiler crashes
It makes it easier to perform a bisection and finding out the reason of the crash.
1 parent 5b92b39 commit 8f85b3d

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

Diff for: include/swift/SILOptimizer/PassManager/PrettyStackTrace.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,23 @@ class SILModuleTransform;
2323
class PrettyStackTraceSILFunctionTransform
2424
: public llvm::PrettyStackTraceEntry {
2525
SILFunctionTransform *SFT;
26+
unsigned PassNumber;
2627

2728
public:
28-
PrettyStackTraceSILFunctionTransform(SILFunctionTransform *SFT) : SFT(SFT) {}
29+
PrettyStackTraceSILFunctionTransform(SILFunctionTransform *SFT,
30+
unsigned PassNumber)
31+
: SFT(SFT), PassNumber(PassNumber) {}
2932
virtual void print(llvm::raw_ostream &OS) const;
3033
};
3134

3235
class PrettyStackTraceSILModuleTransform : public llvm::PrettyStackTraceEntry {
3336
SILModuleTransform *SMT;
37+
unsigned PassNumber;
3438

3539
public:
36-
PrettyStackTraceSILModuleTransform(SILModuleTransform *SMT) : SMT(SMT) {}
40+
PrettyStackTraceSILModuleTransform(SILModuleTransform *SMT,
41+
unsigned PassNumber)
42+
: SMT(SMT), PassNumber(PassNumber) {}
3743
virtual void print(llvm::raw_ostream &OS) const;
3844
};
3945

Diff for: lib/SILOptimizer/PassManager/PassManager.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ void SILPassManager::runPassesOnFunction(PassList FuncTransforms,
216216
assert(analysesUnlocked() && "Expected all analyses to be unlocked!");
217217

218218
for (auto SFT : FuncTransforms) {
219-
PrettyStackTraceSILFunctionTransform X(SFT);
219+
PrettyStackTraceSILFunctionTransform X(SFT, NumPassesRun);
220220
SFT->injectPassManager(this);
221221
SFT->injectFunction(F);
222222

@@ -409,7 +409,7 @@ void SILPassManager::runModulePass(SILModuleTransform *SMT) {
409409

410410
const SILOptions &Options = getOptions();
411411

412-
PrettyStackTraceSILModuleTransform X(SMT);
412+
PrettyStackTraceSILModuleTransform X(SMT, NumPassesRun);
413413

414414
SMT->injectPassManager(this);
415415
SMT->injectModule(Mod);

Diff for: lib/SILOptimizer/PassManager/PrettyStackTrace.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
using namespace swift;
1919

2020
void PrettyStackTraceSILFunctionTransform::print(llvm::raw_ostream &out) const {
21-
out << "While running SILFunctionTransform \"" << SFT->getName()
21+
out << "While running pass #" << PassNumber
22+
<< " SILFunctionTransform \"" << SFT->getName()
2223
<< "\" on SILFunction ";
2324
if (!SFT->getFunction()) {
2425
out << " <<null>>";
@@ -30,5 +31,6 @@ void PrettyStackTraceSILFunctionTransform::print(llvm::raw_ostream &out) const {
3031
}
3132

3233
void PrettyStackTraceSILModuleTransform::print(llvm::raw_ostream &out) const {
33-
out << "While running SILModuleTransform \"" << SMT->getName() << "\".\n";
34+
out << "While running pass #" << PassNumber
35+
<< " SILModuleTransform \"" << SMT->getName() << "\".\n";
3436
}

0 commit comments

Comments
 (0)