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