Mercurial > projects > ldc
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 |