Mercurial > projects > ldc
comparison gen/optimizer.cpp @ 1650:40bd4a0d4870
Update to work with LLVM 2.7.
Removed use of dyn_cast, llvm no compiles
without exceptions and rtti by
default. We do need exceptions for the libconfig stuff, but rtti isn't
necessary (anymore).
Debug info needs to be rewritten, as in LLVM 2.7 the format has
completely changed. To have something to look at while rewriting, the
old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means
that you have to define this to compile at the moment.
Updated tango 0.99.9 patch to include updated EH runtime code, which is
needed for LLVM 2.7 as well.
author | Tomas Lindquist Olsen |
---|---|
date | Wed, 19 May 2010 12:42:32 +0200 |
parents | 4551475bc6b6 |
children |
comparison
equal
deleted
inserted
replaced
1649:36da40ecbbe0 | 1650:40bd4a0d4870 |
---|---|
93 return optimizeLevel || doInline() || !passList.empty(); | 93 return optimizeLevel || doInline() || !passList.empty(); |
94 } | 94 } |
95 | 95 |
96 static void addPass(PassManager& pm, Pass* pass) { | 96 static void addPass(PassManager& pm, Pass* pass) { |
97 pm.add(pass); | 97 pm.add(pass); |
98 | 98 |
99 if (verifyEach) pm.add(createVerifierPass()); | 99 if (verifyEach) pm.add(createVerifierPass()); |
100 } | 100 } |
101 | 101 |
102 // this function inserts some or all of the std-compile-opts passes depending on the | 102 // this function inserts some or all of the std-compile-opts passes depending on the |
103 // optimization level given. | 103 // optimization level given. |
105 // -O1 | 105 // -O1 |
106 if (optimizeLevel >= 1) | 106 if (optimizeLevel >= 1) |
107 { | 107 { |
108 //addPass(pm, createStripDeadPrototypesPass()); | 108 //addPass(pm, createStripDeadPrototypesPass()); |
109 addPass(pm, createGlobalDCEPass()); | 109 addPass(pm, createGlobalDCEPass()); |
110 addPass(pm, createRaiseAllocationsPass()); | 110 addPass(pm, createPromoteMemoryToRegisterPass()); |
111 addPass(pm, createCFGSimplificationPass()); | 111 addPass(pm, createCFGSimplificationPass()); |
112 if (optimizeLevel == 1) | 112 if (optimizeLevel == 1) |
113 addPass(pm, createPromoteMemoryToRegisterPass()); | 113 addPass(pm, createPromoteMemoryToRegisterPass()); |
114 else | 114 else |
115 addPass(pm, createScalarReplAggregatesPass()); | 115 addPass(pm, createScalarReplAggregatesPass()); |
163 addPass(pm, createInstructionCombiningPass()); | 163 addPass(pm, createInstructionCombiningPass()); |
164 addPass(pm, createScalarReplAggregatesPass()); | 164 addPass(pm, createScalarReplAggregatesPass()); |
165 addPass(pm, createCFGSimplificationPass()); | 165 addPass(pm, createCFGSimplificationPass()); |
166 addPass(pm, createInstructionCombiningPass()); | 166 addPass(pm, createInstructionCombiningPass()); |
167 } | 167 } |
168 | 168 |
169 // -O3 | 169 // -O3 |
170 if (optimizeLevel >= 3) | 170 if (optimizeLevel >= 3) |
171 { | 171 { |
172 addPass(pm, createArgumentPromotionPass()); | 172 addPass(pm, createArgumentPromotionPass()); |
173 addPass(pm, createTailDuplicationPass()); | 173 addPass(pm, createTailDuplicationPass()); |
175 addPass(pm, createInstructionCombiningPass()); | 175 addPass(pm, createInstructionCombiningPass()); |
176 addPass(pm, createJumpThreadingPass()); | 176 addPass(pm, createJumpThreadingPass()); |
177 addPass(pm, createCFGSimplificationPass()); | 177 addPass(pm, createCFGSimplificationPass()); |
178 addPass(pm, createScalarReplAggregatesPass()); | 178 addPass(pm, createScalarReplAggregatesPass()); |
179 addPass(pm, createInstructionCombiningPass()); | 179 addPass(pm, createInstructionCombiningPass()); |
180 addPass(pm, createCondPropagationPass()); | 180 addPass(pm, createConstantPropagationPass()); |
181 | 181 |
182 addPass(pm, createReassociatePass()); | 182 addPass(pm, createReassociatePass()); |
183 addPass(pm, createLoopRotatePass()); | 183 addPass(pm, createLoopRotatePass()); |
184 addPass(pm, createLICMPass()); | 184 addPass(pm, createLICMPass()); |
185 addPass(pm, createLoopUnswitchPass()); | 185 addPass(pm, createLoopUnswitchPass()); |
192 addPass(pm, createGVNPass()); | 192 addPass(pm, createGVNPass()); |
193 addPass(pm, createMemCpyOptPass()); | 193 addPass(pm, createMemCpyOptPass()); |
194 addPass(pm, createSCCPPass()); | 194 addPass(pm, createSCCPPass()); |
195 | 195 |
196 addPass(pm, createInstructionCombiningPass()); | 196 addPass(pm, createInstructionCombiningPass()); |
197 addPass(pm, createCondPropagationPass()); | 197 addPass(pm, createConstantPropagationPass()); |
198 | 198 |
199 addPass(pm, createDeadStoreEliminationPass()); | 199 addPass(pm, createDeadStoreEliminationPass()); |
200 addPass(pm, createAggressiveDCEPass()); | 200 addPass(pm, createAggressiveDCEPass()); |
201 addPass(pm, createCFGSimplificationPass()); | 201 addPass(pm, createCFGSimplificationPass()); |
202 addPass(pm, createDeadTypeEliminationPass()); | 202 addPass(pm, createDeadTypeEliminationPass()); |
218 { | 218 { |
219 if (!optimize()) | 219 if (!optimize()) |
220 return false; | 220 return false; |
221 | 221 |
222 PassManager pm; | 222 PassManager pm; |
223 | 223 |
224 if (verifyEach) pm.add(createVerifierPass()); | 224 if (verifyEach) pm.add(createVerifierPass()); |
225 | 225 |
226 addPass(pm, new TargetData(m)); | 226 addPass(pm, new TargetData(m)); |
227 | 227 |
228 bool optimize = optimizeLevel != 0 || doInline(); | 228 bool optimize = optimizeLevel != 0 || doInline(); |
229 | 229 |
230 unsigned optPos = optimizeLevel != 0 | 230 unsigned optPos = optimizeLevel != 0 |