125
|
1 #include "llvm/PassManager.h"
|
|
2 #include "llvm/LinkAllPasses.h"
|
|
3 #include "llvm/Analysis/LoopPass.h"
|
|
4 #include "llvm/Target/TargetData.h"
|
|
5
|
|
6 using namespace llvm;
|
|
7
|
|
8 //////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
|
10 // this function runs some or all of the std-compile-opts passes depending on the
|
|
11 // optimization level given.
|
|
12
|
|
13 void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
|
|
14 {
|
|
15 assert(lvl >= 0 && lvl <= 5);
|
|
16 if (lvl == 0)
|
|
17 return;
|
|
18
|
|
19 PassManager pm;
|
|
20 pm.add(new TargetData(m));
|
|
21
|
|
22 if (lvl >= 1)
|
|
23 {
|
|
24 pm.add(createRaiseAllocationsPass());
|
|
25 pm.add(createCFGSimplificationPass());
|
|
26 pm.add(createPromoteMemoryToRegisterPass());
|
|
27 }
|
|
28
|
|
29 if (lvl >= 2)
|
|
30 {
|
|
31 pm.add(createGlobalOptimizerPass());
|
|
32 pm.add(createGlobalDCEPass());
|
|
33 pm.add(createIPConstantPropagationPass());
|
|
34 pm.add(createDeadArgEliminationPass());
|
|
35 pm.add(createInstructionCombiningPass());
|
|
36 pm.add(createCFGSimplificationPass());
|
|
37 pm.add(createPruneEHPass());
|
|
38 }
|
|
39
|
|
40 if (doinline) {
|
|
41 pm.add(createFunctionInliningPass());
|
|
42 }
|
|
43
|
|
44 if (lvl >= 3)
|
|
45 {
|
|
46 pm.add(createArgumentPromotionPass());
|
|
47 pm.add(createTailDuplicationPass());
|
|
48 pm.add(createInstructionCombiningPass());
|
|
49 pm.add(createCFGSimplificationPass());
|
|
50 pm.add(createScalarReplAggregatesPass());
|
|
51 pm.add(createInstructionCombiningPass());
|
|
52 pm.add(createCondPropagationPass());
|
|
53
|
|
54 pm.add(createTailCallEliminationPass());
|
|
55 pm.add(createCFGSimplificationPass());
|
|
56 pm.add(createReassociatePass());
|
|
57 pm.add(createLoopRotatePass());
|
|
58 pm.add(createLICMPass());
|
|
59 pm.add(createLoopUnswitchPass());
|
|
60 pm.add(createInstructionCombiningPass());
|
|
61 pm.add(createIndVarSimplifyPass());
|
|
62 pm.add(createLoopUnrollPass());
|
|
63 pm.add(createInstructionCombiningPass());
|
|
64 pm.add(createGVNPass());
|
|
65 pm.add(createSCCPPass());
|
|
66
|
|
67 pm.add(createInstructionCombiningPass());
|
|
68 pm.add(createCondPropagationPass());
|
|
69
|
|
70 pm.add(createDeadStoreEliminationPass());
|
|
71 pm.add(createAggressiveDCEPass());
|
|
72 pm.add(createCFGSimplificationPass());
|
|
73 pm.add(createSimplifyLibCallsPass());
|
|
74 pm.add(createDeadTypeEliminationPass());
|
|
75 pm.add(createConstantMergePass());
|
|
76 }
|
|
77
|
|
78 // level 4 and 5 are linktime optimizations
|
|
79
|
|
80 pm.run(*m);
|
|
81 }
|