comparison gen/optimizer.cpp @ 1506:76936858d1c6

Return `void*` from _d_allocclass so LLVM doesn't do weird things with it... This allows `-instcombine` followed by `-gvn` to do devirtualization, so add `-gvn` in strategic places in the default pass order.
author Frits van Bommel <fvbommel wxs.nl>
date Sat, 20 Jun 2009 11:39:13 +0200
parents ef76f6e1693c
children f86fd3b77285
comparison
equal deleted inserted replaced
1505:1e5a14691e77 1506:76936858d1c6
133 addPass(pm, createCFGSimplificationPass()); 133 addPass(pm, createCFGSimplificationPass());
134 addPass(pm, createPruneEHPass()); 134 addPass(pm, createPruneEHPass());
135 addPass(pm, createFunctionAttrsPass()); 135 addPass(pm, createFunctionAttrsPass());
136 addPass(pm, createTailCallEliminationPass()); 136 addPass(pm, createTailCallEliminationPass());
137 addPass(pm, createCFGSimplificationPass()); 137 addPass(pm, createCFGSimplificationPass());
138 addPass(pm, createGVNPass());
138 } 139 }
139 140
140 // -inline 141 // -inline
141 if (doInline()) { 142 if (doInline()) {
142 addPass(pm, createFunctionInliningPass()); 143 addPass(pm, createFunctionInliningPass());
143 144
144 if (optimizeLevel >= 2) { 145 if (optimizeLevel >= 2) {
145 // Run some optimizations to clean up after inlining. 146 // Run some optimizations to clean up after inlining.
146 addPass(pm, createScalarReplAggregatesPass()); 147 addPass(pm, createScalarReplAggregatesPass());
147 addPass(pm, createInstructionCombiningPass()); 148 addPass(pm, createInstructionCombiningPass());
148 149 // -instcombine + gvn == devirtualization :)
149 // Inline again, to catch things like foreach delegates 150 addPass(pm, createGVNPass());
150 // passed to inlined opApply's where the function wasn't 151
151 // known during the first inliner pass. 152 // Inline again, to catch things like now nonvirtual
153 // function calls, foreach delegates passed to inlined
154 // opApply's, etc. where the actual function being called
155 // wasn't known during the first inliner pass.
152 addPass(pm, createFunctionInliningPass()); 156 addPass(pm, createFunctionInliningPass());
153 157
154 // Run clean-up again. 158 // Run clean-up again.
155 addPass(pm, createScalarReplAggregatesPass()); 159 addPass(pm, createScalarReplAggregatesPass());
156 addPass(pm, createInstructionCombiningPass()); 160 addPass(pm, createInstructionCombiningPass());