From 3c42b7f3b7ae0258985e75806b55b27dc53c64e4 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 14 Apr 2015 00:05:13 +0000 Subject: [PATCH] DebugInfo: Move DILocation::getDiscriminator() to MDLocation git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234819 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/DebugInfo.h | 18 +----------------- include/llvm/IR/DebugInfoMetadata.h | 12 ++++++++++++ 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/include/llvm/IR/DebugInfo.h b/include/llvm/IR/DebugInfo.h index a683799cdb5..0d489bba3cb 100644 --- a/include/llvm/IR/DebugInfo.h +++ b/include/llvm/IR/DebugInfo.h @@ -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(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); diff --git a/include/llvm/IR/DebugInfoMetadata.h b/include/llvm/IR/DebugInfoMetadata.h index f7b092f4e6e..9cb1ac2b8ad 100644 --- a/include/llvm/IR/DebugInfoMetadata.h +++ b/include/llvm/IR/DebugInfoMetadata.h @@ -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(getScope())) + return F->getDiscriminator(); + return 0; +} + class MDNamespace : public MDScope { friend class LLVMContextImpl; friend class MDNode;