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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226048 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2015-01-14 22:27:36 +00:00
parent de8202b084
commit 37ac8d3622
299 changed files with 1587 additions and 1580 deletions

View File

@ -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) {