Mercurial > projects > ldc
diff tools/binding/llvm-opt.cpp @ 1273:1ba61de8796b
Committing LLVM binding for D as it currently exists in the SVN repository.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 27 Apr 2009 22:33:17 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/binding/llvm-opt.cpp Mon Apr 27 22:33:17 2009 +0200 @@ -0,0 +1,75 @@ +// Optimizer functionality for the LLVM D binding. +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +#include "llvm/PassManager.h" +#include "llvm/LinkAllPasses.h" +#include "llvm/Analysis/LoopPass.h" +#include "llvm/Target/TargetData.h" +#include "llvm-c/Core.h" + +using namespace llvm; + +extern "C" { + +void LLVMOptimizeModule(LLVMModuleRef M, int doinline) +{ + Module* m = unwrap(M); + + PassManager pm; + pm.add(new TargetData(m)); + + //pm.add(createStripDeadPrototypesPass()); + pm.add(createGlobalDCEPass()); + + pm.add(createRaiseAllocationsPass()); + pm.add(createCFGSimplificationPass()); + pm.add(createPromoteMemoryToRegisterPass()); + pm.add(createGlobalOptimizerPass()); + pm.add(createGlobalDCEPass()); + + pm.add(createIPConstantPropagationPass()); + pm.add(createDeadArgEliminationPass()); + pm.add(createInstructionCombiningPass()); + pm.add(createCFGSimplificationPass()); + pm.add(createPruneEHPass()); + + if (doinline) + pm.add(createFunctionInliningPass()); + + 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()); + + pm.run(*m); +} + +}