annotate gen/optimizer.cpp @ 945:03d7c4aac654

SWITCHED TO LLVM 2.5 ! Applied patch from ticket #129 to compile against latest LLVM. Thanks Frits van Bommel. Fixed implicit return by asm block at the end of a function on x86-32. Other architectures will produce an error at the moment. Adding support for new targets is fairly simple. Fixed return calling convention for complex numbers, ST and ST(1) were switched around. Added some testcases. I've run a dstress test and there are no regressions. However, the runtime does not seem to compile with symbolic debug information. -O3 -release -inline works well and is what I used for the dstress run. Tango does not compile, a small workaround is needed in tango.io.digest.Digest.Digest.hexDigest. See ticket #206 .
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 08 Feb 2009 05:26:54 +0100
parents 6aaa3d3c1183
children e40c65bd8c5d
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
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 607
diff changeset
13 void ldc_optimize_module(Module* m, char lvl, bool doinline)
125
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 }