Skip to content

Commit bdc9a6b

Browse files
committed
[MemCpyOpt] add terminator user test for D153453(NFC)
Differential Revision: https://reviews.llvm.org/D155571
1 parent 1dccdf7 commit bdc9a6b

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

llvm/test/Transforms/MemCpyOpt/stack-move.ll

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,46 @@ define void @src_mod_dest_mod_after_copy() {
381381
ret void
382382
}
383383

384+
; TODO: if the last user is terminator, we won't insert lifetime.end.
385+
; For multi-bb patch, we will insert it for next immediate post dominator block.
386+
define void @terminator_lastuse() personality i32 0 {
387+
; CHECK-LABEL: define void @terminator_lastuse() personality i32 0 {
388+
; CHECK-NEXT: [[SRC:%.*]] = alloca [[STRUCT_FOO:%.*]], align 4
389+
; CHECK-NEXT: [[DEST:%.*]] = alloca [[STRUCT_FOO]], align 4
390+
; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 12, ptr nocapture [[SRC]])
391+
; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 12, ptr nocapture [[DEST]])
392+
; CHECK-NEXT: store [[STRUCT_FOO]] { i32 10, i32 20, i32 30 }, ptr [[SRC]], align 4
393+
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @use_nocapture(ptr nocapture [[SRC]])
394+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[DEST]], ptr align 4 [[SRC]], i64 12, i1 false)
395+
; CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 12, ptr [[SRC]])
396+
; CHECK-NEXT: [[RV:%.*]] = invoke i32 @use_nocapture(ptr [[DEST]])
397+
; CHECK-NEXT: to label [[SUC:%.*]] unwind label [[UNW:%.*]]
398+
; CHECK: unw:
399+
; CHECK-NEXT: [[LP:%.*]] = landingpad i32
400+
; CHECK-NEXT: cleanup
401+
; CHECK-NEXT: resume i32 0
402+
; CHECK: suc:
403+
; CHECK-NEXT: ret void
404+
;
405+
%src = alloca %struct.Foo, align 4
406+
%dest = alloca %struct.Foo, align 4
407+
call void @llvm.lifetime.start.p0(i64 12, ptr nocapture %src)
408+
call void @llvm.lifetime.start.p0(i64 12, ptr nocapture %dest)
409+
store %struct.Foo { i32 10, i32 20, i32 30 }, ptr %src
410+
%1 = call i32 @use_nocapture(ptr nocapture %src)
411+
412+
call void @llvm.memcpy.p0.p0.i64(ptr align 4 %dest, ptr align 4 %src, i64 12, i1 false)
413+
414+
call void @llvm.lifetime.end.p0(i64 12, ptr %src)
415+
%rv = invoke i32 @use_nocapture(ptr %dest)
416+
to label %suc unwind label %unw
417+
unw:
418+
%lp = landingpad i32 cleanup
419+
resume i32 0
420+
suc:
421+
ret void
422+
}
423+
384424
; TODO: merge allocas for bb-separated, but logically straight
385425
define void @multi_bb_memcpy(i1 %b) {
386426
; CHECK-LABEL: define void @multi_bb_memcpy

0 commit comments

Comments
 (0)