comparison gen/toobj.cpp @ 244:a95056b3c996 trunk

[svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB. Did a lot of smaller cleans up here and there. Replaced more llvm::Foo with LLFoo for common stuff. Split up tollvm.cpp.
author lindquist
date Mon, 09 Jun 2008 09:37:08 +0200
parents 9760f54af0b7
children 56199753e637
comparison
equal deleted inserted replaced
243:4d006f7b2ada 244:a95056b3c996
33 #include "scope.h" 33 #include "scope.h"
34 34
35 #include "gen/irstate.h" 35 #include "gen/irstate.h"
36 #include "gen/logger.h" 36 #include "gen/logger.h"
37 #include "gen/tollvm.h" 37 #include "gen/tollvm.h"
38 #include "gen/llvmhelpers.h"
38 #include "gen/arrays.h" 39 #include "gen/arrays.h"
39 #include "gen/structs.h" 40 #include "gen/structs.h"
40 #include "gen/classes.h" 41 #include "gen/classes.h"
41 #include "gen/functions.h" 42 #include "gen/functions.h"
42 #include "gen/todebug.h" 43 #include "gen/todebug.h"
201 std::string name("_D"); 202 std::string name("_D");
202 name.append(gIR->dmodule->mangle()); 203 name.append(gIR->dmodule->mangle());
203 name.append("6__ctorZ"); 204 name.append("6__ctorZ");
204 205
205 std::vector<const LLType*> argsTy; 206 std::vector<const LLType*> argsTy;
206 const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); 207 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false);
207 assert(gIR->module->getFunction(name) == NULL); 208 assert(gIR->module->getFunction(name) == NULL);
208 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); 209 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module);
209 fn->setCallingConv(llvm::CallingConv::Fast); 210 fn->setCallingConv(llvm::CallingConv::Fast);
210 211
211 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); 212 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn);
235 std::string name("_D"); 236 std::string name("_D");
236 name.append(gIR->dmodule->mangle()); 237 name.append(gIR->dmodule->mangle());
237 name.append("6__dtorZ"); 238 name.append("6__dtorZ");
238 239
239 std::vector<const LLType*> argsTy; 240 std::vector<const LLType*> argsTy;
240 const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); 241 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false);
241 assert(gIR->module->getFunction(name) == NULL); 242 assert(gIR->module->getFunction(name) == NULL);
242 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); 243 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module);
243 fn->setCallingConv(llvm::CallingConv::Fast); 244 fn->setCallingConv(llvm::CallingConv::Fast);
244 245
245 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); 246 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn);
269 std::string name("_D"); 270 std::string name("_D");
270 name.append(gIR->dmodule->mangle()); 271 name.append(gIR->dmodule->mangle());
271 name.append("10__unittestZ"); 272 name.append("10__unittestZ");
272 273
273 std::vector<const LLType*> argsTy; 274 std::vector<const LLType*> argsTy;
274 const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); 275 const llvm::FunctionType* fnTy = llvm::FunctionType::get(LLType::VoidTy,argsTy,false);
275 assert(gIR->module->getFunction(name) == NULL); 276 assert(gIR->module->getFunction(name) == NULL);
276 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); 277 llvm::Function* fn = llvm::Function::Create(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module);
277 fn->setCallingConv(llvm::CallingConv::Fast); 278 fn->setCallingConv(llvm::CallingConv::Fast);
278 279
279 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn); 280 llvm::BasicBlock* bb = llvm::BasicBlock::Create("entry", fn);
323 // vtable 324 // vtable
324 c = moduleinfo->ir.irStruct->vtbl; 325 c = moduleinfo->ir.irStruct->vtbl;
325 initVec.push_back(c); 326 initVec.push_back(c);
326 327
327 // monitor 328 // monitor
328 c = getNullPtr(getPtrToType(llvm::Type::Int8Ty)); 329 c = getNullPtr(getPtrToType(LLType::Int8Ty));
329 initVec.push_back(c); 330 initVec.push_back(c);
330 331
331 // name 332 // name
332 char *name = toPrettyChars(); 333 char *name = toPrettyChars();
333 c = DtoConstString(name); 334 c = DtoConstString(name);
461 llvm::GlobalVariable* gvar = gIR->module->getGlobalVariable(MIname); 462 llvm::GlobalVariable* gvar = gIR->module->getGlobalVariable(MIname);
462 if (!gvar) gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, NULL, MIname, gIR->module); 463 if (!gvar) gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, NULL, MIname, gIR->module);
463 gvar->setInitializer(constMI); 464 gvar->setInitializer(constMI);
464 465
465 // declare the appending array 466 // declare the appending array
466 const llvm::ArrayType* appendArrTy = llvm::ArrayType::get(getPtrToType(llvm::Type::Int8Ty), 1); 467 const llvm::ArrayType* appendArrTy = llvm::ArrayType::get(getPtrToType(LLType::Int8Ty), 1);
467 std::vector<LLConstant*> appendInits; 468 std::vector<LLConstant*> appendInits;
468 appendInits.push_back(llvm::ConstantExpr::getBitCast(gvar, getPtrToType(llvm::Type::Int8Ty))); 469 appendInits.push_back(llvm::ConstantExpr::getBitCast(gvar, getPtrToType(LLType::Int8Ty)));
469 LLConstant* appendInit = llvm::ConstantArray::get(appendArrTy, appendInits); 470 LLConstant* appendInit = llvm::ConstantArray::get(appendArrTy, appendInits);
470 std::string appendName("_d_moduleinfo_array"); 471 std::string appendName("_d_moduleinfo_array");
471 llvm::GlobalVariable* appendVar = new llvm::GlobalVariable(appendArrTy, true, llvm::GlobalValue::AppendingLinkage, appendInit, appendName, gIR->module); 472 llvm::GlobalVariable* appendVar = new llvm::GlobalVariable(appendArrTy, true, llvm::GlobalValue::AppendingLinkage, appendInit, appendName, gIR->module);
472 } 473 }
473 474