diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 22:27:36 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 22:27:36 +0000 |
commit | 9885469922266d43622af58871253fadfef42d48 (patch) | |
tree | fc06d29b0e8d1b751e25e109086ba0fcfc1ef842 /llvm/lib/IR/DebugInfo.cpp | |
parent | 96a319588a752c0254f8b214c2454a95855bcac4 (diff) | |
download | bcm5719-llvm-9885469922266d43622af58871253fadfef42d48.tar.gz bcm5719-llvm-9885469922266d43622af58871253fadfef42d48.zip |
IR: Move MDLocation into place
This commit moves `MDLocation`, finishing off PR21433. There's an
accompanying clang commit for frontend testcases. I'll attach the
testcase upgrade script I used to PR21433 to help out-of-tree
frontends/backends.
This changes the schema for `DebugLoc` and `DILocation` from:
!{i32 3, i32 7, !7, !8}
to:
!MDLocation(line: 3, column: 7, scope: !7, inlinedAt: !8)
Note that empty fields (line/column: 0 and inlinedAt: null) don't get
printed by the assembly writer.
llvm-svn: 226048
Diffstat (limited to 'llvm/lib/IR/DebugInfo.cpp')
-rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 330d5e1d7e6..290dbe29c70 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -592,10 +592,7 @@ bool DIExpression::Verify() const { } bool DILocation::Verify() const { - if (!DbgNode) - return false; - - return DbgNode->getNumOperands() == 4; + return DbgNode && isa<MDLocation>(DbgNode); } bool DINameSpace::Verify() const { @@ -830,16 +827,12 @@ void DICompileUnit::replaceGlobalVariables(DIArray GlobalVariables) { DILocation DILocation::copyWithNewScope(LLVMContext &Ctx, DILexicalBlockFile NewScope) { - SmallVector<Metadata *, 10> Elts; assert(Verify()); - for (unsigned I = 0; I < DbgNode->getNumOperands(); ++I) { - if (I != 2) - Elts.push_back(DbgNode->getOperand(I)); - else - Elts.push_back(NewScope); - } - MDNode *NewDIL = MDNode::get(Ctx, Elts); - return DILocation(NewDIL); + assert(NewScope && "Expected valid scope"); + + const auto *Old = cast<MDLocation>(DbgNode); + return DILocation(MDLocation::get(Ctx, Old->getLine(), Old->getColumn(), + NewScope, Old->getInlinedAt())); } unsigned DILocation::computeNewDiscriminator(LLVMContext &Ctx) { |