annotate gen/optimizer.cpp @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents 79b201533cf8
children 42bd767ec5a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
1 #include "gen/optimizer.h"
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
2 #include "gen/cl_helpers.h"
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
3
1275
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
4 #include "gen/passes/Passes.h"
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
5
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
6 #include "llvm/PassManager.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
7 #include "llvm/LinkAllPasses.h"
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
8 #include "llvm/Analysis/LoopPass.h"
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
9 #include "llvm/Analysis/Verifier.h"
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
10 #include "llvm/Target/TargetData.h"
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
11 #include "llvm/Support/CommandLine.h"
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
12 #include "llvm/Support/PassNameParser.h"
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
13
1172
b3887714b735 Small cleanup: remove mars.h #include
Frits van Bommel <fvbommel wxs.nl>
parents: 1171
diff changeset
14 #include "root.h" // error()
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
15
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
16 using namespace llvm;
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
17
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
18 // Allow the user to specify specific optimizations to run.
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
19 static cl::list<const PassInfo*, bool, PassNameParser>
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
20 passList(
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
21 cl::desc("Running specific optimizations:"),
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
22 cl::Hidden // to clean up --help output
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
23 );
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
24
1281
29d3861aa2da Make sure this still compiles after LLVM r70437, which introduces a
Frits van Bommel <fvbommel wxs.nl>
parents: 1275
diff changeset
25 static cl::opt<unsigned char> optimizeLevel(
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
26 cl::desc("Setting the optimization level:"),
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
27 cl::ZeroOrMore,
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
28 cl::values(
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
29 clEnumValN(2, "O", "Equivalent to -O2"),
1171
461a85f0db31 Change meaning of optimization levels: -O0 now means 'no optimization' like with
Frits van Bommel <fvbommel wxs.nl>
parents: 1170
diff changeset
30 clEnumValN(0, "O0", "No optimizations (default)"),
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
31 clEnumValN(1, "O1", "Simple optimizations"),
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
32 clEnumValN(2, "O2", "Good optimizations"),
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
33 clEnumValN(3, "O3", "Aggressive optimizations"),
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
34 clEnumValN(4, "O4", "Link-time optimization"), // not implemented?
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
35 clEnumValN(5, "O5", "Link-time optimization"), // not implemented?
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
36 clEnumValEnd),
1171
461a85f0db31 Change meaning of optimization levels: -O0 now means 'no optimization' like with
Frits van Bommel <fvbommel wxs.nl>
parents: 1170
diff changeset
37 cl::init(0));
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
38
1275
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
39 static cl::opt<bool>
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
40 verifyEach("verify-each",
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
41 cl::desc("Run verifier after each optimization pass"),
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
42 cl::Hidden,
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
43 cl::ZeroOrMore);
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
44
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
45 static cl::opt<bool>
1275
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
46 disableLangSpecificPasses("disable-d-passes",
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
47 cl::desc("Disable D-specific passes in -O<N>"),
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
48 cl::ZeroOrMore);
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
49
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
50 static cl::opt<bool>
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
51 disableSimplifyRuntimeCalls("disable-simplify-drtcalls",
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
52 cl::desc("Disable simplification of runtime calls in -O<N>"),
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
53 cl::ZeroOrMore);
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
54
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
55 #ifdef USE_METADATA
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
56 static cl::opt<bool>
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
57 disableGCToStack("disable-gc2stack",
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
58 cl::desc("Disable promotion of GC allocations to stack memory in -O<N>"),
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
59 cl::ZeroOrMore);
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
60
1287
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
61 // Not recommended; metadata currently triggers an assert in the backend...
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
62 static cl::opt<bool>
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
63 disableStripMetaData("disable-strip-metadata",
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
64 cl::desc("Disable default metadata stripping (not recommended)"),
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
65 cl::ZeroOrMore);
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
66 #endif
1287
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
67
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
68 static cl::opt<opts::BoolOrDefaultAdapter, false, opts::FlagParser>
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
69 enableInlining("inlining",
1275
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
70 cl::desc("(*) Enable function inlining in -O<N>"),
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
71 cl::ZeroOrMore);
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
72
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
73 // Determine whether or not to run the inliner as part of the default list of
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
74 // optimization passes.
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
75 // If not explicitly specified, treat as false for -O0-2, and true for -O3.
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
76 bool doInline() {
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
77 return enableInlining == cl::BOU_TRUE
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
78 || (enableInlining == cl::BOU_UNSET && optimizeLevel >= 3);
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
79 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
80
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
81 // Some extra accessors for the linker: (llvm-ld version only, currently unused?)
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
82 int optLevel() {
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
83 return optimizeLevel;
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
84 }
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
85
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
86 bool optimize() {
1267
381c3ee0ca00 Fix a logic bug.
Frits van Bommel <fvbommel wxs.nl>
parents: 1220
diff changeset
87 return optimizeLevel || doInline() || !passList.empty();
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
88 }
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
89
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
90 static void addPass(PassManager& pm, Pass* pass) {
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
91 pm.add(pass);
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
92
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
93 if (verifyEach) pm.add(createVerifierPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
94 }
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
95
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
96 // this function inserts some or all of the std-compile-opts passes depending on the
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
97 // optimization level given.
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
98 static void addPassesForOptLevel(PassManager& pm) {
1171
461a85f0db31 Change meaning of optimization levels: -O0 now means 'no optimization' like with
Frits van Bommel <fvbommel wxs.nl>
parents: 1170
diff changeset
99 // -O1
461a85f0db31 Change meaning of optimization levels: -O0 now means 'no optimization' like with
Frits van Bommel <fvbommel wxs.nl>
parents: 1170
diff changeset
100 if (optimizeLevel >= 1)
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
101 {
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
102 //addPass(pm, createStripDeadPrototypesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
103 addPass(pm, createGlobalDCEPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
104 addPass(pm, createRaiseAllocationsPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
105 addPass(pm, createCFGSimplificationPass());
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
106 if (optimizeLevel == 1)
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
107 addPass(pm, createPromoteMemoryToRegisterPass());
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
108 else
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
109 addPass(pm, createScalarReplAggregatesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
110 addPass(pm, createGlobalOptimizerPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
111 addPass(pm, createGlobalDCEPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
112 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
113
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
114 // -O2
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
115 if (optimizeLevel >= 2)
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
116 {
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
117 addPass(pm, createIPConstantPropagationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
118 addPass(pm, createDeadArgEliminationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
119 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
120 addPass(pm, createCFGSimplificationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
121 addPass(pm, createPruneEHPass());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
122
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
123 #ifdef USE_METADATA
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
124 if (!disableLangSpecificPasses && !disableGCToStack)
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
125 addPass(pm, createGarbageCollect2Stack());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
126 #endif
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
127 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
128
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
129 // -inline
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
130 if (doInline()) {
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
131 addPass(pm, createFunctionInliningPass());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
132
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
133 if (optimizeLevel >= 2) {
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
134 // Run some optimizations to clean up after inlining.
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
135 addPass(pm, createScalarReplAggregatesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
136 addPass(pm, createInstructionCombiningPass());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
137
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
138 #ifdef USE_METADATA
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
139 if (!disableLangSpecificPasses && !disableGCToStack)
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
140 addPass(pm, createGarbageCollect2Stack());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
141 #endif
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
142
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
143 // Inline again, to catch things like foreach delegates
1220
e945d2a0999e Fix typo in comment
Frits van Bommel <fvbommel wxs.nl>
parents: 1219
diff changeset
144 // passed to inlined opApply's where the function wasn't
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
145 // known during the first inliner pass.
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
146 addPass(pm, createFunctionInliningPass());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
147
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
148 // Run clean-up again.
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
149 addPass(pm, createScalarReplAggregatesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
150 addPass(pm, createInstructionCombiningPass());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
151
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
152 #ifdef USE_METADATA
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
153 if (!disableLangSpecificPasses && !disableGCToStack)
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
154 addPass(pm, createGarbageCollect2Stack());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
155 #endif
1219
a0844cc67840 Tweak some optimizations.
Frits van Bommel <fvbommel wxs.nl>
parents: 1175
diff changeset
156 }
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
157 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
158
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
159 if (optimizeLevel >= 2 && !disableLangSpecificPasses) {
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
160 if (!disableSimplifyRuntimeCalls)
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
161 addPass(pm, createSimplifyDRuntimeCalls());
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
162
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
163 #ifdef USE_METADATA
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
164 if (!disableGCToStack) {
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
165 // Run some clean-up after the last GC to stack promotion pass.
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
166 addPass(pm, createScalarReplAggregatesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
167 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
168 addPass(pm, createCFGSimplificationPass());
1285
91d9386d4a5a Implement another D-specific pass: -dgc2stack
Frits van Bommel <fvbommel wxs.nl>
parents: 1281
diff changeset
169 }
1288
e109e4031e8a Fix build when USE_METADATA is off.
Matti Niemenmaa <matti.niemenmaa+hg@iki.fi>
parents: 1287
diff changeset
170 #endif
1275
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
171 }
bedf0bfb8fdb Implement first D-specific optimization pass: -simplify-drtcalls.
Frits van Bommel <fvbommel wxs.nl>
parents: 1268
diff changeset
172
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
173 // -O3
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
174 if (optimizeLevel >= 3)
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
175 {
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
176 addPass(pm, createArgumentPromotionPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
177 addPass(pm, createTailDuplicationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
178 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
179 addPass(pm, createCFGSimplificationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
180 addPass(pm, createScalarReplAggregatesPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
181 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
182 addPass(pm, createCondPropagationPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
183
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
184 addPass(pm, createTailCallEliminationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
185 addPass(pm, createCFGSimplificationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
186 addPass(pm, createReassociatePass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
187 addPass(pm, createLoopRotatePass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
188 addPass(pm, createLICMPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
189 addPass(pm, createLoopUnswitchPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
190 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
191 addPass(pm, createIndVarSimplifyPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
192 addPass(pm, createLoopUnrollPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
193 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
194 addPass(pm, createGVNPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
195 addPass(pm, createSCCPPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
196
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
197 addPass(pm, createInstructionCombiningPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
198 addPass(pm, createCondPropagationPass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
199
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
200 addPass(pm, createDeadStoreEliminationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
201 addPass(pm, createAggressiveDCEPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
202 addPass(pm, createCFGSimplificationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
203 addPass(pm, createSimplifyLibCallsPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
204 addPass(pm, createDeadTypeEliminationPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
205 addPass(pm, createConstantMergePass());
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
206 }
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
207
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
208 // level -O4 and -O5 are linktime optimizations
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
209 }
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
210
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
211 //////////////////////////////////////////////////////////////////////////////////////////
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
212 // This function runs optimization passes based on command line arguments.
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
213 // Returns true if any optimization passes were invoked.
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
214 bool ldc_optimize_module(llvm::Module* m)
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
215 {
1287
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
216 if (!optimize()) {
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
217 #ifdef USE_METADATA
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
218 if (!disableStripMetaData) {
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
219 // This one always needs to run if metadata is generated, because
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
220 // the code generator will assert if it's not used.
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
221 ModulePass* stripMD = createStripMetaData();
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
222 stripMD->runOnModule(*m);
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
223 delete stripMD;
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
224 }
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
225 #endif
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
226 return false;
1287
6c8af78364f5 There's an issue with LLVM metadata support; it triggers an assert when trying
Frits van Bommel <fvbommel wxs.nl>
parents: 1285
diff changeset
227 }
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
228
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
229 PassManager pm;
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
230
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
231 if (verifyEach) pm.add(createVerifierPass());
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
232
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
233 addPass(pm, new TargetData(m));
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
234
1175
cc1efa23030a Enable inlining by default for -O3+.
Frits van Bommel <fvbommel wxs.nl>
parents: 1172
diff changeset
235 bool optimize = optimizeLevel != 0 || doInline();
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
236
1171
461a85f0db31 Change meaning of optimization levels: -O0 now means 'no optimization' like with
Frits van Bommel <fvbommel wxs.nl>
parents: 1170
diff changeset
237 unsigned optPos = optimizeLevel != 0
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
238 ? optimizeLevel.getPosition()
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
239 : enableInlining.getPosition();
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
240
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
241 for (size_t i = 0; i < passList.size(); i++) {
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
242 // insert -O<N> / -enable-inlining in right position
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
243 if (optimize && optPos < passList.getPosition(i)) {
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
244 addPassesForOptLevel(pm);
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
245 optimize = false;
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
246 }
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
247
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
248 const PassInfo* pass = passList[i];
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
249 if (PassInfo::NormalCtor_t ctor = pass->getNormalCtor()) {
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
250 addPass(pm, ctor());
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
251 } else {
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
252 const char* arg = pass->getPassArgument(); // may return null
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
253 if (arg)
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
254 error("Can't create pass '-%s' (%s)", arg, pass->getPassName());
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
255 else
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
256 error("Can't create pass (%s)", pass->getPassName());
1172
b3887714b735 Small cleanup: remove mars.h #include
Frits van Bommel <fvbommel wxs.nl>
parents: 1171
diff changeset
257 assert(0); // Should be unreachable; root.h:error() calls exit()
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
258 }
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
259 }
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
260 // insert -O<N> / -enable-inlining if specified at the end,
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
261 if (optimize)
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
262 addPassesForOptLevel(pm);
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
263
1294
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
264 #ifdef USE_METADATA
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
265 if (!disableStripMetaData) {
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
266 // This one is purposely not disabled by disableLangSpecificPasses
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
267 // because the code generator will assert if it's not used.
1296
79b201533cf8 Add -verify-each option to ease debugging
Frits van Bommel <fvbommel wxs.nl>
parents: 1294
diff changeset
268 addPass(pm, createStripMetaData());
1294
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
269 }
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
270 #endif
dd84ec4353ce Strip metadata even when addPassesForOptLevel() isn't called, for instance when
Frits van Bommel <fvbommel wxs.nl>
parents: 1288
diff changeset
271
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 129
diff changeset
272 pm.run(*m);
1170
e40c65bd8c5d Allow specific optimization passes to be requested from the command line.
Frits van Bommel <fvbommel wxs.nl>
parents: 663
diff changeset
273 return true;
125
c42d245468ea [svn r129] Started AA literals.
lindquist
parents:
diff changeset
274 }