X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FDebugLoc.h;h=049807570711442dbb3ecb97f180f255143108a4;hb=55907d1274ce715b92d584e305e0708e333a33c0;hp=df4b961140f784e380070a48d3a33c88bbe68057;hpb=84e679beea11ac55ed7871eec4deaccdf393de3e;p=oota-llvm.git diff --git a/include/llvm/Support/DebugLoc.h b/include/llvm/Support/DebugLoc.h index df4b961140f..04980757071 100644 --- a/include/llvm/Support/DebugLoc.h +++ b/include/llvm/Support/DebugLoc.h @@ -16,6 +16,7 @@ #define LLVM_SUPPORT_DEBUGLOC_H namespace llvm { + template struct DenseMapInfo; class MDNode; class LLVMContext; @@ -23,6 +24,24 @@ namespace llvm { /// and MachineInstr to compactly encode file/line/scope information for an /// operation. 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. @@ -41,7 +60,10 @@ namespace llvm { /// 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; } @@ -74,9 +96,17 @@ namespace llvm { return LineCol == DL.LineCol && ScopeIdx == DL.ScopeIdx; } bool operator!=(const DebugLoc &DL) const { return !(*this == DL); } + + void dump(const LLVMContext &Ctx) const; + }; + + 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; } }; - - typedef DebugLoc NewDebugLoc; } // end namespace llvm #endif /* LLVM_DEBUGLOC_H */