diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-25 20:58:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-25 20:58:50 +0000 |
commit | e27c3ea2bcdabf1b8be87675c66a38c3ad0ac1f9 (patch) | |
tree | a021feee80ef1ac2d49661ea69ee838a4da985f3 | |
parent | ed0318eab83cac5250353d8b70bca684ce247d70 (diff) |
allow adding a FoldingSetNodeID to a FastFoldingSetNode, resolving PR9499,
patch by Johannes Schaub!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130151 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/FoldingSet.h | 7 | ||||
-rw-r--r-- | lib/Support/FoldingSet.cpp | 5 |
2 files changed, 10 insertions, 2 deletions
diff --git a/include/llvm/ADT/FoldingSet.h b/include/llvm/ADT/FoldingSet.h index 879dbd05e1..aaa48aca90 100644 --- a/include/llvm/ADT/FoldingSet.h +++ b/include/llvm/ADT/FoldingSet.h @@ -310,6 +310,7 @@ public: void AddInteger(unsigned long long I); void AddBoolean(bool B) { AddInteger(B ? 1U : 0U); } void AddString(StringRef String); + void AddNodeID(const FoldingSetNodeID &ID); template <typename T> inline void Add(const T& x) { FoldingSetTrait<T>::Profile(x, *this); } @@ -641,7 +642,7 @@ public: : data(a1,a2,a3,a4,a5) {} - void Profile(FoldingSetNodeID& ID) { FoldingSetTrait<T>::Profile(data, ID); } + void Profile(FoldingSetNodeID &ID) { FoldingSetTrait<T>::Profile(data, ID); } T& getValue() { return data; } const T& getValue() const { return data; } @@ -661,7 +662,9 @@ class FastFoldingSetNode : public FoldingSetNode { protected: explicit FastFoldingSetNode(const FoldingSetNodeID &ID) : FastID(ID) {} public: - void Profile(FoldingSetNodeID& ID) const { ID = FastID; } + void Profile(FoldingSetNodeID& ID) const { + ID.AddNodeID(FastID); + } }; //===----------------------------------------------------------------------===// diff --git a/lib/Support/FoldingSet.cpp b/lib/Support/FoldingSet.cpp index a4f80a90d6..d2e35b8eb6 100644 --- a/lib/Support/FoldingSet.cpp +++ b/lib/Support/FoldingSet.cpp @@ -147,6 +147,11 @@ void FoldingSetNodeID::AddString(StringRef String) { Bits.push_back(V); } +// AddNodeID - Adds the Bit data of another ID to *this. +void FoldingSetNodeID::AddNodeID(const FoldingSetNodeID &ID) { + Bits.append(ID.Bits.begin(), ID.Bits.end()); +} + /// ComputeHash - Compute a strong hash value for this FoldingSetNodeID, used to /// lookup the node in the FoldingSetImpl. unsigned FoldingSetNodeID::ComputeHash() const { |