switch IRBuilder to use NewDebugLoc for locations instead

of raw mdnodes.  This allows frontends to specify debug
locations without ever creating an MDNode for the DILocation.

This requires a corresponding clang/llvm-gcc change which
I'll try to commit as simultaneously as possible.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100095 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-04-01 06:31:45 +00:00
parent f0100ff3f6
commit a41b9153c3
2 changed files with 13 additions and 10 deletions

View File

@ -40,7 +40,7 @@ protected:
/// IRBuilderBase - Common base class shared among various IRBuilders.
class IRBuilderBase {
MDNode *CurDbgLocation;
NewDebugLoc CurDbgLocation;
protected:
BasicBlock *BB;
BasicBlock::iterator InsertPt;
@ -48,7 +48,7 @@ protected:
public:
IRBuilderBase(LLVMContext &context)
: CurDbgLocation(0), Context(context) {
: Context(context) {
ClearInsertionPoint();
}
@ -64,6 +64,7 @@ public:
BasicBlock *GetInsertBlock() const { return BB; }
BasicBlock::iterator GetInsertPoint() const { return InsertPt; }
LLVMContext &getContext() const { return Context; }
/// SetInsertPoint - This specifies that created instructions should be
/// appended to the end of the specified block.
@ -81,19 +82,19 @@ public:
/// SetCurrentDebugLocation - Set location information used by debugging
/// information.
void SetCurrentDebugLocation(MDNode *L) {
void SetCurrentDebugLocation(const NewDebugLoc &L) {
CurDbgLocation = L;
}
/// getCurrentDebugLocation - Get location information used by debugging
/// information.
MDNode *getCurrentDebugLocation() const { return CurDbgLocation; }
const NewDebugLoc &getCurrentDebugLocation() const { return CurDbgLocation; }
/// SetInstDebugLocation - If this builder has a current debug location, set
/// it on the specified instruction.
void SetInstDebugLocation(Instruction *I) const {
if (CurDbgLocation)
I->setDbgMetadata(CurDbgLocation);
if (!CurDbgLocation.isUnknown())
I->setDebugLoc(CurDbgLocation);
}
//===--------------------------------------------------------------------===//
@ -215,7 +216,7 @@ public:
template<typename InstTy>
InstTy *Insert(InstTy *I, const Twine &Name = "") const {
this->InsertHelper(I, Name, BB, InsertPt);
if (getCurrentDebugLocation() != 0)
if (!getCurrentDebugLocation().isUnknown())
this->SetInstDebugLocation(I);
return I;
}

View File

@ -1651,7 +1651,7 @@ LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) {
}
void LLVMClearInsertionPosition(LLVMBuilderRef Builder) {
unwrap(Builder)->ClearInsertionPoint ();
unwrap(Builder)->ClearInsertionPoint();
}
void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) {
@ -1670,11 +1670,13 @@ void LLVMDisposeBuilder(LLVMBuilderRef Builder) {
/*--.. Metadata builders ...................................................--*/
void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L) {
unwrap(Builder)->SetCurrentDebugLocation(L? unwrap<MDNode>(L) : NULL);
MDNode *Loc = L ? unwrap<MDNode>(L) : NULL;
unwrap(Builder)->SetCurrentDebugLocation(NewDebugLoc::getFromDILocation(Loc));
}
LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder) {
return wrap(unwrap(Builder)->getCurrentDebugLocation());
return wrap(unwrap(Builder)->getCurrentDebugLocation()
.getAsMDNode(unwrap(Builder)->getContext()));
}
void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst) {