Skip to content

Commit bc879a4

Browse files
committed
rustc: Replace our homebrew list of passes with the standard function and module passes, along with the TargetData passes.
1 parent d97c5d9 commit bc879a4

File tree

2 files changed

+21
-51
lines changed

2 files changed

+21
-51
lines changed

src/comp/back/Link.rs

Lines changed: 16 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import lib.llvm.mk_pass_manager;
1010
import lib.llvm.mk_target_data;
1111
import lib.llvm.mk_type_names;
1212
import lib.llvm.False;
13+
import lib.llvm.True;
1314

1415
tag output_type {
1516
output_type_none;
@@ -79,6 +80,9 @@ mod Write {
7980
auto pm = mk_pass_manager();
8081
auto opts = sess.get_opts();
8182

83+
auto td = mk_target_data(x86.get_data_layout());
84+
llvm.LLVMAddTargetData(td.lltd, pm.llpm);
85+
8286
// TODO: run the linter here also, once there are llvm-c bindings for
8387
// it.
8488

@@ -109,58 +113,20 @@ mod Write {
109113
// tool?
110114
if (opts.optimize) {
111115
auto fpm = mk_pass_manager();
112-
113-
// createStandardFunctionPasses
114-
llvm.LLVMAddTypeBasedAliasAnalysisPass(fpm.llpm);
115-
llvm.LLVMAddBasicAliasAnalysisPass(fpm.llpm);
116-
llvm.LLVMAddCFGSimplificationPass(fpm.llpm);
117-
llvm.LLVMAddScalarReplAggregatesPass(fpm.llpm);
118-
llvm.LLVMAddEarlyCSEPass(fpm.llpm);
119-
116+
llvm.LLVMAddTargetData(td.lltd, fpm.llpm);
117+
llvm.LLVMAddStandardFunctionPasses(fpm.llpm, 2u);
120118
llvm.LLVMRunPassManager(fpm.llpm, llmod);
121119

122-
// createStandardModulePasses
123-
llvm.LLVMAddTypeBasedAliasAnalysisPass(pm.llpm);
124-
llvm.LLVMAddBasicAliasAnalysisPass(pm.llpm);
125-
llvm.LLVMAddGlobalOptimizerPass(pm.llpm);
126-
llvm.LLVMAddIPSCCPPass(pm.llpm);
127-
llvm.LLVMAddDeadArgEliminationPass(pm.llpm);
128-
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
129-
llvm.LLVMAddCFGSimplificationPass(pm.llpm);
130-
llvm.LLVMAddPruneEHPass(pm.llpm);
131-
llvm.LLVMAddFunctionInliningPass(pm.llpm);
132-
llvm.LLVMAddFunctionAttrsPass(pm.llpm);
133-
llvm.LLVMAddScalarReplAggregatesPassSSA(pm.llpm);
134-
llvm.LLVMAddEarlyCSEPass(pm.llpm);
135-
llvm.LLVMAddSimplifyLibCallsPass(pm.llpm);
136-
llvm.LLVMAddJumpThreadingPass(pm.llpm);
137-
llvm.LLVMAddCorrelatedValuePropagationPass(pm.llpm);
138-
llvm.LLVMAddCFGSimplificationPass(pm.llpm);
139-
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
140-
llvm.LLVMAddTailCallEliminationPass(pm.llpm);
141-
llvm.LLVMAddCFGSimplificationPass(pm.llpm);
142-
llvm.LLVMAddReassociatePass(pm.llpm);
143-
llvm.LLVMAddLoopRotatePass(pm.llpm);
144-
llvm.LLVMAddLICMPass(pm.llpm);
145-
llvm.LLVMAddLoopUnswitchPass(pm.llpm);
146-
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
147-
llvm.LLVMAddIndVarSimplifyPass(pm.llpm);
148-
llvm.LLVMAddLoopIdiomPass(pm.llpm);
149-
llvm.LLVMAddLoopDeletionPass(pm.llpm);
150-
llvm.LLVMAddLoopUnrollPass(pm.llpm);
151-
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
152-
llvm.LLVMAddGVNPass(pm.llpm);
153-
llvm.LLVMAddMemCpyOptPass(pm.llpm);
154-
llvm.LLVMAddSCCPPass(pm.llpm);
155-
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
156-
llvm.LLVMAddJumpThreadingPass(pm.llpm);
157-
llvm.LLVMAddCorrelatedValuePropagationPass(pm.llpm);
158-
llvm.LLVMAddDeadStoreEliminationPass(pm.llpm);
159-
llvm.LLVMAddAggressiveDCEPass(pm.llpm);
160-
llvm.LLVMAddCFGSimplificationPass(pm.llpm);
161-
llvm.LLVMAddStripDeadPrototypesPass(pm.llpm);
162-
llvm.LLVMAddDeadTypeEliminationPass(pm.llpm);
163-
llvm.LLVMAddConstantMergePass(pm.llpm);
120+
// TODO: On -O3, use 275 instead of 225 for the inlining
121+
// threshold.
122+
llvm.LLVMAddStandardModulePasses(pm.llpm,
123+
2u, // optimization level
124+
False, // optimize for size
125+
True, // unit-at-a-time
126+
True, // unroll loops
127+
True, // simplify lib calls
128+
True, // have exceptions
129+
225u); // inlining threshold
164130
}
165131

166132
if (opts.verify) {

src/comp/lib/llvm.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,9 @@ native mod llvm = llvm_lib {
748748

749749
/** Creates target data from a target layout string. */
750750
fn LLVMCreateTargetData(sbuf StringRep) -> TargetDataRef;
751+
/** Adds the target data to the given pass manager. The pass manager
752+
references the target data only weakly. */
753+
fn LLVMAddTargetData(TargetDataRef TD, PassManagerRef PM);
751754
/** Returns the size of a type. FIXME: rv is actually a ULongLong! */
752755
fn LLVMStoreSizeOfType(TargetDataRef TD, TypeRef Ty) -> uint;
753756
/** Returns the alignment of a type. */
@@ -802,7 +805,8 @@ native mod llvm = llvm_lib {
802805
fn LLVMAddTypeBasedAliasAnalysisPass(PassManagerRef PM);
803806
fn LLVMAddBasicAliasAnalysisPass(PassManagerRef PM);
804807

805-
// FIXME: Native stubs don't allow this many arguments yet.
808+
fn LLVMAddStandardFunctionPasses(PassManagerRef PM,
809+
uint OptimizationLevel);
806810
fn LLVMAddStandardModulePasses(PassManagerRef PM,
807811
uint OptimizationLevel,
808812
Bool OptimizeSize,

0 commit comments

Comments
 (0)