Mercurial > projects > ldc
diff gen/optimizer.cpp @ 131:5825d48b27d1 trunk
[svn r135] * Merged DMD 1.025 *
* Fixed a minor linking order mishap *
* Added an command line option -annotate *
* Fixed some problems with running optimizations *
* Added std.stdio and dependencies to lphobos (still not 100% working, but compiles and links) *
* Fixed problems with passing aggregate types to variadic functions *
* Added initial code towards full GC support, currently based on malloc and friends, not all the runtime calls the GC yet for memory *
* Fixed problems with resolving nested function context pointers for some heavily nested cases *
* Redid function argument passing + other minor code cleanups, still lots to do on this end... *
author | lindquist |
---|---|
date | Fri, 04 Jan 2008 01:38:42 +0100 |
parents | 8096ba7082db |
children | 665b81613475 |
line wrap: on
line diff
--- a/gen/optimizer.cpp Fri Dec 28 23:52:40 2007 +0100 +++ b/gen/optimizer.cpp Fri Jan 04 01:38:42 2008 +0100 @@ -12,11 +12,22 @@ void llvmdc_optimize_module(Module* m, char lvl, bool doinline) { + if (!doinline && lvl < 0) + return; + assert(lvl >= 0 && lvl <= 5); PassManager pm; pm.add(new TargetData(m)); + // -O0 + if (lvl >= 0) + { + //pm.add(createStripDeadPrototypesPass()); + pm.add(createGlobalDCEPass()); + } + + // -O1 if (lvl >= 1) { pm.add(createRaiseAllocationsPass()); @@ -26,6 +37,7 @@ pm.add(createGlobalDCEPass()); } + // -O2 if (lvl >= 2) { pm.add(createIPConstantPropagationPass()); @@ -35,10 +47,12 @@ pm.add(createPruneEHPass()); } + // -inline if (doinline) { pm.add(createFunctionInliningPass()); } + // -O3 if (lvl >= 3) { pm.add(createArgumentPromotionPass()); @@ -73,8 +87,7 @@ pm.add(createConstantMergePass()); } - // level 4 and 5 are linktime optimizations + // level -O4 and -O5 are linktime optimizations - if (lvl > 0 || doinline) - pm.run(*m); + pm.run(*m); }