SelectionDAG: Stop using DIVariable::isInlinedFnArgument()

Instead of calling the somewhat confusingly-named
`DIVariable::isInlinedFnArgument()`, do the check directly here.
There's possibly a small functionality change here: instead of
`dyn_cast<>`'ing `DV->getScope()` to `MDSubprogram`, I'm looking up the
scope chain for the actual subprogram.  I suspect that this is a no-op
for function arguments so in practise there isn't a real difference.

I've also added a `FIXME` to check the `inlinedAt:` chain instead, since
I wonder if that would be more reliable than the
`MDSubprogram::describes()` function.

Since this was the only user of `DIVariable::isInlinedFnArgument()`,
delete it.

llvm-svn: 234799
This commit is contained in:
Duncan P. N. Exon Smith 2015-04-13 21:38:48 +00:00
parent 168ddf4dc1
commit 745a5db444
3 changed files with 3 additions and 14 deletions

View File

@ -724,9 +724,6 @@ public:
return (getType().resolve(Map)).isBlockByrefStruct();
}
/// \brief Check if this is an inlined function argument.
bool isInlinedFnArgument(const Function *CurFn);
void printExtendedName(raw_ostream &OS) const;
};

View File

@ -4461,8 +4461,10 @@ bool SelectionDAGBuilder::EmitFuncArgumentDbgValue(
const TargetInstrInfo *TII = DAG.getSubtarget().getInstrInfo();
// Ignore inlined function arguments here.
//
// FIXME: Should we be checking DL->inlinedAt() to determine this?
DIVariable DV(Variable);
if (DV.isInlinedFnArgument(MF.getFunction()))
if (!DV->getScope()->getSubprogram()->describes(MF.getFunction()))
return false;
Optional<MachineOperand> Op;

View File

@ -39,16 +39,6 @@ using namespace llvm::dwarf;
DIScopeRef DIScope::getRef() const { return MDScopeRef::get(get()); }
bool DIVariable::isInlinedFnArgument(const Function *CurFn) {
assert(CurFn && "Invalid function");
DISubprogram SP = dyn_cast<MDSubprogram>(getContext());
if (!SP)
return false;
// This variable is not inlined function argument if its scope
// does not describe current function.
return !SP.describes(CurFn);
}
void DICompileUnit::replaceSubprograms(DIArray Subprograms) {
get()->replaceSubprograms(MDSubprogramArray(Subprograms));
}