annotate gen/optimizer.cpp @ 270:d9d5d59873d8 trunk

[svn r291] Fixed a bunch of the old Phobos tests to work with Tango. Branch statements now emit a new block after it. Fixed the _adSort runtime function had a bad signature. Added a missing dot prefix on compiler generated string tables for string switch. Fixed, PTRSIZE seems like it was wrong on 64bit, now it definitely gets set properly.
author lindquist
date Mon, 16 Jun 2008 16:01:19 +0200
parents 5825d48b27d1
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 }