Skip to content

Commit 998e2ce

Browse files
committed
Remove passes that were causing bad optmizations
1 parent 4988c89 commit 998e2ce

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/librustc/back/passes.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ impl PassManager {
5555

5656
pub fn populatePassManager(pm: &mut PassManager, level:session::OptLevel) {
5757
unsafe {
58+
// We add a lot of normally-unused prototypes, so always strip them
59+
// straight away, later passes will get rid of any that are optimized
60+
// away
61+
pm.addPass(llvm::LLVMCreateStripDeadPrototypesPass());
5862
if level == session::No {
5963
pm.addPass(llvm::LLVMCreateAlwaysInlinerPass());
6064

61-
// We add a lot of unused prototypes, so strip them no matter
62-
// what
63-
pm.addPass(llvm::LLVMCreateStripDeadPrototypesPass());
6465
return;
6566
}
6667

@@ -81,6 +82,13 @@ pub fn populatePassManager(pm: &mut PassManager, level:session::OptLevel) {
8182

8283
pm.addPass(llvm::LLVMCreatePruneEHPass());
8384

85+
if level == session::Aggressive {
86+
// Do this before inlining, since inlining might
87+
// make minor changes to functions that mean they
88+
// can't be merged, despite being almost identical
89+
pm.addPass(llvm::LLVMCreateMergeFunctionsPass());
90+
}
91+
8492
match level {
8593
session::Less => pm.addPass(llvm::LLVMCreateFunctionInliningPass(200)),
8694
session::Default => pm.addPass(llvm::LLVMCreateFunctionInliningPass(225)),
@@ -94,8 +102,6 @@ pub fn populatePassManager(pm: &mut PassManager, level:session::OptLevel) {
94102
pm.addPass(llvm::LLVMCreateArgumentPromotionPass());
95103
}
96104

97-
pm.addPass(llvm::LLVMCreateSROAPass());
98-
99105
pm.addPass(llvm::LLVMCreateEarlyCSEPass());
100106
pm.addPass(llvm::LLVMCreateSimplifyLibCallsPass());
101107
pm.addPass(llvm::LLVMCreateJumpThreadingPass());
@@ -109,8 +115,6 @@ pub fn populatePassManager(pm: &mut PassManager, level:session::OptLevel) {
109115
pm.addPass(llvm::LLVMCreateLoopRotatePass());
110116
pm.addPass(llvm::LLVMCreateLICMPass());
111117

112-
pm.addPass(llvm::LLVMCreateLoopUnswitchPass());
113-
114118
pm.addPass(llvm::LLVMCreateInstructionCombiningPass());
115119
pm.addPass(llvm::LLVMCreateIndVarSimplifyPass());
116120
pm.addPass(llvm::LLVMCreateLoopIdiomPass());
@@ -134,16 +138,17 @@ pub fn populatePassManager(pm: &mut PassManager, level:session::OptLevel) {
134138

135139
pm.addPass(llvm::LLVMCreateBBVectorizePass());
136140
pm.addPass(llvm::LLVMCreateInstructionCombiningPass());
141+
pm.addPass(llvm::LLVMCreateEarlyCSEPass());
142+
143+
pm.addPass(llvm::LLVMCreateLoopUnrollPass());
144+
145+
pm.addPass(llvm::LLVMCreateAggressiveDCEPass());
146+
pm.addPass(llvm::LLVMCreateCFGSimplificationPass());
147+
pm.addPass(llvm::LLVMCreateInstructionSimplifierPass());
148+
137149
if level != session::Less {
138150
pm.addPass(llvm::LLVMCreateGlobalDCEPass());
139151
pm.addPass(llvm::LLVMCreateConstantMergePass());
140152
}
141-
142-
if level == session::Aggressive {
143-
pm.addPass(llvm::LLVMCreateMergeFunctionsPass());
144-
}
145-
146-
pm.addPass(llvm::LLVMCreateStripDeadPrototypesPass());
147-
148153
}
149154
}

0 commit comments

Comments
 (0)