diff --git a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp index dd96c763ce7ce4..259b802bda63b4 100644 --- a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp +++ b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp @@ -203,21 +203,20 @@ struct AssumeBuilderState { } void addCall(const CallBase *Call) { - auto addAttrList = [&](AttributeList AttrList) { - for (unsigned Idx = AttributeList::FirstArgIndex; - Idx < AttrList.getNumAttrSets(); Idx++) - for (Attribute Attr : AttrList.getAttributes(Idx)) { + auto addAttrList = [&](AttributeList AttrList, unsigned NumArgs) { + for (unsigned Idx = 0; Idx < NumArgs; Idx++) + for (Attribute Attr : AttrList.getParamAttrs(Idx)) { bool IsPoisonAttr = Attr.hasAttribute(Attribute::NonNull) || Attr.hasAttribute(Attribute::Alignment); - if (!IsPoisonAttr || Call->isPassingUndefUB(Idx - 1)) - addAttribute(Attr, Call->getArgOperand(Idx - 1)); + if (!IsPoisonAttr || Call->isPassingUndefUB(Idx)) + addAttribute(Attr, Call->getArgOperand(Idx)); } for (Attribute Attr : AttrList.getFnAttrs()) addAttribute(Attr, nullptr); }; - addAttrList(Call->getAttributes()); + addAttrList(Call->getAttributes(), Call->arg_size()); if (Function *Fn = Call->getCalledFunction()) - addAttrList(Fn->getAttributes()); + addAttrList(Fn->getAttributes(), Fn->arg_size()); } AssumeInst *build() { diff --git a/llvm/unittests/IR/AttributesTest.cpp b/llvm/unittests/IR/AttributesTest.cpp index 4ba790058f8ce7..30664b1d6fedbb 100644 --- a/llvm/unittests/IR/AttributesTest.cpp +++ b/llvm/unittests/IR/AttributesTest.cpp @@ -54,7 +54,7 @@ TEST(Attributes, Ordering) { AttributeList::get(C, 1, Attribute::SExt)}; AttributeList SetA = AttributeList::get(C, ASs); - AttributeList SetB = SetA.removeAttributes(C, 1, ASs[1].getAttributes(1)); + AttributeList SetB = SetA.removeAttributes(C, 1, ASs[1].getParamAttrs(0)); EXPECT_NE(SetA, SetB); }