diff options
-rw-r--r-- | llvm/lib/Transforms/Utils/InlineFunction.cpp | 12 | ||||
-rw-r--r-- | llvm/test/Transforms/Inline/nonnull.ll | 2 |
2 files changed, 5 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp index 29e7ca0..9b4c62a 100644 --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp @@ -1341,21 +1341,17 @@ static bool MayContainThrowingOrExitingCall(Instruction *Begin, } static AttrBuilder IdentifyValidAttributes(CallBase &CB) { - - AttrBuilder AB(CB.getContext(), CB.getAttributes().getRetAttrs()); - if (!AB.hasAttributes()) - return AB; AttrBuilder Valid(CB.getContext()); // Only allow these white listed attributes to be propagated back to the // callee. This is because other attributes may only be valid on the call // itself, i.e. attributes such as signext and zeroext. - if (auto DerefBytes = AB.getDereferenceableBytes()) + if (auto DerefBytes = CB.getRetDereferenceableBytes()) Valid.addDereferenceableAttr(DerefBytes); - if (auto DerefOrNullBytes = AB.getDereferenceableOrNullBytes()) + if (auto DerefOrNullBytes = CB.getRetDereferenceableOrNullBytes()) Valid.addDereferenceableOrNullAttr(DerefOrNullBytes); - if (AB.contains(Attribute::NoAlias)) + if (CB.hasRetAttr(Attribute::NoAlias)) Valid.addAttribute(Attribute::NoAlias); - if (AB.contains(Attribute::NonNull)) + if (CB.hasRetAttr(Attribute::NonNull)) Valid.addAttribute(Attribute::NonNull); return Valid; } diff --git a/llvm/test/Transforms/Inline/nonnull.ll b/llvm/test/Transforms/Inline/nonnull.ll index 270f753..faaf65b 100644 --- a/llvm/test/Transforms/Inline/nonnull.ll +++ b/llvm/test/Transforms/Inline/nonnull.ll @@ -141,7 +141,7 @@ define nonnull ptr @callee7() { define ptr @caller7() { ; CHECK-LABEL: define ptr @caller7() { -; CHECK-NEXT: [[R_I:%.*]] = call ptr @buz() #[[ATTR0]] +; CHECK-NEXT: [[R_I:%.*]] = call nonnull ptr @buz() #[[ATTR0]] ; CHECK-NEXT: ret ptr [[R_I]] ; %r = call ptr @callee7() |