Taints the non-acquire RMW's store address with the load part
[oota-llvm.git] / test / Transforms / InstSimplify / undef.ll
1 ; RUN: opt -instsimplify -S < %s | FileCheck %s
2
3 ; @test0
4 ; CHECK: ret i64 undef
5 define i64 @test0() {
6   %r = mul i64 undef, undef
7   ret i64 %r
8 }
9
10 ; @test1
11 ; CHECK: ret i64 undef
12 define i64 @test1() {
13   %r = mul i64 3, undef
14   ret i64 %r
15 }
16
17 ; @test2
18 ; CHECK: ret i64 undef
19 define i64 @test2() {
20   %r = mul i64 undef, 3
21   ret i64 %r
22 }
23
24 ; @test3
25 ; CHECK: ret i64 0
26 define i64 @test3() {
27   %r = mul i64 undef, 6
28   ret i64 %r
29 }
30
31 ; @test4
32 ; CHECK: ret i64 0
33 define i64 @test4() {
34   %r = mul i64 6, undef
35   ret i64 %r
36 }
37
38 ; @test5
39 ; CHECK: ret i64 undef
40 define i64 @test5() {
41   %r = and i64 undef, undef
42   ret i64 %r
43 }
44
45 ; @test6
46 ; CHECK: ret i64 undef
47 define i64 @test6() {
48   %r = or i64 undef, undef
49   ret i64 %r
50 }
51
52 ; @test7
53 ; CHECK: ret i64 undef
54 define i64 @test7() {
55   %r = udiv i64 undef, 1
56   ret i64 %r
57 }
58
59 ; @test8
60 ; CHECK: ret i64 undef
61 define i64 @test8() {
62   %r = sdiv i64 undef, 1
63   ret i64 %r
64 }
65
66 ; @test9
67 ; CHECK: ret i64 0
68 define i64 @test9() {
69   %r = urem i64 undef, 1
70   ret i64 %r
71 }
72
73 ; @test10
74 ; CHECK: ret i64 0
75 define i64 @test10() {
76   %r = srem i64 undef, 1
77   ret i64 %r
78 }
79
80 ; @test11
81 ; CHECK: ret i64 undef
82 define i64 @test11() {
83   %r = shl i64 undef, undef
84   ret i64 %r
85 }
86
87 ; @test11b
88 ; CHECK: ret i64 undef
89 define i64 @test11b(i64 %a) {
90   %r = shl i64 %a, undef
91   ret i64 %r
92 }
93
94 ; @test12
95 ; CHECK: ret i64 undef
96 define i64 @test12() {
97   %r = ashr i64 undef, undef
98   ret i64 %r
99 }
100
101 ; @test12b
102 ; CHECK: ret i64 undef
103 define i64 @test12b(i64 %a) {
104   %r = ashr i64 %a, undef
105   ret i64 %r
106 }
107
108 ; @test13
109 ; CHECK: ret i64 undef
110 define i64 @test13() {
111   %r = lshr i64 undef, undef
112   ret i64 %r
113 }
114
115 ; @test13b
116 ; CHECK: ret i64 undef
117 define i64 @test13b(i64 %a) {
118   %r = lshr i64 %a, undef
119   ret i64 %r
120 }
121
122 ; @test14
123 ; CHECK: ret i1 undef
124 define i1 @test14() {
125   %r = icmp slt i64 undef, undef
126   ret i1 %r
127 }
128
129 ; @test15
130 ; CHECK: ret i1 undef
131 define i1 @test15() {
132   %r = icmp ult i64 undef, undef
133   ret i1 %r
134 }
135
136 ; @test16
137 ; CHECK: ret i64 undef
138 define i64 @test16(i64 %a) {
139   %r = select i1 undef, i64 %a, i64 undef
140   ret i64 %r
141 }
142
143 ; @test17
144 ; CHECK: ret i64 undef
145 define i64 @test17(i64 %a) {
146   %r = select i1 undef, i64 undef, i64 %a
147   ret i64 %r
148 }
149
150 ; @test18
151 ; CHECK: ret i64 undef
152 define i64 @test18(i64 %a) {
153   %r = call i64 (i64) undef(i64 %a)
154   ret i64 %r
155 }
156
157 ; CHECK-LABEL: @test19
158 ; CHECK: ret <4 x i8> undef
159 define <4 x i8> @test19(<4 x i8> %a) {
160   %b = shl <4 x i8> %a, <i8 8, i8 9, i8 undef, i8 -1>
161   ret <4 x i8> %b
162 }
163
164 ; CHECK-LABEL: @test20
165 ; CHECK: ret i32 undef
166 define i32 @test20(i32 %a) {
167   %b = udiv i32 %a, 0
168   ret i32 %b
169 }
170
171 ; CHECK-LABEL: @test21
172 ; CHECK: ret i32 undef
173 define i32 @test21(i32 %a) {
174   %b = sdiv i32 %a, 0
175   ret i32 %b
176 }
177
178 ; CHECK-LABEL: @test22
179 ; CHECK: ret i32 undef
180 define i32 @test22(i32 %a) {
181   %b = ashr exact i32 undef, %a
182   ret i32 %b
183 }
184
185 ; CHECK-LABEL: @test23
186 ; CHECK: ret i32 undef
187 define i32 @test23(i32 %a) {
188   %b = lshr exact i32 undef, %a
189   ret i32 %b
190 }
191
192 ; CHECK-LABEL: @test24
193 ; CHECK: ret i32 undef
194 define i32 @test24() {
195   %b = udiv i32 undef, 0
196   ret i32 %b
197 }
198
199 ; CHECK-LABEL: @test25
200 ; CHECK: ret i32 undef
201 define i32 @test25() {
202   %b = lshr i32 0, undef
203   ret i32 %b
204 }
205
206 ; CHECK-LABEL: @test26
207 ; CHECK: ret i32 undef
208 define i32 @test26() {
209   %b = ashr i32 0, undef
210   ret i32 %b
211 }
212
213 ; CHECK-LABEL: @test27
214 ; CHECK: ret i32 undef
215 define i32 @test27() {
216   %b = shl i32 0, undef
217   ret i32 %b
218 }
219
220 ; CHECK-LABEL: @test28
221 ; CHECK: ret i32 undef
222 define i32 @test28(i32 %a) {
223   %b = shl nsw i32 undef, %a
224   ret i32 %b
225 }
226
227 ; CHECK-LABEL: @test29
228 ; CHECK: ret i32 undef
229 define i32 @test29(i32 %a) {
230   %b = shl nuw i32 undef, %a
231   ret i32 %b
232 }
233
234 ; CHECK-LABEL: @test30
235 ; CHECK: ret i32 undef
236 define i32 @test30(i32 %a) {
237   %b = shl nsw nuw i32 undef, %a
238   ret i32 %b
239 }
240
241 ; CHECK-LABEL: @test31
242 ; CHECK: ret i32 0
243 define i32 @test31(i32 %a) {
244   %b = shl i32 undef, %a
245   ret i32 %b
246 }
247
248 ; CHECK-LABEL: @test32
249 ; CHECK: ret i32 undef
250 define i32 @test32(i32 %a) {
251   %b = shl i32 undef, 0
252   ret i32 %b
253 }
254
255 ; CHECK-LABEL: @test33
256 ; CHECK: ret i32 undef
257 define i32 @test33(i32 %a) {
258   %b = ashr i32 undef, 0
259   ret i32 %b
260 }
261
262 ; CHECK-LABEL: @test34
263 ; CHECK: ret i32 undef
264 define i32 @test34(i32 %a) {
265   %b = lshr i32 undef, 0
266   ret i32 %b
267 }
268
269 ; CHECK-LABEL: @test35
270 ; CHECK: ret i32 undef
271 define i32 @test35(<4 x i32> %V) {
272   %b = extractelement <4 x i32> %V, i32 4
273   ret i32 %b
274 }
275
276 ; CHECK-LABEL: @test36
277 ; CHECK: ret i32 undef
278 define i32 @test36(i32 %V) {
279   %b = extractelement <4 x i32> undef, i32 %V
280   ret i32 %b
281 }