X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FDebugLoc.h;h=049807570711442dbb3ecb97f180f255143108a4;hb=55907d1274ce715b92d584e305e0708e333a33c0;hp=2da632c342bf8e4baf71cb004e8a4ee0dfecac3f;hpb=de4845c163a5847c82d7ce10ed0c320098bce6e0;p=oota-llvm.git diff --git a/include/llvm/Support/DebugLoc.h b/include/llvm/Support/DebugLoc.h index 2da632c342b..04980757071 100644 --- a/include/llvm/Support/DebugLoc.h +++ b/include/llvm/Support/DebugLoc.h @@ -12,20 +12,36 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_DEBUGLOC_H -#define LLVM_DEBUGLOC_H - -#include "llvm/ADT/DenseMap.h" -#include +#ifndef LLVM_SUPPORT_DEBUGLOC_H +#define LLVM_SUPPORT_DEBUGLOC_H namespace llvm { + template struct DenseMapInfo; class MDNode; class LLVMContext; /// DebugLoc - Debug location id. This is carried by Instruction, SDNode, /// and MachineInstr to compactly encode file/line/scope information for an /// operation. - class NewDebugLoc { + class DebugLoc { + friend struct DenseMapInfo; + + /// getEmptyKey() - A private constructor that returns an unknown that is + /// not equal to the tombstone key or DebugLoc(). + static DebugLoc getEmptyKey() { + DebugLoc DL; + DL.LineCol = 1; + return DL; + } + + /// getTombstoneKey() - A private constructor that returns an unknown that + /// is not equal to the empty key or DebugLoc(). + static DebugLoc getTombstoneKey() { + DebugLoc DL; + DL.LineCol = 2; + return DL; + } + /// LineCol - This 32-bit value encodes the line and column number for the /// location, encoded as 24-bits for line and 8 bits for col. A value of 0 /// for either means unknown. @@ -35,16 +51,19 @@ namespace llvm { /// decoded by LLVMContext. 0 is unknown. int ScopeIdx; public: - NewDebugLoc() : LineCol(0), ScopeIdx(0) {} // Defaults to unknown. + DebugLoc() : LineCol(0), ScopeIdx(0) {} // Defaults to unknown. /// get - Get a new DebugLoc that corresponds to the specified line/col /// scope/inline location. - static NewDebugLoc get(unsigned Line, unsigned Col, - MDNode *Scope, MDNode *InlinedAt = 0); - - /// getFromDILocation - Translate the DILocation quad into a NewDebugLoc. - static NewDebugLoc getFromDILocation(MDNode *N); + static DebugLoc get(unsigned Line, unsigned Col, + MDNode *Scope, MDNode *InlinedAt = 0); + /// getFromDILocation - Translate the DILocation quad into a DebugLoc. + static DebugLoc getFromDILocation(MDNode *N); + + /// getFromDILexicalBlock - Translate the DILexicalBlock into a DebugLoc. + static DebugLoc getFromDILexicalBlock(MDNode *N); + /// isUnknown - Return true if this is an unknown location. bool isUnknown() const { return ScopeIdx == 0; } @@ -73,20 +92,21 @@ namespace llvm { /// DILocation compatible MDNode. MDNode *getAsMDNode(const LLVMContext &Ctx) const; - bool operator==(const NewDebugLoc &DL) const { + bool operator==(const DebugLoc &DL) const { return LineCol == DL.LineCol && ScopeIdx == DL.ScopeIdx; } - bool operator!=(const NewDebugLoc &DL) const { return !(*this == DL); } - - - - - static NewDebugLoc getUnknownLoc() { NewDebugLoc L; return L; } + bool operator!=(const DebugLoc &DL) const { return !(*this == DL); } + + void dump(const LLVMContext &Ctx) const; }; - - - typedef NewDebugLoc DebugLoc; + template <> + struct DenseMapInfo { + static DebugLoc getEmptyKey() { return DebugLoc::getEmptyKey(); } + static DebugLoc getTombstoneKey() { return DebugLoc::getTombstoneKey(); } + static unsigned getHashValue(const DebugLoc &Key); + static bool isEqual(DebugLoc LHS, DebugLoc RHS) { return LHS == RHS; } + }; } // end namespace llvm #endif /* LLVM_DEBUGLOC_H */