Mercurial > projects > ldc
comparison gen/toobj.cpp @ 125:c42d245468ea trunk
[svn r129] Started AA literals.
Fixed #15, passing -O will now invoke the optimizer before writing bitcode.
author | lindquist |
---|---|
date | Wed, 28 Nov 2007 04:52:35 +0100 |
parents | 9c79b61fb638 |
children | 8096ba7082db |
comparison
equal
deleted
inserted
replaced
124:a939ec89fc72 | 125:c42d245468ea |
---|---|
41 #include "gen/todebug.h" | 41 #include "gen/todebug.h" |
42 #include "gen/runtime.h" | 42 #include "gen/runtime.h" |
43 | 43 |
44 ////////////////////////////////////////////////////////////////////////////////////////// | 44 ////////////////////////////////////////////////////////////////////////////////////////// |
45 | 45 |
46 void | 46 // in gen/optimize.cpp |
47 Module::genobjfile() | 47 void llvmdc_optimize_module(llvm::Module* m, char lvl, bool doinline); |
48 | |
49 ////////////////////////////////////////////////////////////////////////////////////////// | |
50 | |
51 void Module::genobjfile() | |
48 { | 52 { |
49 Logger::cout() << "Generating module: " << (md ? md->toChars() : toChars()) << '\n'; | 53 Logger::cout() << "Generating module: " << (md ? md->toChars() : toChars()) << '\n'; |
50 LOG_SCOPE; | 54 LOG_SCOPE; |
51 | 55 |
52 // start by deleting the old object file | 56 // start by deleting the old object file |
109 DtoEmptyAllLists(); | 113 DtoEmptyAllLists(); |
110 // generate ModuleInfo | 114 // generate ModuleInfo |
111 genmoduleinfo(); | 115 genmoduleinfo(); |
112 // do this again as moduleinfo might have pulled something in! | 116 // do this again as moduleinfo might have pulled something in! |
113 DtoEmptyAllLists(); | 117 DtoEmptyAllLists(); |
114 | |
115 gTargetData = 0; | |
116 | 118 |
117 // emit the llvm main function if necessary | 119 // emit the llvm main function if necessary |
118 if (ir.emitMain) { | 120 if (ir.emitMain) { |
119 DtoMain(); | 121 DtoMain(); |
120 } | 122 } |
132 else { | 134 else { |
133 Logger::println("Verification passed!"); | 135 Logger::println("Verification passed!"); |
134 } | 136 } |
135 } | 137 } |
136 | 138 |
137 // run passes | 139 // run optimizer |
138 // TODO | 140 if (global.params.optimize) { |
141 llvmdc_optimize_module(ir.module, global.params.optimizeLevel, global.params.useInline); | |
142 } | |
139 | 143 |
140 // write bytecode | 144 // write bytecode |
141 { | 145 { |
142 Logger::println("Writing LLVM bitcode\n"); | 146 Logger::println("Writing LLVM bitcode\n"); |
143 std::ofstream bos(bcfile->name->toChars(), std::ios::binary); | 147 std::ofstream bos(bcfile->name->toChars(), std::ios::binary); |
150 std::ofstream aos(llfile->name->toChars()); | 154 std::ofstream aos(llfile->name->toChars()); |
151 ir.module->print(aos); | 155 ir.module->print(aos); |
152 } | 156 } |
153 | 157 |
154 delete ir.module; | 158 delete ir.module; |
159 gTargetData = 0; | |
155 gIR = NULL; | 160 gIR = NULL; |
156 } | 161 } |
157 | 162 |
158 /* ================================================================== */ | 163 /* ================================================================== */ |
159 | 164 |