Add an optional optimization to FoldingSet to allow ID values to be

stored rather than recomputed on each bucket traversal.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75480 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-07-13 18:25:44 +00:00
parent d2559bf3f3
commit d6a2aab53e

View File

@ -438,6 +438,20 @@ public:
operator const T&() const { return data; }
};
//===----------------------------------------------------------------------===//
/// FastFoldingSetNode - This is a subclass of FoldingSetNode which stores
/// a FoldingSetNodeID value rather than requiring the node to recompute it
/// each time it is needed. This trades space for speed (which can be
/// significant if the ID is long), and it also permits nodes to drop
/// information that would otherwise only be required for recomputing an ID.
class FastFoldingSetNode : public FoldingSetNode {
FoldingSetNodeID FastID;
protected:
explicit FastFoldingSetNode(const FoldingSetNodeID &ID) : FastID(ID) {}
public:
void Profile(FoldingSetNodeID& ID) { ID = FastID; }
};
//===----------------------------------------------------------------------===//
// Partial specializations of FoldingSetTrait.