[llvm-commits] [llvm] r128988 - in /llvm/trunk: include/llvm/Support/DebugLoc.h lib/VMCore/DebugLoc.cpp

Chris Lattner clattner at apple.com
Tue Apr 5 23:35:53 PDT 2011


On Apr 5, 2011, at 10:36 PM, Nick Lewycky wrote:

> Author: nicholas
> Date: Wed Apr  6 00:36:52 2011
> New Revision: 128988
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=128988&view=rev
> Log:
> Support using DebugLoc's in a DenseMap.

One other issue: DebugLoc() is a valid DebugLoc, but given your formulation, you can't store one in the densemap.  It might be best to change the representation of the empty key to -2.

-Chris

> 
> Modified:
>    llvm/trunk/include/llvm/Support/DebugLoc.h
>    llvm/trunk/lib/VMCore/DebugLoc.cpp
> 
> Modified: llvm/trunk/include/llvm/Support/DebugLoc.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DebugLoc.h?rev=128988&r1=128987&r2=128988&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/DebugLoc.h (original)
> +++ llvm/trunk/include/llvm/Support/DebugLoc.h Wed Apr  6 00:36:52 2011
> @@ -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,16 @@
>   /// and MachineInstr to compactly encode file/line/scope information for an
>   /// operation.
>   class DebugLoc {
> +    friend struct DenseMapInfo<DebugLoc>;
> +
> +    /// getTombstoneKey() - A private constructor that returns an unknown that
> +    /// is distinguishable from the usual one.
> +    static DebugLoc getTombstoneKey() {
> +      DebugLoc DL;
> +      DL.LineCol = -1;
> +      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 +87,14 @@
>     }
>     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 */
> 
> Modified: llvm/trunk/lib/VMCore/DebugLoc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/DebugLoc.cpp?rev=128988&r1=128987&r2=128988&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/DebugLoc.cpp (original)
> +++ llvm/trunk/lib/VMCore/DebugLoc.cpp Wed Apr  6 00:36:52 2011
> @@ -8,6 +8,7 @@
> //===----------------------------------------------------------------------===//
> 
> #include "llvm/Support/DebugLoc.h"
> +#include "llvm/ADT/DenseMapInfo.h"
> #include "LLVMContextImpl.h"
> using namespace llvm;
> 
> @@ -128,6 +129,29 @@
> }
> 
> //===----------------------------------------------------------------------===//
> +// DenseMap specialization
> +//===----------------------------------------------------------------------===//
> +
> +DebugLoc DenseMapInfo<DebugLoc>::getEmptyKey() {
> +  return DebugLoc();
> +}
> +
> +DebugLoc DenseMapInfo<DebugLoc>::getTombstoneKey() {
> +  return DebugLoc::getTombstoneKey();
> +}
> +
> +unsigned DenseMapInfo<DebugLoc>::getHashValue(const DebugLoc &Key) {
> +  FoldingSetNodeID ID;
> +  ID.AddInteger(Key.LineCol);
> +  ID.AddInteger(Key.ScopeIdx);
> +  return ID.ComputeHash();
> +}
> +
> +bool DenseMapInfo<DebugLoc>::isEqual(const DebugLoc &LHS, const DebugLoc &RHS) {
> +  return LHS == RHS;
> +}
> +
> +//===----------------------------------------------------------------------===//
> // LLVMContextImpl Implementation
> //===----------------------------------------------------------------------===//
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list