diff options
| author | Patrick Walton <[email protected]> | 2011-05-06 18:56:11 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-05-09 11:44:47 -0700 |
| commit | bc879a4e1e72295ad46a482f7abadc41005340e3 (patch) | |
| tree | 3ff0f6136012e2953bc9993bb60d822ab9a73e3f /src/comp/back/Link.rs | |
| parent | Register new snapshots. (diff) | |
| download | rust-bc879a4e1e72295ad46a482f7abadc41005340e3.tar.xz rust-bc879a4e1e72295ad46a482f7abadc41005340e3.zip | |
rustc: Replace our homebrew list of passes with the standard function and module passes, along with the TargetData passes.
Diffstat (limited to 'src/comp/back/Link.rs')
| -rw-r--r-- | src/comp/back/Link.rs | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/src/comp/back/Link.rs b/src/comp/back/Link.rs index 89ed0d37..15be6dc8 100644 --- a/src/comp/back/Link.rs +++ b/src/comp/back/Link.rs @@ -10,6 +10,7 @@ import lib.llvm.mk_pass_manager; import lib.llvm.mk_target_data; import lib.llvm.mk_type_names; import lib.llvm.False; +import lib.llvm.True; tag output_type { output_type_none; @@ -79,6 +80,9 @@ mod Write { auto pm = mk_pass_manager(); auto opts = sess.get_opts(); + auto td = mk_target_data(x86.get_data_layout()); + llvm.LLVMAddTargetData(td.lltd, pm.llpm); + // TODO: run the linter here also, once there are llvm-c bindings for // it. @@ -109,58 +113,20 @@ mod Write { // tool? if (opts.optimize) { auto fpm = mk_pass_manager(); - - // createStandardFunctionPasses - llvm.LLVMAddTypeBasedAliasAnalysisPass(fpm.llpm); - llvm.LLVMAddBasicAliasAnalysisPass(fpm.llpm); - llvm.LLVMAddCFGSimplificationPass(fpm.llpm); - llvm.LLVMAddScalarReplAggregatesPass(fpm.llpm); - llvm.LLVMAddEarlyCSEPass(fpm.llpm); - + llvm.LLVMAddTargetData(td.lltd, fpm.llpm); + llvm.LLVMAddStandardFunctionPasses(fpm.llpm, 2u); llvm.LLVMRunPassManager(fpm.llpm, llmod); - // createStandardModulePasses - llvm.LLVMAddTypeBasedAliasAnalysisPass(pm.llpm); - llvm.LLVMAddBasicAliasAnalysisPass(pm.llpm); - llvm.LLVMAddGlobalOptimizerPass(pm.llpm); - llvm.LLVMAddIPSCCPPass(pm.llpm); - llvm.LLVMAddDeadArgEliminationPass(pm.llpm); - llvm.LLVMAddInstructionCombiningPass(pm.llpm); - llvm.LLVMAddCFGSimplificationPass(pm.llpm); - llvm.LLVMAddPruneEHPass(pm.llpm); - llvm.LLVMAddFunctionInliningPass(pm.llpm); - llvm.LLVMAddFunctionAttrsPass(pm.llpm); - llvm.LLVMAddScalarReplAggregatesPassSSA(pm.llpm); - llvm.LLVMAddEarlyCSEPass(pm.llpm); - llvm.LLVMAddSimplifyLibCallsPass(pm.llpm); - llvm.LLVMAddJumpThreadingPass(pm.llpm); - llvm.LLVMAddCorrelatedValuePropagationPass(pm.llpm); - llvm.LLVMAddCFGSimplificationPass(pm.llpm); - llvm.LLVMAddInstructionCombiningPass(pm.llpm); - llvm.LLVMAddTailCallEliminationPass(pm.llpm); - llvm.LLVMAddCFGSimplificationPass(pm.llpm); - llvm.LLVMAddReassociatePass(pm.llpm); - llvm.LLVMAddLoopRotatePass(pm.llpm); - llvm.LLVMAddLICMPass(pm.llpm); - llvm.LLVMAddLoopUnswitchPass(pm.llpm); - llvm.LLVMAddInstructionCombiningPass(pm.llpm); - llvm.LLVMAddIndVarSimplifyPass(pm.llpm); - llvm.LLVMAddLoopIdiomPass(pm.llpm); - llvm.LLVMAddLoopDeletionPass(pm.llpm); - llvm.LLVMAddLoopUnrollPass(pm.llpm); - llvm.LLVMAddInstructionCombiningPass(pm.llpm); - llvm.LLVMAddGVNPass(pm.llpm); - llvm.LLVMAddMemCpyOptPass(pm.llpm); - llvm.LLVMAddSCCPPass(pm.llpm); - llvm.LLVMAddInstructionCombiningPass(pm.llpm); - llvm.LLVMAddJumpThreadingPass(pm.llpm); - llvm.LLVMAddCorrelatedValuePropagationPass(pm.llpm); - llvm.LLVMAddDeadStoreEliminationPass(pm.llpm); - llvm.LLVMAddAggressiveDCEPass(pm.llpm); - llvm.LLVMAddCFGSimplificationPass(pm.llpm); - llvm.LLVMAddStripDeadPrototypesPass(pm.llpm); - llvm.LLVMAddDeadTypeEliminationPass(pm.llpm); - llvm.LLVMAddConstantMergePass(pm.llpm); + // TODO: On -O3, use 275 instead of 225 for the inlining + // threshold. + llvm.LLVMAddStandardModulePasses(pm.llpm, + 2u, // optimization level + False, // optimize for size + True, // unit-at-a-time + True, // unroll loops + True, // simplify lib calls + True, // have exceptions + 225u); // inlining threshold } if (opts.verify) { |