Skip to content

Commit 24cd933

Browse files
committed
[MemCpyOpt] Add test for call slot opt with ret-only capture (NFC)
From: #125880 (comment)
1 parent 1c4e986 commit 24cd933

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

llvm/test/Transforms/MemCpyOpt/memcpy.ll

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,23 @@ define void @memcpy_immut_escape_after(ptr align 4 noalias %val) {
907907
ret void
908908
}
909909

910+
declare void @two_args(ptr, ptr)
911+
912+
; Should not perform call slot optimization: The function accepts the
913+
; destination as an argument and may read/write it.
914+
define void @test(ptr noalias writable dereferenceable(4) %p) {
915+
; CHECK-LABEL: @test(
916+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
917+
; CHECK-NEXT: [[RET:%.*]] = call ptr @two_args(ptr [[A]], ptr captures(ret: address, provenance) [[P:%.*]]) #[[ATTR2]]
918+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[P]], ptr [[A]], i64 4, i1 false)
919+
; CHECK-NEXT: ret void
920+
;
921+
%a = alloca i32
922+
%ret = call ptr @two_args(ptr %a, ptr captures(ret: address, provenance) %p) nounwind
923+
call void @llvm.memcpy(ptr align 4 %p, ptr %a, i64 4, i1 false)
924+
ret void
925+
}
926+
910927
!0 = !{!0}
911928
!1 = !{!1, !0}
912929
!2 = !{!1}

0 commit comments

Comments
 (0)