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