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