[PATCH] D95247: [Coroutine] Improve coro-elide-musttail.ll test
Xun Li via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 22 10:14:28 PST 2021
lxfind created this revision.
lxfind added reviewers: aeubanks, junparser.
Herald added subscribers: hoy, modimo, wenlei.
lxfind requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
The test wasn't sensitive to alias analysis. As you can seen from D95117 <https://reviews.llvm.org/D95117> when AA is added by default this is affected.
Updating the test so that it coveres both cases for AA analysis.
Note that this patch depends on D95117 <https://reviews.llvm.org/D95117> to land first.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D95247
Files:
llvm/test/Transforms/Coroutines/coro-elide-musttail.ll
Index: llvm/test/Transforms/Coroutines/coro-elide-musttail.ll
===================================================================
--- llvm/test/Transforms/Coroutines/coro-elide-musttail.ll
+++ llvm/test/Transforms/Coroutines/coro-elide-musttail.ll
@@ -2,6 +2,7 @@
; Only run with new pass manager since old pass manager's alias analysis isn't
; powerful enough to tell that the tailcall's arguments don't alias the frame.
;
+; RUN: opt < %s -coro-elide -S | FileCheck %s
; RUN: opt < %s -passes='coro-elide' -S | FileCheck %s
%"bar.Frame" = type { void (%"bar.Frame"*)*, void (%"bar.Frame"*)*, %"struct.coroutine<false, int>::promise_type", i1 }
@@ -14,6 +15,7 @@
declare dso_local void @"bar"() align 2
declare dso_local fastcc void @"bar.resume"(%"bar.Frame"*) align 2
+; There is a musttail call. CoroElide won't happen.
define internal fastcc void @foo.resume_musttail(%"foo.Frame"* %FramePtr) {
; CHECK-LABEL: @foo.resume_musttail(
; CHECK-NEXT: entry:
@@ -34,13 +36,37 @@
ret void
}
-define internal fastcc void @foo.resume_no_musttail(%"foo.Frame"* %FramePtr) {
-; CHECK-LABEL: @foo.resume_no_musttail(
+define internal fastcc void @foo.resume_no_musttail_with_alias(%"foo.Frame"* %FramePtr) {
+; CHECK-LABEL: @foo.resume_no_musttail_with_alias(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = alloca [24 x i8], align 8
; CHECK-NEXT: [[VFRAME:%.*]] = bitcast [24 x i8]* [[TMP0]] to i8*
; CHECK-NEXT: [[TMP1:%.*]] = tail call token @llvm.coro.id(i32 16, i8* null, i8* bitcast (void ()* @bar to i8*), i8* bitcast ([3 x void (%bar.Frame*)*]* @bar.resumers to i8*))
+; CHECK-NEXT: call fastcc void undef(i8* [[VFRAME]])
; CHECK-NEXT: [[CALL34:%.*]] = call i8* undef()
+; The new frame (TMP0) could potentially alias CALL34, the tailcall attribute must be removed
+; CHECK-NEXT: call fastcc void undef(i8* [[CALL34]])
+; CHECK-NEXT: ret void
+;
+entry:
+ %0 = tail call token @llvm.coro.id(i32 16, i8* null, i8* bitcast (void ()* @"bar" to i8*), i8* bitcast ([3 x void (%"bar.Frame"*)*]* @"bar.resumers" to i8*))
+ %1 = tail call i1 @llvm.coro.alloc(token %0)
+ %2 = tail call i8* @llvm.coro.begin(token %0, i8* null)
+ call i8* @llvm.coro.subfn.addr(i8* %2, i8 1)
+ call fastcc void undef(i8* %2)
+ %call34 = call i8* undef()
+ tail call fastcc void undef(i8* %call34)
+ ret void
+}
+
+define internal fastcc void @foo.resume_no_musttail_no_alias(%"foo.Frame"* %FramePtr) {
+; CHECK-LABEL: @foo.resume_no_musttail_no_alias(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = alloca [24 x i8], align 8
+; CHECK-NEXT: [[VFRAME:%.*]] = bitcast [24 x i8]* [[TMP0]] to i8*
+; CHECK-NEXT: [[TMP1:%.*]] = tail call token @llvm.coro.id(i32 16, i8* null, i8* bitcast (void ()* @bar to i8*), i8* bitcast ([3 x void (%bar.Frame*)*]* @bar.resumers to i8*))
+; CHECK-NEXT: [[CALL34:%.*]] = call i8* undef()
+; The new frame (TMP0) does not alias CALL34, tailcall attribute can reimain
; CHECK-NEXT: tail call fastcc void undef(i8* [[CALL34]])
; CHECK-NEXT: ret void
;
@@ -54,6 +80,7 @@
ret void
}
+
; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95247.318568.patch
Type: text/x-patch
Size: 3212 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210122/3d4951f9/attachment.bin>
More information about the llvm-commits
mailing list