Mercurial > projects > ldc
diff gen/todebug.cpp @ 94:61615fa85940 trunk
[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
Added support for array .sort and .reverse properties.
Fixed some bugs with pointer arithmetic.
Disabled some DMD AST optimizations that was messing things up, destroying valuable information.
Added a KDevelop project file, this is what I use for coding LLVMDC now :)
Other minor stuff.
author | lindquist |
---|---|
date | Mon, 12 Nov 2007 06:32:46 +0100 |
parents | fd32135dca3e |
children | ce7ed8f59b99 |
line wrap: on
line diff
--- a/gen/todebug.cpp Thu Nov 08 19:21:05 2007 +0100 +++ b/gen/todebug.cpp Mon Nov 12 06:32:46 2007 +0100 @@ -56,7 +56,7 @@ */ if (!gIR->module->getNamedGlobal("llvm.dbg.compile_units")) { std::vector<llvm::Constant*> vals; - vals.push_back(DtoConstUint(0)); + vals.push_back(DtoConstUint(llvm::LLVMDebugVersion)); vals.push_back(DtoConstUint(DW_TAG_compile_unit)); llvm::Constant* i = llvm::ConstantStruct::get(t, vals); dbg_compile_units = new llvm::GlobalVariable(t,true,llvm::GlobalValue::LinkOnceLinkage,i,"llvm.dbg.compile_units",gIR->module); @@ -64,7 +64,7 @@ } if (!gIR->module->getNamedGlobal("llvm.dbg.global_variables")) { std::vector<llvm::Constant*> vals; - vals.push_back(DtoConstUint(0)); + vals.push_back(DtoConstUint(llvm::LLVMDebugVersion)); vals.push_back(DtoConstUint(DW_TAG_variable)); llvm::Constant* i = llvm::ConstantStruct::get(t, vals); dbg_global_variables = new llvm::GlobalVariable(t,true,llvm::GlobalValue::LinkOnceLinkage,i,"llvm.dbg.global_variables",gIR->module); @@ -72,7 +72,7 @@ } if (!gIR->module->getNamedGlobal("llvm.dbg.subprograms")) { std::vector<llvm::Constant*> vals; - vals.push_back(DtoConstUint(0)); + vals.push_back(DtoConstUint(llvm::LLVMDebugVersion)); vals.push_back(DtoConstUint(DW_TAG_subprogram)); llvm::Constant* i = llvm::ConstantStruct::get(t, vals); dbg_subprograms = new llvm::GlobalVariable(t,true,llvm::GlobalValue::LinkOnceLinkage,i,"llvm.dbg.subprograms",gIR->module); @@ -110,30 +110,33 @@ ////////////////////////////////////////////////////////////////////////////////////////////////// -llvm::GlobalVariable* DtoDwarfCompileUnit(Module* m) +llvm::GlobalVariable* DtoDwarfCompileUnit(Module* m, bool define) { - std::vector<llvm::Constant*> vals; - vals.push_back(llvm::ConstantExpr::getAdd( - DtoConstUint(DW_TAG_compile_unit), - DtoConstUint(llvm::LLVMDebugVersion))); - vals.push_back(dbgToArrTy(GetDwarfAnchor(DW_TAG_compile_unit))); + llvm::Constant* c = NULL; + if (1 || define) { + std::vector<llvm::Constant*> vals; + vals.push_back(llvm::ConstantExpr::getAdd( + DtoConstUint(DW_TAG_compile_unit), + DtoConstUint(llvm::LLVMDebugVersion))); + vals.push_back(dbgToArrTy(GetDwarfAnchor(DW_TAG_compile_unit))); - vals.push_back(DtoConstUint(DW_LANG_D)); - vals.push_back(DtoConstStringPtr(m->srcfile->name->toChars(), "llvm.metadata")); - std::string srcpath(FileName::path(m->srcfile->name->toChars())); - srcpath.append("/"); - vals.push_back(DtoConstStringPtr(srcpath.c_str(), "llvm.metadata")); - vals.push_back(DtoConstStringPtr("LLVMDC (http://www.dsource.org/projects/llvmdc)", "llvm.metadata")); + vals.push_back(DtoConstUint(DW_LANG_D)); + vals.push_back(DtoConstStringPtr(m->srcfile->name->toChars(), "llvm.metadata")); + std::string srcpath(FileName::path(m->srcfile->name->toChars())); + srcpath.append("/"); + vals.push_back(DtoConstStringPtr(srcpath.c_str(), "llvm.metadata")); + vals.push_back(DtoConstStringPtr("LLVMDC (http://www.dsource.org/projects/llvmdc)", "llvm.metadata")); - llvm::Constant* c = llvm::ConstantStruct::get(GetDwarfCompileUnitType(), vals); - llvm::GlobalVariable* gv = new llvm::GlobalVariable(c->getType(), true, llvm::GlobalValue::InternalLinkage, c, "llvm.dbg.compile_unit", gIR->module); + c = llvm::ConstantStruct::get(GetDwarfCompileUnitType(), vals); + } + llvm::GlobalVariable* gv = new llvm::GlobalVariable(GetDwarfCompileUnitType(), true, llvm::GlobalValue::InternalLinkage, c, "llvm.dbg.compile_unit", gIR->module); gv->setSection("llvm.metadata"); return gv; } ////////////////////////////////////////////////////////////////////////////////////////////////// -llvm::GlobalVariable* DtoDwarfSubProgram(FuncDeclaration* fd) +llvm::GlobalVariable* DtoDwarfSubProgram(FuncDeclaration* fd, llvm::GlobalVariable* compileUnit) { std::vector<llvm::Constant*> vals; vals.push_back(llvm::ConstantExpr::getAdd( @@ -141,11 +144,11 @@ DtoConstUint(llvm::LLVMDebugVersion))); vals.push_back(dbgToArrTy(GetDwarfAnchor(DW_TAG_subprogram))); - vals.push_back(dbgToArrTy(gIR->dwarfCompileUnit)); + vals.push_back(dbgToArrTy(compileUnit)); vals.push_back(DtoConstStringPtr(fd->toPrettyChars(), "llvm.metadata")); + vals.push_back(vals.back()); vals.push_back(DtoConstStringPtr(fd->mangle(), "llvm.metadata")); - vals.push_back(llvm::ConstantPointerNull::get(llvm::PointerType::get(llvm::Type::Int8Ty))); - vals.push_back(dbgToArrTy(gIR->dwarfCompileUnit)); + vals.push_back(dbgToArrTy(compileUnit)); vals.push_back(DtoConstUint(fd->loc.linnum)); vals.push_back(llvm::ConstantPointerNull::get(dbgArrTy())); vals.push_back(DtoConstBool(fd->protection == PROTprivate)); @@ -178,6 +181,7 @@ std::vector<llvm::Value*> args; args.push_back(DtoConstUint(ln)); args.push_back(DtoConstUint(0)); - args.push_back(dbgToArrTy(gIR->dwarfCompileUnit)); + assert(gIR->dmodule->llvmCompileUnit); + args.push_back(dbgToArrTy(gIR->dmodule->llvmCompileUnit)); gIR->ir->CreateCall(gIR->module->getFunction("llvm.dbg.stoppoint"), args.begin(), args.end()); }