DebugInfo: Move DILocation::getDiscriminator() to MDLocation

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234819 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-04-14 00:05:13 +00:00
parent dc4806ef72
commit 3c42b7f3b7
2 changed files with 13 additions and 17 deletions

View File

@ -701,23 +701,7 @@ public:
DILocation getOrigLocation() const { return get()->getInlinedAt(); }
StringRef getFilename() const { return get()->getFilename(); }
StringRef getDirectory() const { return get()->getDirectory(); }
/// \brief Get the DWAF discriminator.
///
/// DWARF discriminators are used to distinguish identical file locations for
/// instructions that are on different basic blocks. If two instructions are
/// inside the same lexical block and are in different basic blocks, we
/// create a new lexical block with identical location as the original but
/// with a different discriminator value
/// (lib/Transforms/Util/AddDiscriminators.cpp for details).
unsigned getDiscriminator() const {
// Since discriminators are associated with lexical blocks, make
// sure this location is a lexical block before retrieving its
// value.
if (auto *F = dyn_cast<MDLexicalBlockFile>(get()->getScope()))
return F->getDiscriminator();
return 0;
}
unsigned getDiscriminator() const { return get()->getDiscriminator(); }
/// \brief Generate a new discriminator value for this location.
unsigned computeNewDiscriminator(LLVMContext &Ctx);

View File

@ -1203,6 +1203,12 @@ public:
return getFilename() != RHS.getFilename() || getLine() != RHS.getLine();
}
/// \brief Get the DWARF discriminator.
///
/// DWARF discriminators distinguish identical file locations between
/// instructions that are on different basic blocks.
inline unsigned getDiscriminator() const;
Metadata *getRawScope() const { return getOperand(0); }
Metadata *getRawInlinedAt() const {
if (getNumOperands() == 2)
@ -1528,6 +1534,12 @@ public:
}
};
unsigned MDLocation::getDiscriminator() const {
if (auto *F = dyn_cast<MDLexicalBlockFile>(getScope()))
return F->getDiscriminator();
return 0;
}
class MDNamespace : public MDScope {
friend class LLVMContextImpl;
friend class MDNode;