diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-11-30 19:12:10 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-11-30 19:12:10 +0000 |
| commit | b63ba73b1b97e717e04eb8be5f7afc7b2f5ef1ea (patch) | |
| tree | 5708ffcd5c76db5d8fb2c6d5aa2a50ad3858a157 /llvm/test | |
| parent | 8b166186857ff33ccc281848880f5da33bd08706 (diff) | |
| download | bcm5719-llvm-b63ba73b1b97e717e04eb8be5f7afc7b2f5ef1ea.tar.gz bcm5719-llvm-b63ba73b1b97e717e04eb8be5f7afc7b2f5ef1ea.zip | |
enhance isRemovable to refuse to delete volatile mem transfers
now that DSE hacks on them. This fixes a regression I introduced,
by generalizing DSE to hack on transfers.
llvm-svn: 120445
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/DeadStoreElimination/simple.ll | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/test/Transforms/DeadStoreElimination/simple.ll b/llvm/test/Transforms/DeadStoreElimination/simple.ll index 0c05b153571..203cf37193b 100644 --- a/llvm/test/Transforms/DeadStoreElimination/simple.ll +++ b/llvm/test/Transforms/DeadStoreElimination/simple.ll @@ -1,6 +1,12 @@ ; RUN: opt < %s -basicaa -dse -S | FileCheck %s target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind +declare void @llvm.memset.i64(i8*, i8, i64, i32) +declare void @llvm.memcpy.i64(i8*, i8*, i64, i32) +declare i8* @llvm.init.trampoline(i8*, i8*, i8*) + define void @test1(i32* %Q, i32* %P) { %DEAD = load i32* %Q store i32 %DEAD, i32* %P @@ -55,9 +61,6 @@ define void @test5(i32* %Q) { ; CHECK-NEXT: ret void } -declare void @llvm.memset.i64(i8*, i8, i64, i32) -declare void @llvm.memcpy.i64(i8*, i8*, i64, i32) - ; Should delete store of 10 even though memset is a may-store to P (P and Q may ; alias). define void @test6(i32 *%p, i8 *%q) { @@ -116,7 +119,6 @@ define double @test10(i8* %X) { ; DSE should delete the dead trampoline. -declare i8* @llvm.init.trampoline(i8*, i8*, i8*) declare void @test11f() define void @test11() { ; CHECK: @test11 @@ -210,3 +212,13 @@ define void @test17(i8* %P, i8* %Q) nounwind ssp { ; CHECK-NEXT: ret } +; Should not delete the volatile memset. +define void @test17v(i8* %P, i8* %Q) nounwind ssp { + tail call void @llvm.memset.p0i8.i64(i8* %P, i8 42, i64 8, i32 1, i1 true) + tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %P, i8* %Q, i64 12, i32 1, i1 false) + ret void +; CHECK: @test17v +; CHECK-NEXT: call void @llvm.memset +; CHECK-NEXT: call void @llvm.memcpy +; CHECK-NEXT: ret +} |

