Fix PR8728, a miscompilation I recently introduced. When optimizing
[oota-llvm.git] / test / Transforms / DeadStoreElimination / simple.ll
index 203cf37193b69cfb34af5117afa57286863d6329..a61eac9729e8db072fdf817a50792061a76078b3 100644 (file)
@@ -203,7 +203,7 @@ define void @test16(i8* %P, i8* %Q) nounwind ssp {
 }
 
 ;; Overwrite of memset by memcpy.
-define void @test17(i8* %P, i8* %Q) nounwind ssp {
+define void @test17(i8* %P, i8* noalias %Q) nounwind ssp {
   tail call void @llvm.memset.i64(i8* %P, i8 42, i64 8, i32 1)
   tail call void @llvm.memcpy.i64(i8* %P, i8* %Q, i64 12, i32 1)
   ret void
@@ -222,3 +222,17 @@ define void @test17v(i8* %P, i8* %Q) nounwind ssp {
 ; CHECK-NEXT: call void @llvm.memcpy
 ; CHECK-NEXT: ret
 }
+
+; PR8728
+; Do not delete instruction where possible situation is:
+; A = B
+; A = A
+define void @test18(i8* %P, i8* %Q, i8* %R) nounwind ssp {
+  tail call void @llvm.memcpy.i64(i8* %P, i8* %Q, i64 12, i32 1)
+  tail call void @llvm.memcpy.i64(i8* %P, i8* %R, i64 12, i32 1)
+  ret void
+; CHECK: @test18
+; CHECK-NEXT: call void @llvm.memcpy
+; CHECK-NEXT: call void @llvm.memcpy
+; CHECK-NEXT: ret
+}