annotate 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
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 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
15 if (!doinline && lvl < 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
16 return;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
17
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
18 assert(lvl >= 0 && lvl <= 5);
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
19
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
20 PassManager pm;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
21 pm.add(new TargetData(m));
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
22
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
23 // -O0
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
24 if (lvl >= 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
25 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
26 //pm.add(createStripDeadPrototypesPass());
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
27 pm.add(createGlobalDCEPass());
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
28 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
29
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
30 // -O1
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
31 if (lvl >= 1)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
32 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
33 pm.add(createRaiseAllocationsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
34 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
35 pm.add(createPromoteMemoryToRegisterPass());
129
8096ba7082db [svn r133] Fixed some problems with inlining not happening :P
lindquist
parents: 125
diff changeset
36 pm.add(createGlobalOptimizerPass());
8096ba7082db [svn r133] Fixed some problems with inlining not happening :P
lindquist
parents: 125
diff changeset
37 pm.add(createGlobalDCEPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
38 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
39
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
40 // -O2
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
41 if (lvl >= 2)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
42 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
43 pm.add(createIPConstantPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
44 pm.add(createDeadArgEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
45 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
46 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
47 pm.add(createPruneEHPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
48 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
49
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
50 // -inline
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
51 if (doinline) {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
52 pm.add(createFunctionInliningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
53 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
54
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
55 // -O3
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
56 if (lvl >= 3)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
57 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
58 pm.add(createArgumentPromotionPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
59 pm.add(createTailDuplicationPass());
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(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
62 pm.add(createScalarReplAggregatesPass());
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(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
65
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
66 pm.add(createTailCallEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
67 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
68 pm.add(createReassociatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
69 pm.add(createLoopRotatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
70 pm.add(createLICMPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
71 pm.add(createLoopUnswitchPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
72 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
73 pm.add(createIndVarSimplifyPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
74 pm.add(createLoopUnrollPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
75 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
76 pm.add(createGVNPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
77 pm.add(createSCCPPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
78
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
79 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
80 pm.add(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
81
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
82 pm.add(createDeadStoreEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
83 pm.add(createAggressiveDCEPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
84 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
85 pm.add(createSimplifyLibCallsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
86 pm.add(createDeadTypeEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
87 pm.add(createConstantMergePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
88 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
89
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
90 // level -O4 and -O5 are linktime optimizations
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
91
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
92 pm.run(*m);
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
93 }