xref: /llvm-project/llvm/test/Transforms/InstSimplify/undef.ll (revision 11b41910dd9ffbc1bffcc818be2de0174eac1e1b)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=instsimplify -S < %s | FileCheck %s
3
4define i64 @test0() {
5; CHECK-LABEL: @test0(
6; CHECK-NEXT:    ret i64 undef
7;
8  %r = mul i64 undef, undef
9  ret i64 %r
10}
11
12define i64 @test1() {
13; CHECK-LABEL: @test1(
14; CHECK-NEXT:    ret i64 undef
15;
16  %r = mul i64 3, undef
17  ret i64 %r
18}
19
20define i64 @test2() {
21; CHECK-LABEL: @test2(
22; CHECK-NEXT:    ret i64 undef
23;
24  %r = mul i64 undef, 3
25  ret i64 %r
26}
27
28define i64 @test3() {
29; CHECK-LABEL: @test3(
30; CHECK-NEXT:    ret i64 0
31;
32  %r = mul i64 undef, 6
33  ret i64 %r
34}
35
36define i64 @test4() {
37; CHECK-LABEL: @test4(
38; CHECK-NEXT:    ret i64 0
39;
40  %r = mul i64 6, undef
41  ret i64 %r
42}
43
44define i64 @test5() {
45; CHECK-LABEL: @test5(
46; CHECK-NEXT:    ret i64 undef
47;
48  %r = and i64 undef, undef
49  ret i64 %r
50}
51
52define i64 @test6() {
53; CHECK-LABEL: @test6(
54; CHECK-NEXT:    ret i64 undef
55;
56  %r = or i64 undef, undef
57  ret i64 %r
58}
59
60define i64 @test7() {
61; CHECK-LABEL: @test7(
62; CHECK-NEXT:    ret i64 undef
63;
64  %r = udiv i64 undef, 1
65  ret i64 %r
66}
67
68define i64 @test8() {
69; CHECK-LABEL: @test8(
70; CHECK-NEXT:    ret i64 undef
71;
72  %r = sdiv i64 undef, 1
73  ret i64 %r
74}
75
76define i64 @test9() {
77; CHECK-LABEL: @test9(
78; CHECK-NEXT:    ret i64 0
79;
80  %r = urem i64 undef, 1
81  ret i64 %r
82}
83
84define i64 @test10() {
85; CHECK-LABEL: @test10(
86; CHECK-NEXT:    ret i64 0
87;
88  %r = srem i64 undef, 1
89  ret i64 %r
90}
91
92define i64 @test11() {
93; CHECK-LABEL: @test11(
94; CHECK-NEXT:    ret i64 poison
95;
96  %r = shl i64 undef, undef
97  ret i64 %r
98}
99
100define i64 @test11b(i64 %a) {
101; CHECK-LABEL: @test11b(
102; CHECK-NEXT:    ret i64 poison
103;
104  %r = shl i64 %a, undef
105  ret i64 %r
106}
107
108define i64 @test12() {
109; CHECK-LABEL: @test12(
110; CHECK-NEXT:    ret i64 poison
111;
112  %r = ashr i64 undef, undef
113  ret i64 %r
114}
115
116define i64 @test12b(i64 %a) {
117; CHECK-LABEL: @test12b(
118; CHECK-NEXT:    ret i64 poison
119;
120  %r = ashr i64 %a, undef
121  ret i64 %r
122}
123
124define i64 @test13() {
125; CHECK-LABEL: @test13(
126; CHECK-NEXT:    ret i64 poison
127;
128  %r = lshr i64 undef, undef
129  ret i64 %r
130}
131
132define i64 @test13b(i64 %a) {
133; CHECK-LABEL: @test13b(
134; CHECK-NEXT:    ret i64 poison
135;
136  %r = lshr i64 %a, undef
137  ret i64 %r
138}
139
140define i1 @test14() {
141; CHECK-LABEL: @test14(
142; CHECK-NEXT:    ret i1 undef
143;
144  %r = icmp slt i64 undef, undef
145  ret i1 %r
146}
147
148define i1 @test15() {
149; CHECK-LABEL: @test15(
150; CHECK-NEXT:    ret i1 undef
151;
152  %r = icmp ult i64 undef, undef
153  ret i1 %r
154}
155
156define i64 @test16(i64 %a) {
157; CHECK-LABEL: @test16(
158; CHECK-NEXT:    ret i64 undef
159;
160  %r = select i1 undef, i64 %a, i64 undef
161  ret i64 %r
162}
163
164define i64 @test17(i64 %a) {
165; CHECK-LABEL: @test17(
166; CHECK-NEXT:    ret i64 undef
167;
168  %r = select i1 undef, i64 undef, i64 %a
169  ret i64 %r
170}
171
172define i64 @test18(i64 %a) {
173; CHECK-LABEL: @test18(
174; CHECK-NEXT:    [[R:%.*]] = call i64 undef(i64 [[A:%.*]])
175; CHECK-NEXT:    ret i64 poison
176;
177  %r = call i64 (i64) undef(i64 %a)
178  ret i64 %r
179}
180
181define <4 x i8> @test19(<4 x i8> %a) {
182; CHECK-LABEL: @test19(
183; CHECK-NEXT:    ret <4 x i8> poison
184;
185  %b = shl <4 x i8> %a, <i8 8, i8 9, i8 undef, i8 -1>
186  ret <4 x i8> %b
187}
188
189define i32 @test20(i32 %a) {
190; CHECK-LABEL: @test20(
191; CHECK-NEXT:    ret i32 poison
192;
193  %b = udiv i32 %a, 0
194  ret i32 %b
195}
196
197define <2 x i32> @test20vec(<2 x i32> %a) {
198; CHECK-LABEL: @test20vec(
199; CHECK-NEXT:    ret <2 x i32> poison
200;
201  %b = udiv <2 x i32> %a, zeroinitializer
202  ret <2 x i32> %b
203}
204
205define i32 @test21(i32 %a) {
206; CHECK-LABEL: @test21(
207; CHECK-NEXT:    ret i32 poison
208;
209  %b = sdiv i32 %a, 0
210  ret i32 %b
211}
212
213define <2 x i32> @test21vec(<2 x i32> %a) {
214; CHECK-LABEL: @test21vec(
215; CHECK-NEXT:    ret <2 x i32> poison
216;
217  %b = sdiv <2 x i32> %a, zeroinitializer
218  ret <2 x i32> %b
219}
220
221define i32 @test22(i32 %a) {
222; CHECK-LABEL: @test22(
223; CHECK-NEXT:    ret i32 undef
224;
225  %b = ashr exact i32 undef, %a
226  ret i32 %b
227}
228
229define i32 @test23(i32 %a) {
230; CHECK-LABEL: @test23(
231; CHECK-NEXT:    ret i32 undef
232;
233  %b = lshr exact i32 undef, %a
234  ret i32 %b
235}
236
237define i32 @test24() {
238; CHECK-LABEL: @test24(
239; CHECK-NEXT:    ret i32 poison
240;
241  %b = udiv i32 undef, 0
242  ret i32 %b
243}
244
245define i32 @test25() {
246; CHECK-LABEL: @test25(
247; CHECK-NEXT:    ret i32 poison
248;
249  %b = lshr i32 0, undef
250  ret i32 %b
251}
252
253define i32 @test26() {
254; CHECK-LABEL: @test26(
255; CHECK-NEXT:    ret i32 poison
256;
257  %b = ashr i32 0, undef
258  ret i32 %b
259}
260
261define i32 @test27() {
262; CHECK-LABEL: @test27(
263; CHECK-NEXT:    ret i32 poison
264;
265  %b = shl i32 0, undef
266  ret i32 %b
267}
268
269define i32 @test28(i32 %a) {
270; CHECK-LABEL: @test28(
271; CHECK-NEXT:    ret i32 undef
272;
273  %b = shl nsw i32 undef, %a
274  ret i32 %b
275}
276
277define i32 @test29(i32 %a) {
278; CHECK-LABEL: @test29(
279; CHECK-NEXT:    ret i32 undef
280;
281  %b = shl nuw i32 undef, %a
282  ret i32 %b
283}
284
285define i32 @test30(i32 %a) {
286; CHECK-LABEL: @test30(
287; CHECK-NEXT:    ret i32 undef
288;
289  %b = shl nsw nuw i32 undef, %a
290  ret i32 %b
291}
292
293define i32 @test31(i32 %a) {
294; CHECK-LABEL: @test31(
295; CHECK-NEXT:    ret i32 0
296;
297  %b = shl i32 undef, %a
298  ret i32 %b
299}
300
301define i32 @test32(i32 %a) {
302; CHECK-LABEL: @test32(
303; CHECK-NEXT:    ret i32 undef
304;
305  %b = shl i32 undef, 0
306  ret i32 %b
307}
308
309define i32 @test33(i32 %a) {
310; CHECK-LABEL: @test33(
311; CHECK-NEXT:    ret i32 undef
312;
313  %b = ashr i32 undef, 0
314  ret i32 %b
315}
316
317define i32 @test34(i32 %a) {
318; CHECK-LABEL: @test34(
319; CHECK-NEXT:    ret i32 undef
320;
321  %b = lshr i32 undef, 0
322  ret i32 %b
323}
324
325define i32 @test35(<4 x i32> %V) {
326; CHECK-LABEL: @test35(
327; CHECK-NEXT:    ret i32 poison
328;
329  %b = extractelement <4 x i32> %V, i32 4
330  ret i32 %b
331}
332
333define i32 @test36(i32 %V) {
334; CHECK-LABEL: @test36(
335; CHECK-NEXT:    ret i32 undef
336;
337  %b = extractelement <4 x i32> undef, i32 %V
338  ret i32 %b
339}
340
341define i32 @test37() {
342; CHECK-LABEL: @test37(
343; CHECK-NEXT:    ret i32 poison
344;
345  %b = udiv i32 undef, undef
346  ret i32 %b
347}
348
349define i32 @test38(i32 %a) {
350; CHECK-LABEL: @test38(
351; CHECK-NEXT:    ret i32 poison
352;
353  %b = udiv i32 %a, undef
354  ret i32 %b
355}
356
357define i32 @test39() {
358; CHECK-LABEL: @test39(
359; CHECK-NEXT:    ret i32 poison
360;
361  %b = udiv i32 0, undef
362  ret i32 %b
363}
364