1 ; RUN: opt -S -instcombine < %s | FileCheck %s
3 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_0_uitofp(
4 ; CHECK-NEXT: icmp eq i32 %i, 0
6 define i1 @i32_cast_cmp_oeq_int_0_uitofp(i32 %i) {
7 %f = uitofp i32 %i to float
8 %cmp = fcmp oeq float %f, 0.0
12 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_n0_uitofp(
15 define i1 @i32_cast_cmp_oeq_int_n0_uitofp(i32 %i) {
16 %f = uitofp i32 %i to float
17 %cmp = fcmp oeq float %f, -0.0
21 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_0_sitofp(
22 ; CHECK-NEXT: icmp eq i32 %i, 0
24 define i1 @i32_cast_cmp_oeq_int_0_sitofp(i32 %i) {
25 %f = sitofp i32 %i to float
26 %cmp = fcmp oeq float %f, 0.0
30 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_n0_sitofp(
33 define i1 @i32_cast_cmp_oeq_int_n0_sitofp(i32 %i) {
34 %f = sitofp i32 %i to float
35 %cmp = fcmp oeq float %f, -0.0
39 ; CHECK-LABEL: @i32_cast_cmp_one_int_0_uitofp(
40 ; CHECK-NEXT: icmp ne i32 %i, 0
42 define i1 @i32_cast_cmp_one_int_0_uitofp(i32 %i) {
43 %f = uitofp i32 %i to float
44 %cmp = fcmp one float %f, 0.0
48 ; CHECK-LABEL: @i32_cast_cmp_one_int_n0_uitofp(
51 define i1 @i32_cast_cmp_one_int_n0_uitofp(i32 %i) {
52 %f = uitofp i32 %i to float
53 %cmp = fcmp one float %f, -0.0
57 ; CHECK-LABEL: @i32_cast_cmp_one_int_0_sitofp(
58 ; CHECK-NEXT: icmp ne i32 %i, 0
60 define i1 @i32_cast_cmp_one_int_0_sitofp(i32 %i) {
61 %f = sitofp i32 %i to float
62 %cmp = fcmp one float %f, 0.0
66 ; CHECK-LABEL: @i32_cast_cmp_one_int_n0_sitofp(
69 define i1 @i32_cast_cmp_one_int_n0_sitofp(i32 %i) {
70 %f = sitofp i32 %i to float
71 %cmp = fcmp one float %f, -0.0
75 ; CHECK-LABEL: @i32_cast_cmp_ueq_int_0_uitofp(
76 ; CHECK-NEXT: icmp eq i32 %i, 0
78 define i1 @i32_cast_cmp_ueq_int_0_uitofp(i32 %i) {
79 %f = uitofp i32 %i to float
80 %cmp = fcmp ueq float %f, 0.0
84 ; CHECK-LABEL: @i32_cast_cmp_ueq_int_n0_uitofp(
87 define i1 @i32_cast_cmp_ueq_int_n0_uitofp(i32 %i) {
88 %f = uitofp i32 %i to float
89 %cmp = fcmp ueq float %f, -0.0
93 ; CHECK-LABEL: @i32_cast_cmp_ueq_int_0_sitofp(
94 ; CHECK-NEXT: icmp eq i32 %i, 0
96 define i1 @i32_cast_cmp_ueq_int_0_sitofp(i32 %i) {
97 %f = sitofp i32 %i to float
98 %cmp = fcmp ueq float %f, 0.0
102 ; CHECK-LABEL: @i32_cast_cmp_ueq_int_n0_sitofp(
105 define i1 @i32_cast_cmp_ueq_int_n0_sitofp(i32 %i) {
106 %f = sitofp i32 %i to float
107 %cmp = fcmp ueq float %f, -0.0
111 ; CHECK-LABEL: @i32_cast_cmp_une_int_0_uitofp(
112 ; CHECK-NEXT: icmp ne i32 %i, 0
114 define i1 @i32_cast_cmp_une_int_0_uitofp(i32 %i) {
115 %f = uitofp i32 %i to float
116 %cmp = fcmp une float %f, 0.0
120 ; CHECK-LABEL: @i32_cast_cmp_une_int_n0_uitofp(
123 define i1 @i32_cast_cmp_une_int_n0_uitofp(i32 %i) {
124 %f = uitofp i32 %i to float
125 %cmp = fcmp une float %f, -0.0
129 ; CHECK-LABEL: @i32_cast_cmp_une_int_0_sitofp(
130 ; CHECK-NEXT: icmp ne i32 %i, 0
132 define i1 @i32_cast_cmp_une_int_0_sitofp(i32 %i) {
133 %f = sitofp i32 %i to float
134 %cmp = fcmp une float %f, 0.0
138 ; CHECK-LABEL: @i32_cast_cmp_une_int_n0_sitofp(
141 define i1 @i32_cast_cmp_une_int_n0_sitofp(i32 %i) {
142 %f = sitofp i32 %i to float
143 %cmp = fcmp une float %f, -0.0
147 ; CHECK-LABEL: @i32_cast_cmp_ogt_int_0_uitofp(
148 ; CHECK: icmp ne i32 %i, 0
150 define i1 @i32_cast_cmp_ogt_int_0_uitofp(i32 %i) {
151 %f = uitofp i32 %i to float
152 %cmp = fcmp ogt float %f, 0.0
156 ; CHECK-LABEL: @i32_cast_cmp_ogt_int_n0_uitofp(
159 define i1 @i32_cast_cmp_ogt_int_n0_uitofp(i32 %i) {
160 %f = uitofp i32 %i to float
161 %cmp = fcmp ogt float %f, -0.0
165 ; CHECK-LABEL: @i32_cast_cmp_ogt_int_0_sitofp(
166 ; CHECK: icmp sgt i32 %i, 0
168 define i1 @i32_cast_cmp_ogt_int_0_sitofp(i32 %i) {
169 %f = sitofp i32 %i to float
170 %cmp = fcmp ogt float %f, 0.0
174 ; CHECK-LABEL: @i32_cast_cmp_ogt_int_n0_sitofp(
177 define i1 @i32_cast_cmp_ogt_int_n0_sitofp(i32 %i) {
178 %f = sitofp i32 %i to float
179 %cmp = fcmp ogt float %f, -0.0
183 ; CHECK-LABEL: @i32_cast_cmp_ole_int_0_uitofp(
184 ; CHECK: icmp eq i32 %i, 0
186 define i1 @i32_cast_cmp_ole_int_0_uitofp(i32 %i) {
187 %f = uitofp i32 %i to float
188 %cmp = fcmp ole float %f, 0.0
192 ; CHECK-LABEL: @i32_cast_cmp_ole_int_0_sitofp(
193 ; CHECK: icmp slt i32 %i, 1
195 define i1 @i32_cast_cmp_ole_int_0_sitofp(i32 %i) {
196 %f = sitofp i32 %i to float
197 %cmp = fcmp ole float %f, 0.0
201 ; CHECK-LABEL: @i32_cast_cmp_olt_int_0_uitofp(
202 ; CHECK: ret i1 false
203 define i1 @i32_cast_cmp_olt_int_0_uitofp(i32 %i) {
204 %f = uitofp i32 %i to float
205 %cmp = fcmp olt float %f, 0.0
209 ; CHECK-LABEL: @i32_cast_cmp_olt_int_0_sitofp(
210 ; CHECK: icmp slt i32 %i, 0
212 define i1 @i32_cast_cmp_olt_int_0_sitofp(i32 %i) {
213 %f = sitofp i32 %i to float
214 %cmp = fcmp olt float %f, 0.0
218 ; CHECK-LABEL: @i64_cast_cmp_oeq_int_0_uitofp(
219 ; CHECK-NEXT: icmp eq i64 %i, 0
221 define i1 @i64_cast_cmp_oeq_int_0_uitofp(i64 %i) {
222 %f = uitofp i64 %i to float
223 %cmp = fcmp oeq float %f, 0.0
227 ; CHECK-LABEL: @i64_cast_cmp_oeq_int_0_sitofp(
228 ; CHECK-NEXT: icmp eq i64 %i, 0
230 define i1 @i64_cast_cmp_oeq_int_0_sitofp(i64 %i) {
231 %f = sitofp i64 %i to float
232 %cmp = fcmp oeq float %f, 0.0
236 ; CHECK-LABEL: @i64_cast_cmp_oeq_int_0_uitofp_half(
237 ; CHECK-NEXT: icmp eq i64 %i, 0
239 define i1 @i64_cast_cmp_oeq_int_0_uitofp_half(i64 %i) {
240 %f = uitofp i64 %i to half
241 %cmp = fcmp oeq half %f, 0.0
245 ; CHECK-LABEL: @i64_cast_cmp_oeq_int_0_sitofp_half(
246 ; CHECK-NEXT: icmp eq i64 %i, 0
248 define i1 @i64_cast_cmp_oeq_int_0_sitofp_half(i64 %i) {
249 %f = sitofp i64 %i to half
250 %cmp = fcmp oeq half %f, 0.0
254 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_0_uitofp_ppcf128(
258 define i1 @i32_cast_cmp_oeq_int_0_uitofp_ppcf128(i32 %i) {
259 %f = uitofp i32 %i to ppc_fp128
260 %cmp = fcmp oeq ppc_fp128 %f, 0xM00000000000000000000000000000000
264 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i24max_uitofp(
268 ; XCHECK: icmp eq i32 %i, 16777215
270 define i1 @i32_cast_cmp_oeq_int_i24max_uitofp(i32 %i) {
271 %f = uitofp i32 %i to float
272 %cmp = fcmp oeq float %f, 0x416FFFFFE0000000
276 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i24max_sitofp(
280 ; XCHECK: icmp eq i32 %i, 16777215
282 define i1 @i32_cast_cmp_oeq_int_i24max_sitofp(i32 %i) {
283 %f = sitofp i32 %i to float
284 %cmp = fcmp oeq float %f, 0x416FFFFFE0000000
288 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i24maxp1_uitofp(
292 ; XCHECK: icmp eq i32 %i, 16777216
294 define i1 @i32_cast_cmp_oeq_int_i24maxp1_uitofp(i32 %i) {
295 %f = uitofp i32 %i to float
296 %cmp = fcmp oeq float %f, 0x4170000000000000
300 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i24maxp1_sitofp(
304 ; XCHECK: icmp eq i32 %i, 16777216
306 define i1 @i32_cast_cmp_oeq_int_i24maxp1_sitofp(i32 %i) {
307 %f = sitofp i32 %i to float
308 %cmp = fcmp oeq float %f, 0x4170000000000000
312 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32umax_uitofp(
316 define i1 @i32_cast_cmp_oeq_int_i32umax_uitofp(i32 %i) {
317 %f = uitofp i32 %i to float
318 %cmp = fcmp oeq float %f, 0x41F0000000000000
322 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32umax_sitofp(
326 define i1 @i32_cast_cmp_oeq_int_i32umax_sitofp(i32 %i) {
327 %f = sitofp i32 %i to float
328 %cmp = fcmp oeq float %f, 0x41F0000000000000
332 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32imin_uitofp(
336 define i1 @i32_cast_cmp_oeq_int_i32imin_uitofp(i32 %i) {
337 %f = uitofp i32 %i to float
338 %cmp = fcmp oeq float %f, 0xC1E0000000000000
342 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32imin_sitofp(
346 define i1 @i32_cast_cmp_oeq_int_i32imin_sitofp(i32 %i) {
347 %f = sitofp i32 %i to float
348 %cmp = fcmp oeq float %f, 0xC1E0000000000000
352 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32imax_uitofp(
356 define i1 @i32_cast_cmp_oeq_int_i32imax_uitofp(i32 %i) {
357 %f = uitofp i32 %i to float
358 %cmp = fcmp oeq float %f, 0x41E0000000000000
362 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_i32imax_sitofp(
366 define i1 @i32_cast_cmp_oeq_int_i32imax_sitofp(i32 %i) {
367 %f = sitofp i32 %i to float
368 %cmp = fcmp oeq float %f, 0x41E0000000000000
372 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_negi32umax_uitofp(
376 define i1 @i32_cast_cmp_oeq_int_negi32umax_uitofp(i32 %i) {
377 %f = uitofp i32 %i to float
378 %cmp = fcmp oeq float %f, 0xC1F0000000000000
382 ; CHECK-LABEL: @i32_cast_cmp_oeq_int_negi32umax_sitofp(
386 define i1 @i32_cast_cmp_oeq_int_negi32umax_sitofp(i32 %i) {
387 %f = sitofp i32 %i to float
388 %cmp = fcmp oeq float %f, 0xC1F0000000000000
392 ; CHECK-LABEL: @i32_cast_cmp_oeq_half_uitofp(
393 ; CHECK: ret i1 false
394 define i1 @i32_cast_cmp_oeq_half_uitofp(i32 %i) {
395 %f = uitofp i32 %i to float
396 %cmp = fcmp oeq float %f, 0.5
400 ; CHECK-LABEL: @i32_cast_cmp_oeq_half_sitofp(
401 ; CHECK: ret i1 false
402 define i1 @i32_cast_cmp_oeq_half_sitofp(i32 %i) {
403 %f = sitofp i32 %i to float
404 %cmp = fcmp oeq float %f, 0.5
408 ; CHECK-LABEL: @i32_cast_cmp_one_half_uitofp(
410 define i1 @i32_cast_cmp_one_half_uitofp(i32 %i) {
411 %f = uitofp i32 %i to float
412 %cmp = fcmp one float %f, 0.5
416 ; CHECK-LABEL: @i32_cast_cmp_one_half_sitofp(
418 define i1 @i32_cast_cmp_one_half_sitofp(i32 %i) {
419 %f = sitofp i32 %i to float
420 %cmp = fcmp one float %f, 0.5
424 ; CHECK-LABEL: @i32_cast_cmp_ueq_half_uitofp(
425 ; CHECK: ret i1 false
426 define i1 @i32_cast_cmp_ueq_half_uitofp(i32 %i) {
427 %f = uitofp i32 %i to float
428 %cmp = fcmp ueq float %f, 0.5
432 ; CHECK-LABEL: @i32_cast_cmp_ueq_half_sitofp(
433 ; CHECK: ret i1 false
434 define i1 @i32_cast_cmp_ueq_half_sitofp(i32 %i) {
435 %f = sitofp i32 %i to float
436 %cmp = fcmp ueq float %f, 0.5
440 ; CHECK-LABEL: @i32_cast_cmp_une_half_uitofp(
442 define i1 @i32_cast_cmp_une_half_uitofp(i32 %i) {
443 %f = uitofp i32 %i to float
444 %cmp = fcmp une float %f, 0.5
448 ; CHECK-LABEL: @i32_cast_cmp_une_half_sitofp(
450 define i1 @i32_cast_cmp_une_half_sitofp(i32 %i) {
451 %f = sitofp i32 %i to float
452 %cmp = fcmp une float %f, 0.5