Skip to content

Commit 1a2a7cc

Browse files
committed
[DSE] Add test case with 2 memcpys that should not be eliminated.
1 parent f0d527b commit 1a2a7cc

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,3 +503,20 @@ define void @pr50339(i8* nocapture readonly %0) {
503503
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(16) getelementptr inbounds ([32 x i8], [32 x i8]* @a, i64 0, i64 0), i8* noundef nonnull align 1 dereferenceable(16) %0, i64 16, i1 false)
504504
ret void
505505
}
506+
507+
; Cannot remove the second memcpy as redundant store, because %src is modified
508+
; in between.
509+
define i8 @memset_optimized_access(i8* noalias %dst, i8* noalias %src) {
510+
; CHECK-LABEL: @memset_optimized_access(
511+
; CHECK-NEXT: tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST:%.*]], i8* [[SRC:%.*]], i64 16, i1 false)
512+
; CHECK-NEXT: store i8 99, i8* [[SRC]], align 1
513+
; CHECK-NEXT: [[L:%.*]] = load i8, i8* [[DST]], align 1
514+
; CHECK-NEXT: tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[DST]], i8* [[SRC]], i64 16, i1 false)
515+
; CHECK-NEXT: ret i8 [[L]]
516+
;
517+
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 16, i1 false)
518+
store i8 99, i8* %src
519+
%l = load i8, i8* %dst
520+
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 16, i1 false)
521+
ret i8 %l
522+
}

0 commit comments

Comments
 (0)