[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