-
Notifications
You must be signed in to change notification settings - Fork 14k
[Inline] Only consider provenance captures for scoped alias metadata #138540
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
When determining whether an escape source may alias with a noalias argument, only take provenance captures into account. If only the address of the argument was captured, an access through the escape source is not legal.
@llvm/pr-subscribers-llvm-transforms Author: Nikita Popov (nikic) ChangesWhen determining whether an escape source may alias with a noalias argument, only take provenance captures into account. If only the address of the argument was captured, an access through the escape source is not legal. Full diff: https://github.com/llvm/llvm-project/pull/138540.diff 2 Files Affected:
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 7a91620af8272..8d9f8ff68ea10 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -1313,7 +1313,9 @@ static void AddAliasScopeMetadata(CallBase &CB, ValueToValueMapTy &VMap,
// nocapture only guarantees that no copies outlive the function, not
// that the value cannot be locally captured.
if (!RequiresNoCaptureBefore ||
- !PointerMayBeCapturedBefore(A, /* ReturnCaptures */ false, I, &DT))
+ !capturesAnything(PointerMayBeCapturedBefore(
+ A, /*ReturnCaptures=*/false, I, &DT, /*IncludeI=*/false,
+ CaptureComponents::Provenance)))
NoAliases.push_back(NewScopes[A]);
}
diff --git a/llvm/test/Transforms/Inline/noalias-escape-source.ll b/llvm/test/Transforms/Inline/noalias-escape-source.ll
index 78b31da21a375..09835cb75b780 100644
--- a/llvm/test/Transforms/Inline/noalias-escape-source.ll
+++ b/llvm/test/Transforms/Inline/noalias-escape-source.ll
@@ -82,9 +82,9 @@ define void @test_addr_only_capture(ptr %p) {
; CHECK-SAME: ptr [[P:%.*]]) {
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])
; CHECK-NEXT: call void @capture(ptr captures(address) [[P]])
-; CHECK-NEXT: [[P2_I:%.*]] = call ptr @get_ptr()
+; CHECK-NEXT: [[P2_I:%.*]] = call ptr @get_ptr(), !noalias [[META6]]
; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P]], align 4, !alias.scope [[META6]]
-; CHECK-NEXT: store i32 [[V_I]], ptr [[P2_I]], align 4
+; CHECK-NEXT: store i32 [[V_I]], ptr [[P2_I]], align 4, !noalias [[META6]]
; CHECK-NEXT: ret void
;
call void @callee_addr_only_capture(ptr %p)
|
Ping |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/108/builds/13347 Here is the relevant piece of the build log for the reference
|
…lvm#138540) When determining whether an escape source may alias with a noalias argument, only take provenance captures into account. If only the address of the argument was captured, an access through the escape source is not legal.
When determining whether an escape source may alias with a noalias argument, only take provenance captures into account. If only the address of the argument was captured, an access through the escape source is not legal.