diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-01-29 01:02:03 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-01-29 01:02:03 +0000 |
commit | 8fbc0c296ef067150f3228e389ae04cf7b3b1992 (patch) | |
tree | aee2e5e001ca7edab4456566a7c5f0e526086c8d | |
parent | b8d2c92ac42eca3d4242bd7ce6c6e87a4d887727 (diff) |
Convert the AttrBuilder into a list of Attributes instead of one Attribute object that holds all of its attributes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173742 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/IR/Attributes.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 0bc926271a..d947ffffd8 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -445,8 +445,21 @@ AttributeSet AttributeSet::get(LLVMContext &C, AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx, AttrBuilder &B) { if (!B.hasAttributes()) return AttributeSet(); - return get(C, ArrayRef<std::pair<unsigned, Attribute> >( - std::make_pair(Idx, Attribute::get(C, B)))); + + SmallVector<std::pair<unsigned, Attribute>, 8> Attrs; + for (AttrBuilder::iterator I = B.begin(), E = B.end(); I != E; ++I) { + Attribute::AttrKind Kind = *I; + if (Kind == Attribute::Alignment) + Attrs.push_back(std::make_pair(Idx, Attribute:: + getWithAlignment(C, B.getAlignment()))); + else if (Kind == Attribute::StackAlignment) + Attrs.push_back(std::make_pair(Idx, Attribute:: + getWithStackAlignment(C, B.getStackAlignment()))); + else + Attrs.push_back(std::make_pair(Idx, Attribute::get(C, Kind))); + } + + return get(C, Attrs); } AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx, |