diff options
Diffstat (limited to 'include/llvm/Support/DebugLoc.h')
| -rw-r--r-- | include/llvm/Support/DebugLoc.h | 28 | 
1 files changed, 28 insertions, 0 deletions
diff --git a/include/llvm/Support/DebugLoc.h b/include/llvm/Support/DebugLoc.h index ccc344612913d..98a05a45a76d6 100644 --- a/include/llvm/Support/DebugLoc.h +++ b/include/llvm/Support/DebugLoc.h @@ -15,6 +15,8 @@  #ifndef LLVM_SUPPORT_DEBUGLOC_H  #define LLVM_SUPPORT_DEBUGLOC_H +#include "llvm/ADT/DenseMapInfo.h" +  namespace llvm {    class MDNode;    class LLVMContext; @@ -23,6 +25,24 @@ namespace llvm {    /// and MachineInstr to compactly encode file/line/scope information for an    /// operation.    class DebugLoc { +    friend struct DenseMapInfo<DebugLoc>; + +    /// 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. @@ -75,6 +95,14 @@ namespace llvm {      }      bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }    }; + +  template <> +  struct DenseMapInfo<DebugLoc> { +    static DebugLoc getEmptyKey(); +    static DebugLoc getTombstoneKey(); +    static unsigned getHashValue(const DebugLoc &Key); +    static bool isEqual(const DebugLoc &LHS, const DebugLoc &RHS); +  };  } // end namespace llvm  #endif /* LLVM_DEBUGLOC_H */  | 
