aboutsummaryrefslogtreecommitdiffstats
path: root/lib/IR/Attributes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/IR/Attributes.cpp')
-rw-r--r--lib/IR/Attributes.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index 361f3d6..59d3ef0 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -197,17 +197,21 @@ AttrBuilder::AttrBuilder(AttributeSet AS, unsigned Idx)
AttributeSetImpl *pImpl = AS.pImpl;
if (!pImpl) return;
- ArrayRef<AttributeWithIndex> AttrList = pImpl->getAttributes();
- const AttributeWithIndex *AWI = 0;
- for (unsigned I = 0, E = AttrList.size(); I != E; ++I)
- if (AttrList[I].Index == Idx) {
- AWI = &AttrList[I];
- break;
- }
+ AttrBuilder B;
+
+ for (unsigned I = 0, E = pImpl->getNumAttributes(); I != E; ++I) {
+ if (pImpl->getSlotIndex(I) != Idx) continue;
+
+ for (AttributeSetNode::const_iterator II = pImpl->begin(I),
+ IE = pImpl->end(I); II != IE; ++II)
+ B.addAttributes(*II);
+
+ break;
+ }
- if (!AWI) return;
+ if (!B.hasAttributes()) return;
- uint64_t Mask = AWI->Attrs.Raw();
+ uint64_t Mask = B.Raw();
for (Attribute::AttrKind I = Attribute::None; I != Attribute::EndAttrKinds;
I = Attribute::AttrKind(I + 1)) {
@@ -861,8 +865,8 @@ AttributeSet AttributeSet::removeAttr(LLVMContext &C, unsigned Idx,
}
void AttributeSet::dump() const {
- dbgs() << "PAL[ ";
- for (unsigned i = 0; i < getNumSlots(); ++i) {
+ dbgs() << "PAL[\n";
+ for (unsigned i = 0, e = getNumSlots(); i < e; ++i) {
uint64_t Index = getSlotIndex(i);
dbgs() << " { ";
if (Index == ~0U)