[opaque pointer type] Add textual IR support for explicit type parameter to load...
[oota-llvm.git] / test / Transforms / CorrelatedValuePropagation / non-null.ll
1 ; RUN: opt < %s -correlated-propagation -S | FileCheck %s
2
3 define void @test1(i8* %ptr) {
4 ; CHECK: test1
5   %A = load i8, i8* %ptr
6   br label %bb
7 bb:
8   icmp ne i8* %ptr, null
9 ; CHECK-NOT: icmp
10   ret void
11 }
12
13 define void @test2(i8* %ptr) {
14 ; CHECK: test2
15   store i8 0, i8* %ptr
16   br label %bb
17 bb:
18   icmp ne i8* %ptr, null
19 ; CHECK-NOT: icmp
20   ret void
21 }
22
23 define void @test3() {
24 ; CHECK: test3
25   %ptr = alloca i8
26   br label %bb
27 bb:
28   icmp ne i8* %ptr, null
29 ; CHECK-NOT: icmp
30   ret void
31 }
32
33 declare void @llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
34 define void @test4(i8* %dest, i8* %src) {
35 ; CHECK: test4
36   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 1, i32 1, i1 false)
37   br label %bb
38 bb:
39   icmp ne i8* %dest, null
40   icmp ne i8* %src, null
41 ; CHECK-NOT: icmp
42   ret void
43 }
44
45 declare void @llvm.memmove.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
46 define void @test5(i8* %dest, i8* %src) {
47 ; CHECK: test5
48   call void @llvm.memmove.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 1, i32 1, i1 false)
49   br label %bb
50 bb:
51   icmp ne i8* %dest, null
52   icmp ne i8* %src, null
53 ; CHECK-NOT: icmp
54   ret void
55 }
56
57 declare void @llvm.memset.p0i8.i32(i8*, i8, i32, i32, i1)
58 define void @test6(i8* %dest) {
59 ; CHECK: test6
60   call void @llvm.memset.p0i8.i32(i8* %dest, i8 255, i32 1, i32 1, i1 false)
61   br label %bb
62 bb:
63   icmp ne i8* %dest, null
64 ; CHECK-NOT: icmp
65   ret void
66 }
67
68 define void @test7(i8* %dest, i8* %src, i32 %len) {
69 ; CHECK: test7
70   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 %len, i32 1, i1 false)
71   br label %bb
72 bb:
73   %KEEP1 = icmp ne i8* %dest, null
74 ; CHECK: KEEP1
75   %KEEP2 = icmp ne i8* %src, null
76 ; CHECK: KEEP2
77   ret void
78 }
79
80 declare void @llvm.memcpy.p1i8.p1i8.i32(i8 addrspace(1) *, i8 addrspace(1) *, i32, i32, i1)
81 define void @test8(i8 addrspace(1) * %dest, i8 addrspace(1) * %src) {
82 ; CHECK: test8
83   call void @llvm.memcpy.p1i8.p1i8.i32(i8 addrspace(1) * %dest, i8 addrspace(1) * %src, i32 1, i32 1, i1 false)
84   br label %bb
85 bb:
86   %KEEP1 = icmp ne i8 addrspace(1) * %dest, null
87 ; CHECK: KEEP1
88   %KEEP2 = icmp ne i8 addrspace(1) * %src, null
89 ; CHECK: KEEP2
90   ret void
91 }
92
93 define void @test9(i8* %dest, i8* %src) {
94 ; CHECK: test9
95   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 1, i32 1, i1 true)
96   br label %bb
97 bb:
98   %KEEP1 = icmp ne i8* %dest, null
99 ; CHECK: KEEP1
100   %KEEP2 = icmp ne i8* %src, null
101 ; CHECK: KEEP2
102   ret void
103 }