annotate gen/optimizer.cpp @ 125:c42d245468ea trunk

[svn r129] Started AA literals. Fixed #15, passing -O will now invoke the optimizer before writing bitcode.
author lindquist
date Wed, 28 Nov 2007 04:52:35 +0100
parents
children 8096ba7082db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
1 #include "llvm/PassManager.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
2 #include "llvm/LinkAllPasses.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
3 #include "llvm/Analysis/LoopPass.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
4 #include "llvm/Target/TargetData.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
5
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
6 using namespace llvm;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
7
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
8 //////////////////////////////////////////////////////////////////////////////////////////
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
9
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
10 // this function runs some or all of the std-compile-opts passes depending on the
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
11 // optimization level given.
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
12
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
13 void llvmdc_optimize_module(Module* m, char lvl, bool doinline)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
14 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
15 assert(lvl >= 0 && lvl <= 5);
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
16 if (lvl == 0)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
17 return;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
18
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
19 PassManager pm;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
20 pm.add(new TargetData(m));
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
21
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
22 if (lvl >= 1)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
23 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
24 pm.add(createRaiseAllocationsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
25 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
26 pm.add(createPromoteMemoryToRegisterPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
27 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
28
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
29 if (lvl >= 2)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
30 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
31 pm.add(createGlobalOptimizerPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
32 pm.add(createGlobalDCEPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
33 pm.add(createIPConstantPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
34 pm.add(createDeadArgEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
35 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
36 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
37 pm.add(createPruneEHPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
38 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
39
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
40 if (doinline) {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
41 pm.add(createFunctionInliningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
42 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
43
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
44 if (lvl >= 3)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
45 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
46 pm.add(createArgumentPromotionPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
47 pm.add(createTailDuplicationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
48 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
49 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
50 pm.add(createScalarReplAggregatesPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
51 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
52 pm.add(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
53
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
54 pm.add(createTailCallEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
55 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
56 pm.add(createReassociatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
57 pm.add(createLoopRotatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
58 pm.add(createLICMPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
59 pm.add(createLoopUnswitchPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
60 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
61 pm.add(createIndVarSimplifyPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
62 pm.add(createLoopUnrollPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
63 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
64 pm.add(createGVNPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
65 pm.add(createSCCPPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
66
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
67 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
68 pm.add(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
69
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
70 pm.add(createDeadStoreEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
71 pm.add(createAggressiveDCEPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
72 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
73 pm.add(createSimplifyLibCallsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
74 pm.add(createDeadTypeEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
75 pm.add(createConstantMergePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
76 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
77
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
78 // level 4 and 5 are linktime optimizations
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
79
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
80 pm.run(*m);
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
81 }