diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-01-24 01:01:34 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-01-24 01:01:34 +0000 |
commit | bb08593980b16fbd9758da6ca4fa9c7964f2f926 (patch) | |
tree | 52b8aa4ab63629aca27459b55d99fb9dc293096f /lib/IR | |
parent | 8b1f2f3b7007e1e086c0e20ad4fdea72222c4baf (diff) | |
download | external_llvm-bb08593980b16fbd9758da6ca4fa9c7964f2f926.zip external_llvm-bb08593980b16fbd9758da6ca4fa9c7964f2f926.tar.gz external_llvm-bb08593980b16fbd9758da6ca4fa9c7964f2f926.tar.bz2 |
Add a profile for uniquifying the AttributeSet with the AttributeSetNodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173313 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR')
-rw-r--r-- | lib/IR/AttributeImpl.h | 15 | ||||
-rw-r--r-- | lib/IR/Attributes.cpp | 5 |
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/IR/AttributeImpl.h b/lib/IR/AttributeImpl.h index b02cc8b..b35e5e0 100644 --- a/lib/IR/AttributeImpl.h +++ b/lib/IR/AttributeImpl.h @@ -107,12 +107,17 @@ class AttributeSetImpl : public FoldingSetNode { LLVMContext &Context; SmallVector<AttributeWithIndex, 4> AttrList; + SmallVector<std::pair<uint64_t, AttributeSetNode*>, 4> AttrNodes; + // AttributesSet is uniqued, these should not be publicly available. void operator=(const AttributeSetImpl &) LLVM_DELETED_FUNCTION; AttributeSetImpl(const AttributeSetImpl &) LLVM_DELETED_FUNCTION; public: AttributeSetImpl(LLVMContext &C, ArrayRef<AttributeWithIndex> attrs) : Context(C), AttrList(attrs.begin(), attrs.end()) {} + AttributeSetImpl(LLVMContext &C, + ArrayRef<std::pair<uint64_t, AttributeSetNode*> > attrs) + : Context(C), AttrNodes(attrs.begin(), attrs.end()) {} LLVMContext &getContext() { return Context; } ArrayRef<AttributeWithIndex> getAttributes() const { return AttrList; } @@ -122,12 +127,20 @@ public: Profile(ID, AttrList); } static void Profile(FoldingSetNodeID &ID, - ArrayRef<AttributeWithIndex> AttrList){ + ArrayRef<AttributeWithIndex> AttrList) { for (unsigned i = 0, e = AttrList.size(); i != e; ++i) { ID.AddInteger(AttrList[i].Index); ID.AddInteger(AttrList[i].Attrs.Raw()); } } + + static void Profile(FoldingSetNodeID &ID, + ArrayRef<std::pair<uint64_t, AttributeSetNode*> > Nodes) { + for (unsigned i = 0, e = Nodes.size(); i != e; ++i) { + ID.AddInteger(Nodes[i].first); + ID.AddPointer(Nodes[i].second); + } + } }; } // end llvm namespace diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 8623b98..8ee7057 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -99,11 +99,6 @@ bool Attribute::operator<(Attribute A) const { return *pImpl < *A.pImpl; } - -void Attribute::Profile(FoldingSetNodeID &ID) const { - ID.AddPointer(pImpl); -} - uint64_t Attribute::Raw() const { return pImpl ? pImpl->Raw() : 0; } |