@@ -10,6 +10,7 @@ import lib.llvm.mk_pass_manager;
10
10
import lib. llvm . mk_target_data ;
11
11
import lib. llvm . mk_type_names ;
12
12
import lib. llvm . False ;
13
+ import lib. llvm . True ;
13
14
14
15
tag output_type {
15
16
output_type_none;
@@ -79,6 +80,9 @@ mod Write {
79
80
auto pm = mk_pass_manager ( ) ;
80
81
auto opts = sess. get_opts ( ) ;
81
82
83
+ auto td = mk_target_data ( x86. get_data_layout ( ) ) ;
84
+ llvm. LLVMAddTargetData ( td. lltd , pm. llpm ) ;
85
+
82
86
// TODO: run the linter here also, once there are llvm-c bindings for
83
87
// it.
84
88
@@ -109,58 +113,20 @@ mod Write {
109
113
// tool?
110
114
if ( opts. optimize ) {
111
115
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 , 2 u) ;
120
118
llvm. LLVMRunPassManager ( fpm. llpm , llmod) ;
121
119
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
+ 2 u, // 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
+ 225 u) ; // inlining threshold
164
130
}
165
131
166
132
if ( opts. verify ) {
0 commit comments