1 ; RUN: opt -instsimplify -S < %s | FileCheck %s
3 ; @test0
4 ; CHECK: ret i64 undef
5 define i64 @test0() {
6 %r = mul i64 undef, undef
7 ret i64 %r
8 }
10 ; @test1
11 ; CHECK: ret i64 undef
12 define i64 @test1() {
13 %r = mul i64 3, undef
14 ret i64 %r
15 }
17 ; @test2
18 ; CHECK: ret i64 undef
19 define i64 @test2() {
20 %r = mul i64 undef, 3
21 ret i64 %r
22 }
24 ; @test3
25 ; CHECK: ret i64 0
26 define i64 @test3() {
27 %r = mul i64 undef, 6
28 ret i64 %r
29 }
31 ; @test4
32 ; CHECK: ret i64 0
33 define i64 @test4() {
34 %r = mul i64 6, undef
35 ret i64 %r
36 }
38 ; @test5
39 ; CHECK: ret i64 undef
40 define i64 @test5() {
41 %r = and i64 undef, undef
42 ret i64 %r
43 }
45 ; @test6
46 ; CHECK: ret i64 undef
47 define i64 @test6() {
48 %r = or i64 undef, undef
49 ret i64 %r
50 }
52 ; @test7
53 ; CHECK: ret i64 undef
54 define i64 @test7() {
55 %r = udiv i64 undef, 1
56 ret i64 %r
57 }
59 ; @test8
60 ; CHECK: ret i64 undef
61 define i64 @test8() {
62 %r = sdiv i64 undef, 1
63 ret i64 %r
64 }
66 ; @test9
67 ; CHECK: ret i64 0
68 define i64 @test9() {
69 %r = urem i64 undef, 1
70 ret i64 %r
71 }
73 ; @test10
74 ; CHECK: ret i64 0
75 define i64 @test10() {
76 %r = srem i64 undef, 1
77 ret i64 %r
78 }
80 ; @test11
81 ; CHECK: ret i64 undef
82 define i64 @test11() {
83 %r = shl i64 undef, undef
84 ret i64 %r
85 }
87 ; @test11b
88 ; CHECK: ret i64 undef
89 define i64 @test11b(i64 %a) {
90 %r = shl i64 %a, undef
91 ret i64 %r
92 }
94 ; @test12
95 ; CHECK: ret i64 undef
96 define i64 @test12() {
97 %r = ashr i64 undef, undef
98 ret i64 %r
99 }
101 ; @test12b
102 ; CHECK: ret i64 undef
103 define i64 @test12b(i64 %a) {
104 %r = ashr i64 %a, undef
105 ret i64 %r
106 }
108 ; @test13
109 ; CHECK: ret i64 undef
110 define i64 @test13() {
111 %r = lshr i64 undef, undef
112 ret i64 %r
113 }
115 ; @test13b
116 ; CHECK: ret i64 undef
117 define i64 @test13b(i64 %a) {
118 %r = lshr i64 %a, undef
119 ret i64 %r
120 }
122 ; @test14
123 ; CHECK: ret i1 undef
124 define i1 @test14() {
125 %r = icmp slt i64 undef, undef
126 ret i1 %r
127 }
129 ; @test15
130 ; CHECK: ret i1 undef
131 define i1 @test15() {
132 %r = icmp ult i64 undef, undef
133 ret i1 %r
134 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
192 ; CHECK-LABEL: @test24
193 ; CHECK: ret i32 undef
194 define i32 @test24() {
195 %b = udiv i32 undef, 0
196 ret i32 %b
197 }
199 ; CHECK-LABEL: @test25
200 ; CHECK: ret i32 undef
201 define i32 @test25() {
202 %b = lshr i32 0, undef
203 ret i32 %b
204 }
206 ; CHECK-LABEL: @test26
207 ; CHECK: ret i32 undef
208 define i32 @test26() {
209 %b = ashr i32 0, undef
210 ret i32 %b
211 }
213 ; CHECK-LABEL: @test27
214 ; CHECK: ret i32 undef
215 define i32 @test27() {
216 %b = shl i32 0, undef
217 ret i32 %b
218 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }