mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 05:00:26 +00:00
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:
parent
f0100ff3f6
commit
a41b9153c3
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user