DebugInfo: Rewrite atSameLineAs() as MDLocation::canDiscriminate()

Rewrite `DILocation::atSameLineAs()` as `MDLocation::canDiscriminate()`
with a doxygen comment explaining its purpose.  I've added a few FIXMEs
where I think this check is too weak; fixing that is tracked by PR23199.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234674 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-04-11 01:00:47 +00:00
parent 43aeb128e1
commit 2c64a1129f
3 changed files with 19 additions and 5 deletions

View File

@ -810,10 +810,7 @@ public:
}
StringRef getFilename() const { return get()->getFilename(); }
StringRef getDirectory() const { return get()->getDirectory(); }
bool atSameLineAs(const DILocation &Other) const {
return (getLineNumber() == Other.getLineNumber() &&
getFilename() == Other.getFilename());
}
/// \brief Get the DWAF discriminator.
///
/// DWARF discriminators are used to distinguish identical file locations for

View File

@ -1166,6 +1166,23 @@ public:
return getScope();
}
/// \brief Check whether this can be discriminated from another location.
///
/// Check \c this can be discriminated from \c RHS in a linetable entry.
/// Scope and inlined-at chains are not recorded in the linetable, so they
/// cannot be used to distinguish basic blocks.
///
/// The current implementation is weaker than it should be, since it just
/// checks filename and line.
///
/// FIXME: Add a check for getDiscriminator().
/// FIXME: Add a check for getColumn().
/// FIXME: Change the getFilename() check to getFile() (or add one for
/// getDirectory()).
bool canDiscriminate(const MDLocation &RHS) const {
return getFilename() != RHS.getFilename() || getLine() != RHS.getLine();
}
Metadata *getRawScope() const { return getOperand(0); }
Metadata *getRawInlinedAt() const {
if (getNumOperands() == 2)

View File

@ -189,7 +189,7 @@ bool AddDiscriminators::runOnFunction(Function &F) {
// location as B's last instruction (Last), add a new
// discriminator for First's location and all the instructions
// in Succ that share the same location with First.
if (FirstDIL.atSameLineAs(LastDIL)) {
if (!FirstDIL->canDiscriminate(*LastDIL)) {
// Create a new lexical scope and compute a new discriminator
// number for it.
StringRef Filename = FirstDIL.getFilename();