Mercurial > projects > ldc
view gen/optimizer.cpp @ 203:e881c9b1c738 trunk
[svn r219] Fixed: the tango/lib/gc/basic garbage collector now compiles and links into an executable (change in tango/lib/llvmdc-posix.mak), closes #5 .
Changed: removed the crappy realloc based dynamic memory runtime and started moving over to DMD style runtime support, part of moving to real GC.
Fixed: dynamic arrays now use GC runtime for allocating memory.
Fixed: new expression now use GC for allocating memory.
Changed: revamped the dynamic array support routines related to dynamic memory.
Fixed: assertions no longer create exsessive allocas.
Changed: misc. minor cleanups.
author | lindquist |
---|---|
date | Tue, 13 May 2008 14:42:09 +0200 |
parents | 5825d48b27d1 |
children | 665b81613475 |
line wrap: on
line source
#include "llvm/PassManager.h" #include "llvm/LinkAllPasses.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/Target/TargetData.h" using namespace llvm; ////////////////////////////////////////////////////////////////////////////////////////// // this function runs some or all of the std-compile-opts passes depending on the // optimization level given. 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()); pm.add(createCFGSimplificationPass()); pm.add(createPromoteMemoryToRegisterPass()); pm.add(createGlobalOptimizerPass()); pm.add(createGlobalDCEPass()); } // -O2 if (lvl >= 2) { pm.add(createIPConstantPropagationPass()); pm.add(createDeadArgEliminationPass()); pm.add(createInstructionCombiningPass()); pm.add(createCFGSimplificationPass()); pm.add(createPruneEHPass()); } // -inline if (doinline) { pm.add(createFunctionInliningPass()); } // -O3 if (lvl >= 3) { pm.add(createArgumentPromotionPass()); pm.add(createTailDuplicationPass()); pm.add(createInstructionCombiningPass()); pm.add(createCFGSimplificationPass()); pm.add(createScalarReplAggregatesPass()); pm.add(createInstructionCombiningPass()); pm.add(createCondPropagationPass()); pm.add(createTailCallEliminationPass()); pm.add(createCFGSimplificationPass()); pm.add(createReassociatePass()); pm.add(createLoopRotatePass()); pm.add(createLICMPass()); pm.add(createLoopUnswitchPass()); pm.add(createInstructionCombiningPass()); pm.add(createIndVarSimplifyPass()); pm.add(createLoopUnrollPass()); pm.add(createInstructionCombiningPass()); pm.add(createGVNPass()); pm.add(createSCCPPass()); pm.add(createInstructionCombiningPass()); pm.add(createCondPropagationPass()); pm.add(createDeadStoreEliminationPass()); pm.add(createAggressiveDCEPass()); pm.add(createCFGSimplificationPass()); pm.add(createSimplifyLibCallsPass()); pm.add(createDeadTypeEliminationPass()); pm.add(createConstantMergePass()); } // level -O4 and -O5 are linktime optimizations pm.run(*m); }