annotate gen/optimizer.cpp @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents 9526b29ae342
children 6aaa3d3c1183
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 PassManager pm;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
19 pm.add(new TargetData(m));
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
20
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
21 // -O0
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
22 if (lvl >= 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
23 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
24 //pm.add(createStripDeadPrototypesPass());
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
25 pm.add(createGlobalDCEPass());
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
26 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
27
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
28 // -O1
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
29 if (lvl >= 1)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
30 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
31 pm.add(createRaiseAllocationsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
32 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
33 pm.add(createPromoteMemoryToRegisterPass());
129
8096ba7082db [svn r133] Fixed some problems with inlining not happening :P
lindquist
parents: 125
diff changeset
34 pm.add(createGlobalOptimizerPass());
8096ba7082db [svn r133] Fixed some problems with inlining not happening :P
lindquist
parents: 125
diff changeset
35 pm.add(createGlobalDCEPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
36 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
37
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
38 // -O2
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
39 if (lvl >= 2)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
40 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
41 pm.add(createIPConstantPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
42 pm.add(createDeadArgEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
43 pm.add(createInstructionCombiningPass());
607
9526b29ae342 Fixed the optimizer thing, since llvm PR 2800 is already fixed, users need to upgrade LLVM to latest svn.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 605
diff changeset
44 pm.add(createCFGSimplificationPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
45 pm.add(createPruneEHPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
46 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
47
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
48 // -inline
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
49 if (doinline) {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
50 pm.add(createFunctionInliningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
51 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
52
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
53 // -O3
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
54 if (lvl >= 3)
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
55 {
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
56 pm.add(createArgumentPromotionPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
57 pm.add(createTailDuplicationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
58 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
59 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
60 pm.add(createScalarReplAggregatesPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
61 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
62 pm.add(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
63
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
64 pm.add(createTailCallEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
65 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
66 pm.add(createReassociatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
67 pm.add(createLoopRotatePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
68 pm.add(createLICMPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
69 pm.add(createLoopUnswitchPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
70 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
71 pm.add(createIndVarSimplifyPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
72 pm.add(createLoopUnrollPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
73 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
74 pm.add(createGVNPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
75 pm.add(createSCCPPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
76
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
77 pm.add(createInstructionCombiningPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
78 pm.add(createCondPropagationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
79
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
80 pm.add(createDeadStoreEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
81 pm.add(createAggressiveDCEPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
82 pm.add(createCFGSimplificationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
83 pm.add(createSimplifyLibCallsPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
84 pm.add(createDeadTypeEliminationPass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
85 pm.add(createConstantMergePass());
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
86 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
87
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
88 // level -O4 and -O5 are linktime optimizations
125
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 pm.run(*m);
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
91 }