summaryrefslogtreecommitdiff
path: root/test/Transforms/DeadStoreElimination
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-11-30 19:12:10 +0000
committerChris Lattner <sabre@nondot.org>2010-11-30 19:12:10 +0000
commit55ee75d57114c17460d364121a2ec3a5cf40e1d2 (patch)
tree6600ba9840712413875e33b42cff9468a47bc257 /test/Transforms/DeadStoreElimination
parent12822af16ae2218e5cdfdf4976e66d81417edda6 (diff)
downloadllvm-55ee75d57114c17460d364121a2ec3a5cf40e1d2.tar.gz
llvm-55ee75d57114c17460d364121a2ec3a5cf40e1d2.tar.bz2
llvm-55ee75d57114c17460d364121a2ec3a5cf40e1d2.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120445 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/DeadStoreElimination')
-rw-r--r--test/Transforms/DeadStoreElimination/simple.ll20
1 files changed, 16 insertions, 4 deletions
diff --git a/test/Transforms/DeadStoreElimination/simple.ll b/test/Transforms/DeadStoreElimination/simple.ll
index 0c05b15357..203cf37193 100644
--- a/test/Transforms/DeadStoreElimination/simple.ll
+++ b/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
+}