Lines Matching +full:0 +full:x64

3 ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s -check-prefixes=X64,X64-GENERIC
4 ; RUN: llc < %s -mtriple=x86_64-linux -mattr=+ndd | FileCheck %s -check-prefixes=X64,X64-NDD
8 ; X86: # %bb.0: # %entry
9 ; X86-NEXT: flds {{[0-9]+}}(%esp)
10 ; X86-NEXT: fucomp %st(0)
17 ; X64-LABEL: isnan_f:
18 ; X64: # %bb.0: # %entry
19 ; X64-NEXT: ucomiss %xmm0, %xmm0
20 ; X64-NEXT: setp %al
21 ; X64-NEXT: retq
23 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; "nan"
24 ret i1 %0
29 ; X86: # %bb.0: # %entry
30 ; X86-NEXT: flds {{[0-9]+}}(%esp)
31 ; X86-NEXT: fucomp %st(0)
38 ; X64-LABEL: isnot_nan_f:
39 ; X64: # %bb.0: # %entry
40 ; X64-NEXT: ucomiss %xmm0, %xmm0
41 ; X64-NEXT: setnp %al
42 ; X64-NEXT: retq
44 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1020) ; 0x3fc = "zero|subnormal|normal|inf"
45 ret i1 %0
50 ; X86: # %bb.0: # %entry
51 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
52 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
53 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
55 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
60 ; X64-LABEL: issignaling_f:
61 ; X64: # %bb.0: # %entry
62 ; X64-NEXT: movd %xmm0, %eax
63 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
64 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
65 ; X64-NEXT: setl %cl
66 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
67 ; X64-NEXT: setge %al
68 ; X64-NEXT: andb %cl, %al
69 ; X64-NEXT: retq
71 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1) ; "snan"
72 ret i1 %0
77 ; X86: # %bb.0: # %entry
78 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
79 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
80 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
82 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
87 ; X64-LABEL: not_issignaling_f:
88 ; X64: # %bb.0: # %entry
89 ; X64-NEXT: movd %xmm0, %eax
90 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
91 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
92 ; X64-NEXT: setge %cl
93 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
94 ; X64-NEXT: setl %al
95 ; X64-NEXT: orb %cl, %al
96 ; X64-NEXT: retq
98 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1022) ; ~"snan"
99 ret i1 %0
104 ; X86: # %bb.0: # %entry
105 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
106 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
107 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
111 ; X64-LABEL: isquiet_f:
112 ; X64: # %bb.0: # %entry
113 ; X64-NEXT: movd %xmm0, %eax
114 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
115 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
116 ; X64-NEXT: setge %al
117 ; X64-NEXT: retq
119 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 2) ; "qnan"
120 ret i1 %0
125 ; X86: # %bb.0: # %entry
126 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
127 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
128 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
132 ; X64-LABEL: not_isquiet_f:
133 ; X64: # %bb.0: # %entry
134 ; X64-NEXT: movd %xmm0, %eax
135 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
136 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
137 ; X64-NEXT: setl %al
138 ; X64-NEXT: retq
140 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1021) ; ~"qnan"
141 ret i1 %0
146 ; X86: # %bb.0: # %entry
147 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
148 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
149 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
153 ; X64-LABEL: isinf_f:
154 ; X64: # %bb.0: # %entry
155 ; X64-NEXT: movd %xmm0, %eax
156 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
157 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
158 ; X64-NEXT: sete %al
159 ; X64-NEXT: retq
161 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; 0x204 = "inf"
162 ret i1 %0
167 ; X86: # %bb.0: # %entry
168 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
169 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
170 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
174 ; X64-LABEL: not_isinf_f:
175 ; X64: # %bb.0: # %entry
176 ; X64-NEXT: movd %xmm0, %eax
177 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
178 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
179 ; X64-NEXT: setne %al
180 ; X64-NEXT: retq
182 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; ~0x204 = "~inf"
183 ret i1 %0
188 ; X86: # %bb.0: # %entry
189 ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
193 ; X64-LABEL: is_plus_inf_f:
194 ; X64: # %bb.0: # %entry
195 ; X64-NEXT: movd %xmm0, %eax
196 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
197 ; X64-NEXT: sete %al
198 ; X64-NEXT: retq
200 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 512) ; 0x200 = "+inf"
201 ret i1 %0
206 ; X86: # %bb.0: # %entry
207 ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
211 ; X64-LABEL: is_minus_inf_f:
212 ; X64: # %bb.0: # %entry
213 ; X64-NEXT: movd %xmm0, %eax
214 ; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
215 ; X64-NEXT: sete %al
216 ; X64-NEXT: retq
218 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 4) ; "-inf"
219 ret i1 %0
224 ; X86: # %bb.0: # %entry
225 ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
229 ; X64-LABEL: not_is_minus_inf_f:
230 ; X64: # %bb.0: # %entry
231 ; X64-NEXT: movd %xmm0, %eax
232 ; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
233 ; X64-NEXT: setne %al
234 ; X64-NEXT: retq
236 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1019) ; ~"-inf"
237 ret i1 %0
242 ; X86: # %bb.0: # %entry
243 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
244 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
245 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
249 ; X64-LABEL: isfinite_f:
250 ; X64: # %bb.0: # %entry
251 ; X64-NEXT: movd %xmm0, %eax
252 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
253 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
254 ; X64-NEXT: setl %al
255 ; X64-NEXT: retq
257 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; 0x1f8 = "finite"
258 ret i1 %0
263 ; X86: # %bb.0: # %entry
264 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
265 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
266 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
270 ; X64-LABEL: not_isfinite_f:
271 ; X64: # %bb.0: # %entry
272 ; X64-NEXT: movd %xmm0, %eax
273 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
274 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
275 ; X64-NEXT: setge %al
276 ; X64-NEXT: retq
278 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; ~0x1f8 = "~finite"
279 ret i1 %0
284 ; X86: # %bb.0: # %entry
285 ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
289 ; X64-LABEL: is_plus_finite_f:
290 ; X64: # %bb.0: # %entry
291 ; X64-NEXT: movd %xmm0, %eax
292 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
293 ; X64-NEXT: setb %al
294 ; X64-NEXT: retq
296 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 448) ; 0x1c0 = "+finite"
297 ret i1 %0
302 ; X86: # %bb.0: # %entry
303 ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
307 ; X64-LABEL: not_is_plus_finite_f:
308 ; X64: # %bb.0: # %entry
309 ; X64-NEXT: movd %xmm0, %eax
310 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
311 ; X64-NEXT: setae %al
312 ; X64-NEXT: retq
314 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 575) ; ~0x1c0 = ~"+finite"
315 ret i1 %0
320 ; X86: # %bb.0: # %entry
321 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
324 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
325 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
330 ; X64-LABEL: is_minus_finite_f:
331 ; X64: # %bb.0: # %entry
332 ; X64-NEXT: movd %xmm0, %eax
333 ; X64-NEXT: testl %eax, %eax
334 ; X64-NEXT: sets %cl
335 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
336 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
337 ; X64-NEXT: setl %al
338 ; X64-NEXT: andb %cl, %al
339 ; X64-NEXT: retq
341 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 56) ; 0x38 = "-finite"
342 ret i1 %0
347 ; X86: # %bb.0: # %entry
348 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
351 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
352 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
357 ; X64-LABEL: not_is_minus_finite_f:
358 ; X64: # %bb.0: # %entry
359 ; X64-NEXT: movd %xmm0, %eax
360 ; X64-NEXT: testl %eax, %eax
361 ; X64-NEXT: setns %cl
362 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
363 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
364 ; X64-NEXT: setge %al
365 ; X64-NEXT: orb %cl, %al
366 ; X64-NEXT: retq
368 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 967) ; ~0x38 = ~"-finite"
369 ret i1 %0
374 ; X86: # %bb.0: # %entry
375 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
376 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
377 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
378 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
382 ; X64-LABEL: isnormal_f:
383 ; X64: # %bb.0: # %entry
384 ; X64-NEXT: movd %xmm0, %eax
385 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
386 ; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000
387 ; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
388 ; X64-NEXT: setb %al
389 ; X64-NEXT: retq
391 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 264) ; 0x108 = "normal"
392 ret i1 %0
397 ; X86: # %bb.0: # %entry
398 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
399 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
400 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
401 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
405 ; X64-LABEL: not_isnormal_f:
406 ; X64: # %bb.0: # %entry
407 ; X64-NEXT: movd %xmm0, %eax
408 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
409 ; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000
410 ; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
411 ; X64-NEXT: setae %al
412 ; X64-NEXT: retq
414 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 759) ; ~0x108 = "~normal"
415 ret i1 %0
420 ; X86: # %bb.0: # %entry
421 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
424 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
425 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
426 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
431 ; X64-LABEL: is_plus_normal_f:
432 ; X64: # %bb.0: # %entry
433 ; X64-NEXT: movd %xmm0, %eax
434 ; X64-NEXT: testl %eax, %eax
435 ; X64-NEXT: setns %cl
436 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
437 ; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000
438 ; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
439 ; X64-NEXT: setb %al
440 ; X64-NEXT: andb %cl, %al
441 ; X64-NEXT: retq
443 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 256) ; 0x100 = "+normal"
444 ret i1 %0
449 ; X86: # %bb.0: # %entry
450 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
451 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
453 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
457 ; X64-LABEL: issubnormal_f:
458 ; X64: # %bb.0: # %entry
459 ; X64-NEXT: movd %xmm0, %eax
460 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
461 ; X64-NEXT: decl %eax
462 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
463 ; X64-NEXT: setb %al
464 ; X64-NEXT: retq
466 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"
467 ret i1 %0
470 define i1 @issubnormal_f_daz(float %x) #0 {
472 ; X86: # %bb.0: # %entry
473 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
474 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
476 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
480 ; X64-LABEL: issubnormal_f_daz:
481 ; X64: # %bb.0: # %entry
482 ; X64-NEXT: movd %xmm0, %eax
483 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
484 ; X64-NEXT: decl %eax
485 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
486 ; X64-NEXT: setb %al
487 ; X64-NEXT: retq
489 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"
490 ret i1 %0
495 ; X86: # %bb.0: # %entry
496 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
497 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
499 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
503 ; X64-LABEL: issubnormal_f_maybe_daz:
504 ; X64: # %bb.0: # %entry
505 ; X64-NEXT: movd %xmm0, %eax
506 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
507 ; X64-NEXT: decl %eax
508 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
509 ; X64-NEXT: setb %al
510 ; X64-NEXT: retq
512 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"
513 ret i1 %0
518 ; X86: # %bb.0: # %entry
519 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
520 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
522 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
526 ; X64-LABEL: not_issubnormal_f:
527 ; X64: # %bb.0: # %entry
528 ; X64-NEXT: movd %xmm0, %eax
529 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
530 ; X64-NEXT: decl %eax
531 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
532 ; X64-NEXT: setae %al
533 ; X64-NEXT: retq
535 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"
536 ret i1 %0
539 define i1 @not_issubnormal_f_daz(float %x) #0 {
541 ; X86: # %bb.0: # %entry
542 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
543 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
545 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
549 ; X64-LABEL: not_issubnormal_f_daz:
550 ; X64: # %bb.0: # %entry
551 ; X64-NEXT: movd %xmm0, %eax
552 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
553 ; X64-NEXT: decl %eax
554 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
555 ; X64-NEXT: setae %al
556 ; X64-NEXT: retq
558 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"
559 ret i1 %0
564 ; X86: # %bb.0: # %entry
565 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
566 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
568 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
572 ; X64-LABEL: not_issubnormal_f_maybe_daz:
573 ; X64: # %bb.0: # %entry
574 ; X64-NEXT: movd %xmm0, %eax
575 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
576 ; X64-NEXT: decl %eax
577 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
578 ; X64-NEXT: setae %al
579 ; X64-NEXT: retq
581 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"
582 ret i1 %0
587 ; X86: # %bb.0: # %entry
588 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
590 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
594 ; X64-LABEL: is_plus_subnormal_f:
595 ; X64: # %bb.0: # %entry
596 ; X64-NEXT: movd %xmm0, %eax
597 ; X64-NEXT: decl %eax
598 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
599 ; X64-NEXT: setb %al
600 ; X64-NEXT: retq
602 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 128) ; 0x80 = "+subnormal"
603 ret i1 %0
608 ; X86: # %bb.0: # %entry
609 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
611 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
615 ; X64-LABEL: not_is_plus_subnormal_f:
616 ; X64: # %bb.0: # %entry
617 ; X64-NEXT: movd %xmm0, %eax
618 ; X64-NEXT: decl %eax
619 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
620 ; X64-NEXT: setae %al
621 ; X64-NEXT: retq
623 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 895) ; ~0x80 = ~"+subnormal"
624 ret i1 %0
629 ; X86: # %bb.0: # %entry
630 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
633 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
635 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
640 ; X64-LABEL: is_minus_subnormal_f:
641 ; X64: # %bb.0: # %entry
642 ; X64-NEXT: movd %xmm0, %eax
643 ; X64-NEXT: testl %eax, %eax
644 ; X64-NEXT: sets %cl
645 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
646 ; X64-NEXT: decl %eax
647 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
648 ; X64-NEXT: setb %al
649 ; X64-NEXT: andb %cl, %al
650 ; X64-NEXT: retq
652 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 16) ; 0x10 = "-subnormal"
653 ret i1 %0
658 ; X86: # %bb.0: # %entry
659 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
662 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
664 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
669 ; X64-LABEL: not_is_minus_subnormal_f:
670 ; X64: # %bb.0: # %entry
671 ; X64-NEXT: movd %xmm0, %eax
672 ; X64-NEXT: testl %eax, %eax
673 ; X64-NEXT: setns %cl
674 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
675 ; X64-NEXT: decl %eax
676 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
677 ; X64-NEXT: setae %al
678 ; X64-NEXT: orb %cl, %al
679 ; X64-NEXT: retq
681 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1007) ; ~0x10 = ~"-subnormal"
682 ret i1 %0
687 ; X86: # %bb.0: # %entry
688 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
692 ; X64-LABEL: iszero_f:
693 ; X64: # %bb.0: # %entry
694 ; X64-NEXT: movd %xmm0, %eax
695 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
696 ; X64-NEXT: sete %al
697 ; X64-NEXT: retq
699 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"
700 ret i1 %0
703 define i1 @iszero_f_daz(float %x) #0 {
705 ; X86: # %bb.0: # %entry
706 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
710 ; X64-LABEL: iszero_f_daz:
711 ; X64: # %bb.0: # %entry
712 ; X64-NEXT: movd %xmm0, %eax
713 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
714 ; X64-NEXT: sete %al
715 ; X64-NEXT: retq
717 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"
718 ret i1 %0
723 ; X86: # %bb.0: # %entry
724 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
728 ; X64-LABEL: iszero_f_maybe_daz:
729 ; X64: # %bb.0: # %entry
730 ; X64-NEXT: movd %xmm0, %eax
731 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
732 ; X64-NEXT: sete %al
733 ; X64-NEXT: retq
735 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"
736 ret i1 %0
741 ; X86: # %bb.0: # %entry
742 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
746 ; X64-LABEL: not_iszero_f:
747 ; X64: # %bb.0: # %entry
748 ; X64-NEXT: movd %xmm0, %eax
749 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
750 ; X64-NEXT: setne %al
751 ; X64-NEXT: retq
753 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"
754 ret i1 %0
757 define i1 @not_iszero_f_daz(float %x) #0 {
759 ; X86: # %bb.0: # %entry
760 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
764 ; X64-LABEL: not_iszero_f_daz:
765 ; X64: # %bb.0: # %entry
766 ; X64-NEXT: movd %xmm0, %eax
767 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
768 ; X64-NEXT: setne %al
769 ; X64-NEXT: retq
771 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"
772 ret i1 %0
777 ; X86: # %bb.0: # %entry
778 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
782 ; X64-LABEL: not_iszero_f_maybe_daz:
783 ; X64: # %bb.0: # %entry
784 ; X64-NEXT: movd %xmm0, %eax
785 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
786 ; X64-NEXT: setne %al
787 ; X64-NEXT: retq
789 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"
790 ret i1 %0
795 ; X86: # %bb.0: # %entry
796 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
800 ; X64-LABEL: issubnormal_or_zero_f:
801 ; X64: # %bb.0: # %entry
802 ; X64-NEXT: movd %xmm0, %eax
803 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
804 ; X64-NEXT: sete %al
805 ; X64-NEXT: retq
807 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"
808 ret i1 %0
811 define i1 @issubnormal_or_zero_f_daz(float %x) #0 {
813 ; X86: # %bb.0: # %entry
814 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
818 ; X64-LABEL: issubnormal_or_zero_f_daz:
819 ; X64: # %bb.0: # %entry
820 ; X64-NEXT: movd %xmm0, %eax
821 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
822 ; X64-NEXT: sete %al
823 ; X64-NEXT: retq
825 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"
826 ret i1 %0
831 ; X86: # %bb.0: # %entry
832 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
836 ; X64-LABEL: issubnormal_or_zero_f_maybe_daz:
837 ; X64: # %bb.0: # %entry
838 ; X64-NEXT: movd %xmm0, %eax
839 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
840 ; X64-NEXT: sete %al
841 ; X64-NEXT: retq
843 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"
844 ret i1 %0
849 ; X86: # %bb.0: # %entry
850 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
854 ; X64-LABEL: not_issubnormal_or_zero_f:
855 ; X64: # %bb.0: # %entry
856 ; X64-NEXT: movd %xmm0, %eax
857 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
858 ; X64-NEXT: setne %al
859 ; X64-NEXT: retq
861 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"
862 ret i1 %0
865 define i1 @not_issubnormal_or_zero_f_daz(float %x) #0 {
867 ; X86: # %bb.0: # %entry
868 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
872 ; X64-LABEL: not_issubnormal_or_zero_f_daz:
873 ; X64: # %bb.0: # %entry
874 ; X64-NEXT: movd %xmm0, %eax
875 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
876 ; X64-NEXT: setne %al
877 ; X64-NEXT: retq
879 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"
880 ret i1 %0
885 ; X86: # %bb.0: # %entry
886 ; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
890 ; X64-LABEL: not_issubnormal_or_zero_f_maybe_daz:
891 ; X64: # %bb.0: # %entry
892 ; X64-NEXT: movd %xmm0, %eax
893 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
894 ; X64-NEXT: setne %al
895 ; X64-NEXT: retq
897 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"
898 ret i1 %0
903 ; X86: # %bb.0: # %entry
904 ; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
908 ; X64-LABEL: is_plus_zero_f:
909 ; X64: # %bb.0: # %entry
910 ; X64-NEXT: movd %xmm0, %eax
911 ; X64-NEXT: testl %eax, %eax
912 ; X64-NEXT: sete %al
913 ; X64-NEXT: retq
915 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 64) ; 0x40 = "+zero"
916 ret i1 %0
921 ; X86: # %bb.0: # %entry
922 ; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
926 ; X64-LABEL: not_is_plus_zero_f:
927 ; X64: # %bb.0: # %entry
928 ; X64-NEXT: movd %xmm0, %eax
929 ; X64-NEXT: testl %eax, %eax
930 ; X64-NEXT: setne %al
931 ; X64-NEXT: retq
933 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 959) ; ~0x40 = ~"+zero"
934 ret i1 %0
939 ; X86: # %bb.0: # %entry
941 ; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax
945 ; X64-LABEL: is_minus_zero_f:
946 ; X64: # %bb.0: # %entry
947 ; X64-NEXT: movd %xmm0, %eax
948 ; X64-NEXT: negl %eax
949 ; X64-NEXT: seto %al
950 ; X64-NEXT: retq
952 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 32) ; 0x20 = "-zero"
953 ret i1 %0
958 ; X86: # %bb.0: # %entry
960 ; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax
964 ; X64-LABEL: not_is_minus_zero_f:
965 ; X64: # %bb.0: # %entry
966 ; X64-NEXT: movd %xmm0, %eax
967 ; X64-NEXT: negl %eax
968 ; X64-NEXT: setno %al
969 ; X64-NEXT: retq
971 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 991) ; ~0x20 = ~"-zero"
972 ret i1 %0
977 ; X86: # %bb.0: # %entry
978 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
979 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
980 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
984 ; X64-LABEL: isnan_f_strictfp:
985 ; X64: # %bb.0: # %entry
986 ; X64-NEXT: movd %xmm0, %eax
987 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
988 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
989 ; X64-NEXT: setge %al
990 ; X64-NEXT: retq
992 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) strictfp ; "nan"
993 ret i1 %0
998 ; X86: # %bb.0: # %entry
999 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1000 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1001 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1005 ; X64-LABEL: not_isnan_f_strictfp:
1006 ; X64: # %bb.0: # %entry
1007 ; X64-NEXT: movd %xmm0, %eax
1008 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1009 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1010 ; X64-NEXT: setl %al
1011 ; X64-NEXT: retq
1013 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1020) strictfp ; ~"nan"
1014 ret i1 %0
1019 ; X86: # %bb.0: # %entry
1020 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1021 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1022 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1026 ; X64-LABEL: isfinite_f_strictfp:
1027 ; X64: # %bb.0: # %entry
1028 ; X64-NEXT: movd %xmm0, %eax
1029 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1030 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1031 ; X64-NEXT: setl %al
1032 ; X64-NEXT: retq
1034 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) strictfp ; 0x1f8 = "finite"
1035 ret i1 %0
1040 ; X86: # %bb.0: # %entry
1041 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1042 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1043 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1047 ; X64-LABEL: not_isfinite_f_strictfp:
1048 ; X64: # %bb.0: # %entry
1049 ; X64-NEXT: movd %xmm0, %eax
1050 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1051 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1052 ; X64-NEXT: setge %al
1053 ; X64-NEXT: retq
1055 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) strictfp ; ~0x1f8 = ~"finite"
1056 ret i1 %0
1061 ; X86: # %bb.0: # %entry
1062 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
1066 ; X64-LABEL: iszero_f_strictfp:
1067 ; X64: # %bb.0: # %entry
1068 ; X64-NEXT: movd %xmm0, %eax
1069 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
1070 ; X64-NEXT: sete %al
1071 ; X64-NEXT: retq
1073 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) strictfp ; 0x60 = "zero"
1074 ret i1 %0
1079 ; X86: # %bb.0: # %entry
1080 ; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF
1084 ; X64-LABEL: not_iszero_f_strictfp:
1085 ; X64: # %bb.0: # %entry
1086 ; X64-NEXT: movd %xmm0, %eax
1087 ; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF
1088 ; X64-NEXT: setne %al
1089 ; X64-NEXT: retq
1091 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) strictfp ; ~0x60 = ~"zero"
1092 ret i1 %0
1097 ; X86: # %bb.0: # %entry
1098 ; X86-NEXT: fldl {{[0-9]+}}(%esp)
1099 ; X86-NEXT: fucomp %st(0)
1106 ; X64-LABEL: isnan_d:
1107 ; X64: # %bb.0: # %entry
1108 ; X64-NEXT: ucomisd %xmm0, %xmm0
1109 ; X64-NEXT: setp %al
1110 ; X64-NEXT: retq
1112 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 3) ; "nan"
1113 ret i1 %0
1118 ; X86: # %bb.0: # %entry
1119 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1120 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1121 ; X86-NEXT: xorl $2146435072, %eax # imm = 0x7FF00000
1122 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
1126 ; X64-GENERIC-LABEL: isinf_d:
1127 ; X64-GENERIC: # %bb.0: # %entry
1128 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1129 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1130 ; X64-GENERIC-NEXT: andq %rax, %rcx
1131 ; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF0000000000000
1132 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1133 ; X64-GENERIC-NEXT: sete %al
1134 ; X64-GENERIC-NEXT: retq
1136 ; X64-NDD-LABEL: isinf_d:
1137 ; X64-NDD: # %bb.0: # %entry
1138 ; X64-NDD-NEXT: movq %xmm0, %rax
1139 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1140 ; X64-NDD-NEXT: andq %rcx, %rax
1141 ; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF0000000000000
1142 ; X64-NDD-NEXT: cmpq %rcx, %rax
1143 ; X64-NDD-NEXT: sete %al
1144 ; X64-NDD-NEXT: retq
1146 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 516) ; 0x204 = "inf"
1147 ret i1 %0
1152 ; X86: # %bb.0: # %entry
1153 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1154 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1155 ; X86-NEXT: cmpl $2146435072, %eax # imm = 0x7FF00000
1159 ; X64-GENERIC-LABEL: isfinite_d:
1160 ; X64-GENERIC: # %bb.0: # %entry
1161 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1162 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1163 ; X64-GENERIC-NEXT: andq %rax, %rcx
1164 ; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF0000000000000
1165 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1166 ; X64-GENERIC-NEXT: setl %al
1167 ; X64-GENERIC-NEXT: retq
1169 ; X64-NDD-LABEL: isfinite_d:
1170 ; X64-NDD: # %bb.0: # %entry
1171 ; X64-NDD-NEXT: movq %xmm0, %rax
1172 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1173 ; X64-NDD-NEXT: andq %rcx, %rax
1174 ; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF0000000000000
1175 ; X64-NDD-NEXT: cmpq %rcx, %rax
1176 ; X64-NDD-NEXT: setl %al
1177 ; X64-NDD-NEXT: retq
1179 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 504) ; 0x1f8 = "finite"
1180 ret i1 %0
1185 ; X86: # %bb.0: # %entry
1186 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1187 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1188 ; X86-NEXT: addl $-1048576, %eax # imm = 0xFFF00000
1190 ; X86-NEXT: cmpl $1023, %eax # imm = 0x3FF
1194 ; X64-GENERIC-LABEL: isnormal_d:
1195 ; X64-GENERIC: # %bb.0: # %entry
1196 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1197 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1198 ; X64-GENERIC-NEXT: andq %rax, %rcx
1199 ; X64-GENERIC-NEXT: movabsq $-4503599627370496, %rax # imm = 0xFFF0000000000000
1200 ; X64-GENERIC-NEXT: addq %rcx, %rax
1201 ; X64-GENERIC-NEXT: shrq $53, %rax
1202 ; X64-GENERIC-NEXT: cmpl $1023, %eax # imm = 0x3FF
1203 ; X64-GENERIC-NEXT: setb %al
1204 ; X64-GENERIC-NEXT: retq
1206 ; X64-NDD-LABEL: isnormal_d:
1207 ; X64-NDD: # %bb.0: # %entry
1208 ; X64-NDD-NEXT: movq %xmm0, %rax
1209 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1210 ; X64-NDD-NEXT: andq %rcx, %rax
1211 ; X64-NDD-NEXT: movabsq $-4503599627370496, %rcx # imm = 0xFFF0000000000000
1212 ; X64-NDD-NEXT: addq %rcx, %rax
1213 ; X64-NDD-NEXT: shrq $53, %rax
1214 ; X64-NDD-NEXT: cmpl $1023, %eax # imm = 0x3FF
1215 ; X64-NDD-NEXT: setb %al
1216 ; X64-NDD-NEXT: retq
1218 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 264) ; 0x108 = "normal"
1219 ret i1 %0
1224 ; X86: # %bb.0: # %entry
1225 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1226 ; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF
1227 ; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx
1231 ; X86-NEXT: sbbl $1048575, %ecx # imm = 0xFFFFF
1235 ; X64-GENERIC-LABEL: issubnormal_d:
1236 ; X64-GENERIC: # %bb.0: # %entry
1237 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1238 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1239 ; X64-GENERIC-NEXT: andq %rax, %rcx
1240 ; X64-GENERIC-NEXT: decq %rcx
1241 ; X64-GENERIC-NEXT: movabsq $4503599627370495, %rax # imm = 0xFFFFFFFFFFFFF
1242 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1243 ; X64-GENERIC-NEXT: setb %al
1244 ; X64-GENERIC-NEXT: retq
1246 ; X64-NDD-LABEL: issubnormal_d:
1247 ; X64-NDD: # %bb.0: # %entry
1248 ; X64-NDD-NEXT: movq %xmm0, %rax
1249 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1250 ; X64-NDD-NEXT: andq %rcx, %rax
1251 ; X64-NDD-NEXT: decq %rax
1252 ; X64-NDD-NEXT: movabsq $4503599627370495, %rcx # imm = 0xFFFFFFFFFFFFF
1253 ; X64-NDD-NEXT: cmpq %rcx, %rax
1254 ; X64-NDD-NEXT: setb %al
1255 ; X64-NDD-NEXT: retq
1257 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 144) ; 0x90 = "subnormal"
1258 ret i1 %0
1263 ; X86: # %bb.0: # %entry
1264 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1265 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1266 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
1270 ; X64-LABEL: iszero_d:
1271 ; X64: # %bb.0: # %entry
1272 ; X64-NEXT: movq %xmm0, %rax
1273 ; X64-NEXT: shlq %rax
1274 ; X64-NEXT: testq %rax, %rax
1275 ; X64-NEXT: sete %al
1276 ; X64-NEXT: retq
1278 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 96) ; 0x60 = "zero"
1279 ret i1 %0
1284 ; X86: # %bb.0: # %entry
1285 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1286 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1288 ; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx
1289 ; X86-NEXT: movl $2146435072, %ecx # imm = 0x7FF00000
1292 ; X86-NEXT: cmpl $2146959360, %eax # imm = 0x7FF80000
1297 ; X64-GENERIC-LABEL: issignaling_d:
1298 ; X64-GENERIC: # %bb.0: # %entry
1299 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1300 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1301 ; X64-GENERIC-NEXT: andq %rax, %rcx
1302 ; X64-GENERIC-NEXT: movabsq $9221120237041090560, %rax # imm = 0x7FF8000000000000
1303 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1304 ; X64-GENERIC-NEXT: setl %dl
1305 ; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF0000000000000
1306 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1307 ; X64-GENERIC-NEXT: setg %al
1308 ; X64-GENERIC-NEXT: andb %dl, %al
1309 ; X64-GENERIC-NEXT: retq
1311 ; X64-NDD-LABEL: issignaling_d:
1312 ; X64-NDD: # %bb.0: # %entry
1313 ; X64-NDD-NEXT: movq %xmm0, %rax
1314 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1315 ; X64-NDD-NEXT: andq %rcx, %rax
1316 ; X64-NDD-NEXT: movabsq $9221120237041090560, %rcx # imm = 0x7FF8000000000000
1317 ; X64-NDD-NEXT: cmpq %rcx, %rax
1318 ; X64-NDD-NEXT: setl %cl
1319 ; X64-NDD-NEXT: movabsq $9218868437227405312, %rdx # imm = 0x7FF0000000000000
1320 ; X64-NDD-NEXT: cmpq %rdx, %rax
1321 ; X64-NDD-NEXT: setg %al
1322 ; X64-NDD-NEXT: andb %cl, %al
1323 ; X64-NDD-NEXT: retq
1325 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1) ; "snan"
1326 ret i1 %0
1331 ; X86: # %bb.0: # %entry
1332 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1333 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1334 ; X86-NEXT: cmpl $2146959360, %eax # imm = 0x7FF80000
1338 ; X64-GENERIC-LABEL: isquiet_d:
1339 ; X64-GENERIC: # %bb.0: # %entry
1340 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1341 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1342 ; X64-GENERIC-NEXT: andq %rax, %rcx
1343 ; X64-GENERIC-NEXT: movabsq $9221120237041090559, %rax # imm = 0x7FF7FFFFFFFFFFFF
1344 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1345 ; X64-GENERIC-NEXT: setg %al
1346 ; X64-GENERIC-NEXT: retq
1348 ; X64-NDD-LABEL: isquiet_d:
1349 ; X64-NDD: # %bb.0: # %entry
1350 ; X64-NDD-NEXT: movq %xmm0, %rax
1351 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1352 ; X64-NDD-NEXT: andq %rcx, %rax
1353 ; X64-NDD-NEXT: movabsq $9221120237041090559, %rcx # imm = 0x7FF7FFFFFFFFFFFF
1354 ; X64-NDD-NEXT: cmpq %rcx, %rax
1355 ; X64-NDD-NEXT: setg %al
1356 ; X64-NDD-NEXT: retq
1358 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 2) ; "qnan"
1359 ret i1 %0
1364 ; X86: # %bb.0: # %entry
1365 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1366 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1368 ; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx
1369 ; X86-NEXT: movl $2146435072, %ecx # imm = 0x7FF00000
1374 ; X64-GENERIC-LABEL: isnan_d_strictfp:
1375 ; X64-GENERIC: # %bb.0: # %entry
1376 ; X64-GENERIC-NEXT: movq %xmm0, %rax
1377 ; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1378 ; X64-GENERIC-NEXT: andq %rax, %rcx
1379 ; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF0000000000000
1380 ; X64-GENERIC-NEXT: cmpq %rax, %rcx
1381 ; X64-GENERIC-NEXT: setg %al
1382 ; X64-GENERIC-NEXT: retq
1384 ; X64-NDD-LABEL: isnan_d_strictfp:
1385 ; X64-NDD: # %bb.0: # %entry
1386 ; X64-NDD-NEXT: movq %xmm0, %rax
1387 ; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1388 ; X64-NDD-NEXT: andq %rcx, %rax
1389 ; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF0000000000000
1390 ; X64-NDD-NEXT: cmpq %rcx, %rax
1391 ; X64-NDD-NEXT: setg %al
1392 ; X64-NDD-NEXT: retq
1394 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 3) strictfp ; "nan"
1395 ret i1 %0
1400 ; X86: # %bb.0: # %entry
1401 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1402 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1403 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
1407 ; X64-LABEL: iszero_d_strictfp:
1408 ; X64: # %bb.0: # %entry
1409 ; X64-NEXT: movq %xmm0, %rax
1410 ; X64-NEXT: shlq %rax
1411 ; X64-NEXT: testq %rax, %rax
1412 ; X64-NEXT: sete %al
1413 ; X64-NEXT: retq
1415 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 96) strictfp ; 0x60 = "zero"
1416 ret i1 %0
1423 ; X86: # %bb.0: # %entry
1424 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1425 ; X86-NEXT: fucomp %st(0)
1432 ; X64-LABEL: isnan_v1f:
1433 ; X64: # %bb.0: # %entry
1434 ; X64-NEXT: ucomiss %xmm0, %xmm0
1435 ; X64-NEXT: setp %al
1436 ; X64-NEXT: retq
1438 %0 = tail call <1 x i1> @llvm.is.fpclass.v1f32(<1 x float> %x, i32 3) ; "nan"
1439 ret <1 x i1> %0
1444 ; X86: # %bb.0: # %entry
1445 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1446 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1447 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1451 ; X64-LABEL: isnan_v1f_strictfp:
1452 ; X64: # %bb.0: # %entry
1453 ; X64-NEXT: movd %xmm0, %eax
1454 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1455 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1456 ; X64-NEXT: setge %al
1457 ; X64-NEXT: retq
1459 %0 = tail call <1 x i1> @llvm.is.fpclass.v1f32(<1 x float> %x, i32 3) strictfp ; "nan"
1460 ret <1 x i1> %0
1465 ; X86: # %bb.0: # %entry
1466 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1467 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1468 ; X86-NEXT: fucomp %st(0)
1473 ; X86-NEXT: fucomp %st(0)
1481 ; X64-LABEL: isnan_v2f:
1482 ; X64: # %bb.0: # %entry
1483 ; X64-NEXT: cmpunordps %xmm0, %xmm0
1484 ; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]
1485 ; X64-NEXT: retq
1487 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 3) ; "nan"
1488 ret <2 x i1> %0
1494 ; X86: # %bb.0: # %entry
1495 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1496 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1497 ; X86-NEXT: fucomp %st(0)
1502 ; X86-NEXT: fucomp %st(0)
1510 ; X64-LABEL: isnot_nan_v2f:
1511 ; X64: # %bb.0: # %entry
1512 ; X64-NEXT: cmpordps %xmm0, %xmm0
1513 ; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]
1514 ; X64-NEXT: retq
1516 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 1020) ; 0x3fc = "zero|subnormal|normal|inf"
1517 ret <2 x i1> %0
1522 ; X86: # %bb.0: # %entry
1523 ; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF
1524 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1526 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1528 ; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx
1529 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
1533 ; X64-LABEL: isnan_v2f_strictfp:
1534 ; X64: # %bb.0: # %entry
1535 ; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]
1536 ; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1537 ; X64-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1538 ; X64-NEXT: retq
1540 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 3) strictfp ; "nan"
1541 ret <2 x i1> %0
1546 ; X86: # %bb.0: # %entry
1547 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1548 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1549 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1550 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1551 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1552 ; X86-NEXT: fucomp %st(0)
1558 ; X86-NEXT: fucomp %st(0)
1565 ; X86-NEXT: fucomp %st(0)
1570 ; X86-NEXT: fucomp %st(0)
1582 ; X64-LABEL: isnan_v4f:
1583 ; X64: # %bb.0: # %entry
1584 ; X64-NEXT: cmpunordps %xmm0, %xmm0
1585 ; X64-NEXT: retq
1587 %0 = tail call <4 x i1> @llvm.is.fpclass.v4f32(<4 x float> %x, i32 3) ; "nan"
1588 ret <4 x i1> %0
1593 ; X86: # %bb.0: # %entry
1597 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1598 ; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF
1599 ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
1601 ; X86-NEXT: cmpl $2139095041, %edx # imm = 0x7F800001
1604 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1606 ; X86-NEXT: cmpl $2139095041, %esi # imm = 0x7F800001
1610 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1612 ; X86-NEXT: cmpl $2139095041, %esi # imm = 0x7F800001
1614 ; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx
1615 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
1625 ; X64-LABEL: isnan_v4f_strictfp:
1626 ; X64: # %bb.0: # %entry
1627 ; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1628 ; X64-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1629 ; X64-NEXT: retq
1631 %0 = tail call <4 x i1> @llvm.is.fpclass.v4f32(<4 x float> %x, i32 3) strictfp ; "nan"
1632 ret <4 x i1> %0
1637 ; X86: # %bb.0: # %entry
1641 ; X64-LABEL: isnone_f:
1642 ; X64: # %bb.0: # %entry
1643 ; X64-NEXT: xorl %eax, %eax
1644 ; X64-NEXT: retq
1646 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 0)
1647 ret i1 %0
1652 ; X86: # %bb.0: # %entry
1656 ; X64-LABEL: isany_f:
1657 ; X64: # %bb.0: # %entry
1658 ; X64-NEXT: movb $1, %al
1659 ; X64-NEXT: retq
1661 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1023)
1662 ret i1 %0
1668 ; X86: # %bb.0: # %entry
1669 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1678 ; X64-LABEL: iszero_or_nan_f:
1679 ; X64: # %bb.0: # %entry
1680 ; X64-NEXT: xorps %xmm1, %xmm1
1681 ; X64-NEXT: ucomiss %xmm1, %xmm0
1682 ; X64-NEXT: sete %al
1683 ; X64-NEXT: retq
1685 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"
1686 ret i1 %0
1689 define i1 @iszero_or_nan_f_daz(float %x) #0 {
1691 ; X86: # %bb.0: # %entry
1692 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1693 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1694 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1701 ; X64-LABEL: iszero_or_nan_f_daz:
1702 ; X64: # %bb.0: # %entry
1703 ; X64-NEXT: movd %xmm0, %eax
1704 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1705 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1706 ; X64-NEXT: setge %cl
1707 ; X64-NEXT: testl %eax, %eax
1708 ; X64-NEXT: sete %al
1709 ; X64-NEXT: orb %cl, %al
1710 ; X64-NEXT: retq
1712 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"
1713 ret i1 %0
1718 ; X86: # %bb.0: # %entry
1719 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1720 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1721 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1728 ; X64-LABEL: iszero_or_nan_f_maybe_daz:
1729 ; X64: # %bb.0: # %entry
1730 ; X64-NEXT: movd %xmm0, %eax
1731 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1732 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1733 ; X64-NEXT: setge %cl
1734 ; X64-NEXT: testl %eax, %eax
1735 ; X64-NEXT: sete %al
1736 ; X64-NEXT: orb %cl, %al
1737 ; X64-NEXT: retq
1739 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"
1740 ret i1 %0
1745 ; X86: # %bb.0: # %entry
1746 ; X86-NEXT: flds {{[0-9]+}}(%esp)
1755 ; X64-LABEL: not_iszero_or_nan_f:
1756 ; X64: # %bb.0: # %entry
1757 ; X64-NEXT: xorps %xmm1, %xmm1
1758 ; X64-NEXT: ucomiss %xmm1, %xmm0
1759 ; X64-NEXT: setne %al
1760 ; X64-NEXT: retq
1762 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~0x60 = "~(zero|nan)"
1763 ret i1 %0
1766 define i1 @not_iszero_or_nan_f_daz(float %x) #0 {
1768 ; X86: # %bb.0: # %entry
1769 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1770 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1771 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1778 ; X64-LABEL: not_iszero_or_nan_f_daz:
1779 ; X64: # %bb.0: # %entry
1780 ; X64-NEXT: movd %xmm0, %eax
1781 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1782 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1783 ; X64-NEXT: setl %cl
1784 ; X64-NEXT: testl %eax, %eax
1785 ; X64-NEXT: setne %al
1786 ; X64-NEXT: andb %cl, %al
1787 ; X64-NEXT: retq
1789 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"
1790 ret i1 %0
1795 ; X86: # %bb.0: # %entry
1796 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1797 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1798 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1805 ; X64-LABEL: not_iszero_or_nan_f_maybe_daz:
1806 ; X64: # %bb.0: # %entry
1807 ; X64-NEXT: movd %xmm0, %eax
1808 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1809 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1810 ; X64-NEXT: setl %cl
1811 ; X64-NEXT: testl %eax, %eax
1812 ; X64-NEXT: setne %al
1813 ; X64-NEXT: andb %cl, %al
1814 ; X64-NEXT: retq
1816 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"
1817 ret i1 %0
1822 ; X86: # %bb.0: # %entry
1823 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1824 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1825 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1832 ; X64-LABEL: iszero_or_qnan_f:
1833 ; X64: # %bb.0: # %entry
1834 ; X64-NEXT: movd %xmm0, %eax
1835 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1836 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1837 ; X64-NEXT: setge %cl
1838 ; X64-NEXT: testl %eax, %eax
1839 ; X64-NEXT: sete %al
1840 ; X64-NEXT: orb %cl, %al
1841 ; X64-NEXT: retq
1843 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 98) ; 0x60|0x2 = "zero|qnan"
1844 ret i1 %0
1849 ; X86: # %bb.0: # %entry
1850 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1851 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1852 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1854 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1862 ; X64-GENERIC-LABEL: iszero_or_snan_f:
1863 ; X64-GENERIC: # %bb.0: # %entry
1864 ; X64-GENERIC-NEXT: movd %xmm0, %eax
1865 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1866 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1867 ; X64-GENERIC-NEXT: setl %cl
1868 ; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1869 ; X64-GENERIC-NEXT: setge %dl
1870 ; X64-GENERIC-NEXT: andb %cl, %dl
1871 ; X64-GENERIC-NEXT: testl %eax, %eax
1872 ; X64-GENERIC-NEXT: sete %al
1873 ; X64-GENERIC-NEXT: orb %dl, %al
1874 ; X64-GENERIC-NEXT: retq
1876 ; X64-NDD-LABEL: iszero_or_snan_f:
1877 ; X64-NDD: # %bb.0: # %entry
1878 ; X64-NDD-NEXT: movd %xmm0, %eax
1879 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1880 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1881 ; X64-NDD-NEXT: setl %cl
1882 ; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1883 ; X64-NDD-NEXT: setge %dl
1884 ; X64-NDD-NEXT: andb %dl, %cl
1885 ; X64-NDD-NEXT: testl %eax, %eax
1886 ; X64-NDD-NEXT: sete %al
1887 ; X64-NDD-NEXT: orb %cl, %al
1888 ; X64-NDD-NEXT: retq
1890 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 97) ; 0x60|0x1 = "zero|snan"
1891 ret i1 %0
1896 ; X86: # %bb.0: # %entry
1900 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1901 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1902 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1904 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1907 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1910 ; X86-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF
1913 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
1914 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
1922 ; X64-GENERIC-LABEL: not_iszero_or_qnan_f:
1923 ; X64-GENERIC: # %bb.0: # %entry
1924 ; X64-GENERIC-NEXT: movd %xmm0, %eax
1925 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1926 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1927 ; X64-GENERIC-NEXT: setl %cl
1928 ; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1929 ; X64-GENERIC-NEXT: setge %dl
1930 ; X64-GENERIC-NEXT: andb %cl, %dl
1931 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1932 ; X64-GENERIC-NEXT: sete %cl
1933 ; X64-GENERIC-NEXT: leal -1(%rax), %esi
1934 ; X64-GENERIC-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF
1935 ; X64-GENERIC-NEXT: setb %sil
1936 ; X64-GENERIC-NEXT: orb %cl, %sil
1937 ; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF800000
1938 ; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
1939 ; X64-GENERIC-NEXT: setb %al
1940 ; X64-GENERIC-NEXT: orb %dl, %al
1941 ; X64-GENERIC-NEXT: orb %sil, %al
1942 ; X64-GENERIC-NEXT: retq
1944 ; X64-NDD-LABEL: not_iszero_or_qnan_f:
1945 ; X64-NDD: # %bb.0: # %entry
1946 ; X64-NDD-NEXT: movd %xmm0, %eax
1947 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1948 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1949 ; X64-NDD-NEXT: setl %cl
1950 ; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
1951 ; X64-NDD-NEXT: setge %dl
1952 ; X64-NDD-NEXT: andb %dl, %cl
1953 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1954 ; X64-NDD-NEXT: sete %dl
1955 ; X64-NDD-NEXT: decl %eax, %esi
1956 ; X64-NDD-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF
1957 ; X64-NDD-NEXT: setb %sil
1958 ; X64-NDD-NEXT: orb %sil, %dl
1959 ; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF800000
1960 ; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
1961 ; X64-NDD-NEXT: setb %al
1962 ; X64-NDD-NEXT: orb %cl, %al
1963 ; X64-NDD-NEXT: orb %dl, %al
1964 ; X64-NDD-NEXT: retq
1966 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 925) ; ~(0x60|0x2) = "~(zero|qnan)"
1967 ret i1 %0
1972 ; X86: # %bb.0: # %entry
1973 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
1974 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
1975 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1978 ; X86-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF
1980 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
1984 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
1985 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
1990 ; X64-GENERIC-LABEL: not_iszero_or_snan_f:
1991 ; X64-GENERIC: # %bb.0: # %entry
1992 ; X64-GENERIC-NEXT: movd %xmm0, %eax
1993 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
1994 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
1995 ; X64-GENERIC-NEXT: sete %cl
1996 ; X64-GENERIC-NEXT: leal -1(%rax), %edx
1997 ; X64-GENERIC-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF
1998 ; X64-GENERIC-NEXT: setb %dl
1999 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2000 ; X64-GENERIC-NEXT: setge %sil
2001 ; X64-GENERIC-NEXT: orb %cl, %sil
2002 ; X64-GENERIC-NEXT: orb %dl, %sil
2003 ; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2004 ; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2005 ; X64-GENERIC-NEXT: setb %al
2006 ; X64-GENERIC-NEXT: orb %sil, %al
2007 ; X64-GENERIC-NEXT: retq
2009 ; X64-NDD-LABEL: not_iszero_or_snan_f:
2010 ; X64-NDD: # %bb.0: # %entry
2011 ; X64-NDD-NEXT: movd %xmm0, %eax
2012 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2013 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2014 ; X64-NDD-NEXT: sete %cl
2015 ; X64-NDD-NEXT: decl %eax, %edx
2016 ; X64-NDD-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF
2017 ; X64-NDD-NEXT: setb %dl
2018 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2019 ; X64-NDD-NEXT: setge %sil
2020 ; X64-NDD-NEXT: orb %sil, %cl
2021 ; X64-NDD-NEXT: orb %dl, %cl
2022 ; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2023 ; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2024 ; X64-NDD-NEXT: setb %al
2025 ; X64-NDD-NEXT: orb %cl, %al
2026 ; X64-NDD-NEXT: retq
2028 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 926) ; ~(0x60|0x1) = "~(zero|snan)"
2029 ret i1 %0
2034 ; X86: # %bb.0: # %entry
2035 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2036 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2037 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2041 ; X64-LABEL: isinf_or_nan_f:
2042 ; X64: # %bb.0: # %entry
2043 ; X64-NEXT: movd %xmm0, %eax
2044 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2045 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2046 ; X64-NEXT: setge %al
2047 ; X64-NEXT: retq
2049 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; 0x204|0x3 = "inf|nan"
2050 ret i1 %0
2055 ; X86: # %bb.0: # %entry
2056 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2057 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2058 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2062 ; X64-LABEL: not_isinf_or_nan_f:
2063 ; X64: # %bb.0: # %entry
2064 ; X64-NEXT: movd %xmm0, %eax
2065 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2066 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2067 ; X64-NEXT: setl %al
2068 ; X64-NEXT: retq
2070 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; ~(0x204|0x3) = "~(inf|nan)"
2071 ret i1 %0
2076 ; X86: # %bb.0: # %entry
2077 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2078 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2079 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2083 ; X64-LABEL: isfinite_or_nan_f:
2084 ; X64: # %bb.0: # %entry
2085 ; X64-NEXT: movd %xmm0, %eax
2086 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2087 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2088 ; X64-NEXT: setne %al
2089 ; X64-NEXT: retq
2091 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; 0x1f8|0x3 = "finite|nan"
2092 ret i1 %0
2097 ; X86: # %bb.0: # %entry
2098 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2099 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2100 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2104 ; X64-LABEL: not_isfinite_or_nan_f:
2105 ; X64: # %bb.0: # %entry
2106 ; X64-NEXT: movd %xmm0, %eax
2107 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2108 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2109 ; X64-NEXT: sete %al
2110 ; X64-NEXT: retq
2112 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; ~(0x1f8|0x3) = "~(finite|nan)"
2113 ret i1 %0
2118 ; X86: # %bb.0:
2119 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2120 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2128 ; X64-LABEL: is_plus_inf_or_nan_f:
2129 ; X64: # %bb.0:
2130 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2131 ; X64-NEXT: sete %al
2132 ; X64-NEXT: retq
2133 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 515) ; 0x200|0x3 = "+inf|nan"
2139 ; X86: # %bb.0:
2140 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2141 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2149 ; X64-LABEL: is_minus_inf_or_nan_f:
2150 ; X64: # %bb.0:
2151 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2152 ; X64-NEXT: sete %al
2153 ; X64-NEXT: retq
2160 ; X86: # %bb.0:
2161 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2162 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2170 ; X64-LABEL: not_is_plus_inf_or_nan_f:
2171 ; X64: # %bb.0:
2172 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2173 ; X64-NEXT: setne %al
2174 ; X64-NEXT: retq
2175 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 508) ; ~(0x200|0x3) = "~(+inf|nan)"
2181 ; X86: # %bb.0:
2182 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2183 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2191 ; X64-LABEL: not_is_minus_inf_or_nan_f:
2192 ; X64: # %bb.0:
2193 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2194 ; X64-NEXT: setne %al
2195 ; X64-NEXT: retq
2202 ; X86: # %bb.0:
2203 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2205 ; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2206 ; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2208 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2211 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2216 ; X64-GENERIC-LABEL: is_plus_inf_or_snan_f:
2217 ; X64-GENERIC: # %bb.0:
2218 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2219 ; X64-GENERIC-NEXT: movl %eax, %ecx
2220 ; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2221 ; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2222 ; X64-GENERIC-NEXT: setl %dl
2223 ; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2224 ; X64-GENERIC-NEXT: setge %cl
2225 ; X64-GENERIC-NEXT: andb %dl, %cl
2226 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2227 ; X64-GENERIC-NEXT: sete %al
2228 ; X64-GENERIC-NEXT: orb %cl, %al
2229 ; X64-GENERIC-NEXT: retq
2231 ; X64-NDD-LABEL: is_plus_inf_or_snan_f:
2232 ; X64-NDD: # %bb.0:
2233 ; X64-NDD-NEXT: movd %xmm0, %eax
2234 ; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF
2235 ; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2236 ; X64-NDD-NEXT: setl %dl
2237 ; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2238 ; X64-NDD-NEXT: setge %cl
2239 ; X64-NDD-NEXT: andb %dl, %cl
2240 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2241 ; X64-NDD-NEXT: sete %al
2242 ; X64-NDD-NEXT: orb %cl, %al
2243 ; X64-NDD-NEXT: retq
2244 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 513) ; 0x200|0x1 = "+inf|snan"
2250 ; X86: # %bb.0:
2251 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2252 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2254 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2255 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2260 ; X64-LABEL: is_plus_inf_or_qnan_f:
2261 ; X64: # %bb.0:
2262 ; X64-NEXT: movd %xmm0, %eax
2263 ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2264 ; X64-NEXT: sete %cl
2265 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2266 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2267 ; X64-NEXT: setge %al
2268 ; X64-NEXT: orb %cl, %al
2269 ; X64-NEXT: retq
2270 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 514) ; 0x200|0x1 = "+inf|qnan"
2276 ; X86: # %bb.0:
2277 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2278 ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2280 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2281 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2284 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2289 ; X64-GENERIC-LABEL: not_is_plus_inf_or_snan_f:
2290 ; X64-GENERIC: # %bb.0:
2291 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2292 ; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2293 ; X64-GENERIC-NEXT: sete %cl
2294 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2295 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2296 ; X64-GENERIC-NEXT: setl %dl
2297 ; X64-GENERIC-NEXT: orb %cl, %dl
2298 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2299 ; X64-GENERIC-NEXT: setge %al
2300 ; X64-GENERIC-NEXT: orb %dl, %al
2301 ; X64-GENERIC-NEXT: retq
2303 ; X64-NDD-LABEL: not_is_plus_inf_or_snan_f:
2304 ; X64-NDD: # %bb.0:
2305 ; X64-NDD-NEXT: movd %xmm0, %eax
2306 ; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2307 ; X64-NDD-NEXT: sete %cl
2308 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2309 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2310 ; X64-NDD-NEXT: setl %dl
2311 ; X64-NDD-NEXT: orb %dl, %cl
2312 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2313 ; X64-NDD-NEXT: setge %al
2314 ; X64-NDD-NEXT: orb %cl, %al
2315 ; X64-NDD-NEXT: retq
2322 ; X86: # %bb.0:
2323 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2325 ; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2326 ; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2328 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2331 ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2333 ; X86-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2339 ; X64-GENERIC-LABEL: not_is_plus_inf_or_qnan_f:
2340 ; X64-GENERIC: # %bb.0:
2341 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2342 ; X64-GENERIC-NEXT: movl %eax, %ecx
2343 ; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2344 ; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2345 ; X64-GENERIC-NEXT: setl %dl
2346 ; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2347 ; X64-GENERIC-NEXT: setge %sil
2348 ; X64-GENERIC-NEXT: andb %dl, %sil
2349 ; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2350 ; X64-GENERIC-NEXT: sete %dl
2351 ; X64-GENERIC-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2352 ; X64-GENERIC-NEXT: setl %al
2353 ; X64-GENERIC-NEXT: orb %dl, %al
2354 ; X64-GENERIC-NEXT: orb %sil, %al
2355 ; X64-GENERIC-NEXT: retq
2357 ; X64-NDD-LABEL: not_is_plus_inf_or_qnan_f:
2358 ; X64-NDD: # %bb.0:
2359 ; X64-NDD-NEXT: movd %xmm0, %eax
2360 ; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF
2361 ; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2362 ; X64-NDD-NEXT: setl %dl
2363 ; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2364 ; X64-NDD-NEXT: setge %sil
2365 ; X64-NDD-NEXT: andb %sil, %dl
2366 ; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2367 ; X64-NDD-NEXT: sete %al
2368 ; X64-NDD-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2369 ; X64-NDD-NEXT: setl %cl
2370 ; X64-NDD-NEXT: orb %cl, %al
2371 ; X64-NDD-NEXT: orb %dl, %al
2372 ; X64-NDD-NEXT: retq
2379 ; X86: # %bb.0:
2380 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2382 ; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2383 ; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2385 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2388 ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2393 ; X64-GENERIC-LABEL: is_minus_inf_or_snan_f:
2394 ; X64-GENERIC: # %bb.0:
2395 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2396 ; X64-GENERIC-NEXT: movl %eax, %ecx
2397 ; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2398 ; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2399 ; X64-GENERIC-NEXT: setl %dl
2400 ; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2401 ; X64-GENERIC-NEXT: setge %cl
2402 ; X64-GENERIC-NEXT: andb %dl, %cl
2403 ; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2404 ; X64-GENERIC-NEXT: sete %al
2405 ; X64-GENERIC-NEXT: orb %cl, %al
2406 ; X64-GENERIC-NEXT: retq
2408 ; X64-NDD-LABEL: is_minus_inf_or_snan_f:
2409 ; X64-NDD: # %bb.0:
2410 ; X64-NDD-NEXT: movd %xmm0, %eax
2411 ; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF
2412 ; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2413 ; X64-NDD-NEXT: setl %dl
2414 ; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2415 ; X64-NDD-NEXT: setge %cl
2416 ; X64-NDD-NEXT: andb %dl, %cl
2417 ; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2418 ; X64-NDD-NEXT: sete %al
2419 ; X64-NDD-NEXT: orb %cl, %al
2420 ; X64-NDD-NEXT: retq
2427 ; X86: # %bb.0:
2428 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2429 ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2431 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2432 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2437 ; X64-LABEL: is_minus_inf_or_qnan_f:
2438 ; X64: # %bb.0:
2439 ; X64-NEXT: movd %xmm0, %eax
2440 ; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2441 ; X64-NEXT: sete %cl
2442 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2443 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2444 ; X64-NEXT: setge %al
2445 ; X64-NEXT: orb %cl, %al
2446 ; X64-NEXT: retq
2453 ; X86: # %bb.0:
2454 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2455 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2457 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2458 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2461 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2466 ; X64-GENERIC-LABEL: not_is_minus_inf_or_snan_f:
2467 ; X64-GENERIC: # %bb.0:
2468 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2469 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2470 ; X64-GENERIC-NEXT: sete %cl
2471 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2472 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2473 ; X64-GENERIC-NEXT: setl %dl
2474 ; X64-GENERIC-NEXT: orb %cl, %dl
2475 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2476 ; X64-GENERIC-NEXT: setge %al
2477 ; X64-GENERIC-NEXT: orb %dl, %al
2478 ; X64-GENERIC-NEXT: retq
2480 ; X64-NDD-LABEL: not_is_minus_inf_or_snan_f:
2481 ; X64-NDD: # %bb.0:
2482 ; X64-NDD-NEXT: movd %xmm0, %eax
2483 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2484 ; X64-NDD-NEXT: sete %cl
2485 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2486 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2487 ; X64-NDD-NEXT: setl %dl
2488 ; X64-NDD-NEXT: orb %dl, %cl
2489 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2490 ; X64-NDD-NEXT: setge %al
2491 ; X64-NDD-NEXT: orb %cl, %al
2492 ; X64-NDD-NEXT: retq
2499 ; X86: # %bb.0:
2500 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2502 ; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2503 ; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2505 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2508 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2510 ; X86-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2516 ; X64-GENERIC-LABEL: not_is_minus_inf_or_qnan_f:
2517 ; X64-GENERIC: # %bb.0:
2518 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2519 ; X64-GENERIC-NEXT: movl %eax, %ecx
2520 ; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2521 ; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2522 ; X64-GENERIC-NEXT: setl %dl
2523 ; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2524 ; X64-GENERIC-NEXT: setge %sil
2525 ; X64-GENERIC-NEXT: andb %dl, %sil
2526 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2527 ; X64-GENERIC-NEXT: sete %dl
2528 ; X64-GENERIC-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2529 ; X64-GENERIC-NEXT: setl %al
2530 ; X64-GENERIC-NEXT: orb %dl, %al
2531 ; X64-GENERIC-NEXT: orb %sil, %al
2532 ; X64-GENERIC-NEXT: retq
2534 ; X64-NDD-LABEL: not_is_minus_inf_or_qnan_f:
2535 ; X64-NDD: # %bb.0:
2536 ; X64-NDD-NEXT: movd %xmm0, %eax
2537 ; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF
2538 ; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2539 ; X64-NDD-NEXT: setl %dl
2540 ; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2541 ; X64-NDD-NEXT: setge %sil
2542 ; X64-NDD-NEXT: andb %sil, %dl
2543 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2544 ; X64-NDD-NEXT: sete %al
2545 ; X64-NDD-NEXT: cmpl $2139095040, %ecx # imm = 0x7F800000
2546 ; X64-NDD-NEXT: setl %cl
2547 ; X64-NDD-NEXT: orb %cl, %al
2548 ; X64-NDD-NEXT: orb %dl, %al
2549 ; X64-NDD-NEXT: retq
2556 ; X86: # %bb.0:
2557 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2558 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2559 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2562 ; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
2567 ; X64-LABEL: issubnormal_or_nan_f:
2568 ; X64: # %bb.0:
2569 ; X64-NEXT: movd %xmm0, %eax
2570 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2571 ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2572 ; X64-NEXT: setge %cl
2573 ; X64-NEXT: decl %eax
2574 ; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF
2575 ; X64-NEXT: setb %al
2576 ; X64-NEXT: orb %cl, %al
2577 ; X64-NEXT: retq
2578 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 147) ; 0x90|0x3 = "subnormal|nan"
2584 ; X86: # %bb.0:
2585 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2587 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2596 ; X64-LABEL: issubnormal_or_zero_or_nan_f:
2597 ; X64: # %bb.0:
2598 ; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2599 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2600 ; X64-NEXT: setb %al
2601 ; X64-NEXT: retq
2602 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 243) ; 0xf0|0x3 = "subnormal|zero|nan"
2606 define i1 @issubnormal_or_zero_or_nan_f_daz(float %x) #0 {
2608 ; X86: # %bb.0:
2609 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2618 ; X64-LABEL: issubnormal_or_zero_or_nan_f_daz:
2619 ; X64: # %bb.0:
2620 ; X64-NEXT: xorps %xmm1, %xmm1
2621 ; X64-NEXT: ucomiss %xmm1, %xmm0
2622 ; X64-NEXT: sete %al
2623 ; X64-NEXT: retq
2624 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 243) ; 0xf0|0x3 = "subnormal|zero|nan"
2630 ; X86: # %bb.0:
2631 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2633 ; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2634 ; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2636 ; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2639 ; X86-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2644 ; X64-GENERIC-LABEL: issubnormal_or_zero_or_snan_f:
2645 ; X64-GENERIC: # %bb.0:
2646 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2647 ; X64-GENERIC-NEXT: movl %eax, %ecx
2648 ; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
2649 ; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2650 ; X64-GENERIC-NEXT: setl %dl
2651 ; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2652 ; X64-GENERIC-NEXT: setge %cl
2653 ; X64-GENERIC-NEXT: andb %dl, %cl
2654 ; X64-GENERIC-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2655 ; X64-GENERIC-NEXT: sete %al
2656 ; X64-GENERIC-NEXT: orb %cl, %al
2657 ; X64-GENERIC-NEXT: retq
2659 ; X64-NDD-LABEL: issubnormal_or_zero_or_snan_f:
2660 ; X64-NDD: # %bb.0:
2661 ; X64-NDD-NEXT: movd %xmm0, %eax
2662 ; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF
2663 ; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC00000
2664 ; X64-NDD-NEXT: setl %dl
2665 ; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F800001
2666 ; X64-NDD-NEXT: setge %cl
2667 ; X64-NDD-NEXT: andb %dl, %cl
2668 ; X64-NDD-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2669 ; X64-NDD-NEXT: sete %al
2670 ; X64-NDD-NEXT: orb %cl, %al
2671 ; X64-NDD-NEXT: retq
2672 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 241) ; 0x90|0x1 = "subnormal|snan"
2678 ; X86: # %bb.0:
2679 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2680 ; X86-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2682 ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2683 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2688 ; X64-LABEL: issubnormal_or_zero_or_qnan_f:
2689 ; X64: # %bb.0:
2690 ; X64-NEXT: movd %xmm0, %eax
2691 ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2692 ; X64-NEXT: sete %cl
2693 ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2694 ; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2695 ; X64-NEXT: setge %al
2696 ; X64-NEXT: orb %cl, %al
2697 ; X64-NEXT: retq
2698 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 242) ; 0x90|0x2 = "subnormal|qnan"
2704 ; X86: # %bb.0:
2705 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2706 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2707 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2712 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2713 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2718 ; X64-GENERIC-LABEL: not_issubnormal_or_nan_f:
2719 ; X64-GENERIC: # %bb.0:
2720 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2721 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2722 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2723 ; X64-GENERIC-NEXT: sete %cl
2724 ; X64-GENERIC-NEXT: testl %eax, %eax
2725 ; X64-GENERIC-NEXT: sete %dl
2726 ; X64-GENERIC-NEXT: orb %cl, %dl
2727 ; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2728 ; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2729 ; X64-GENERIC-NEXT: setb %al
2730 ; X64-GENERIC-NEXT: orb %dl, %al
2731 ; X64-GENERIC-NEXT: retq
2733 ; X64-NDD-LABEL: not_issubnormal_or_nan_f:
2734 ; X64-NDD: # %bb.0:
2735 ; X64-NDD-NEXT: movd %xmm0, %eax
2736 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2737 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2738 ; X64-NDD-NEXT: sete %cl
2739 ; X64-NDD-NEXT: testl %eax, %eax
2740 ; X64-NDD-NEXT: sete %dl
2741 ; X64-NDD-NEXT: orb %dl, %cl
2742 ; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2743 ; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2744 ; X64-NDD-NEXT: setb %al
2745 ; X64-NDD-NEXT: orb %cl, %al
2746 ; X64-NDD-NEXT: retq
2747 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 876) ; ~(0x90|0x3) = ~"subnormal|nan"
2753 ; X86: # %bb.0:
2754 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2756 ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2765 ; X64-LABEL: not_issubnormal_or_zero_or_nan_f:
2766 ; X64: # %bb.0:
2767 ; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2768 ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2769 ; X64-NEXT: setae %al
2770 ; X64-NEXT: retq
2771 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 780) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"
2775 define i1 @not_issubnormal_or_zero_or_nan_f_daz(float %x) #0 {
2777 ; X86: # %bb.0:
2778 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2787 ; X64-LABEL: not_issubnormal_or_zero_or_nan_f_daz:
2788 ; X64: # %bb.0:
2789 ; X64-NEXT: xorps %xmm1, %xmm1
2790 ; X64-NEXT: ucomiss %xmm1, %xmm0
2791 ; X64-NEXT: setne %al
2792 ; X64-NEXT: retq
2793 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 780) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"
2799 ; X86: # %bb.0:
2800 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2801 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2802 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2804 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2807 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2808 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2813 ; X64-GENERIC-LABEL: not_issubnormal_or_zero_or_snan_f:
2814 ; X64-GENERIC: # %bb.0:
2815 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2816 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2817 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2818 ; X64-GENERIC-NEXT: setge %cl
2819 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2820 ; X64-GENERIC-NEXT: sete %dl
2821 ; X64-GENERIC-NEXT: orb %cl, %dl
2822 ; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2823 ; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2824 ; X64-GENERIC-NEXT: setb %al
2825 ; X64-GENERIC-NEXT: orb %dl, %al
2826 ; X64-GENERIC-NEXT: retq
2828 ; X64-NDD-LABEL: not_issubnormal_or_zero_or_snan_f:
2829 ; X64-NDD: # %bb.0:
2830 ; X64-NDD-NEXT: movd %xmm0, %eax
2831 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2832 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2833 ; X64-NDD-NEXT: setge %cl
2834 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2835 ; X64-NDD-NEXT: sete %dl
2836 ; X64-NDD-NEXT: orb %dl, %cl
2837 ; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2838 ; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2839 ; X64-NDD-NEXT: setb %al
2840 ; X64-NDD-NEXT: orb %cl, %al
2841 ; X64-NDD-NEXT: retq
2842 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 782) ; ~(0x90|0x1) = ~"subnormal|snan"
2848 ; X86: # %bb.0:
2849 ; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
2850 ; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
2851 ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2853 ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2856 ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2859 ; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2860 ; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2865 ; X64-GENERIC-LABEL: not_issubnormal_or_zero_or_qnan_f:
2866 ; X64-GENERIC: # %bb.0:
2867 ; X64-GENERIC-NEXT: movd %xmm0, %eax
2868 ; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2869 ; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2870 ; X64-GENERIC-NEXT: setl %cl
2871 ; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2872 ; X64-GENERIC-NEXT: setge %dl
2873 ; X64-GENERIC-NEXT: andb %cl, %dl
2874 ; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2875 ; X64-GENERIC-NEXT: sete %cl
2876 ; X64-GENERIC-NEXT: orb %dl, %cl
2877 ; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2878 ; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2879 ; X64-GENERIC-NEXT: setb %al
2880 ; X64-GENERIC-NEXT: orb %cl, %al
2881 ; X64-GENERIC-NEXT: retq
2883 ; X64-NDD-LABEL: not_issubnormal_or_zero_or_qnan_f:
2884 ; X64-NDD: # %bb.0:
2885 ; X64-NDD-NEXT: movd %xmm0, %eax
2886 ; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2887 ; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
2888 ; X64-NDD-NEXT: setl %cl
2889 ; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2890 ; X64-NDD-NEXT: setge %dl
2891 ; X64-NDD-NEXT: andb %dl, %cl
2892 ; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2893 ; X64-NDD-NEXT: sete %dl
2894 ; X64-NDD-NEXT: orb %dl, %cl
2895 ; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF800000
2896 ; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000
2897 ; X64-NDD-NEXT: setb %al
2898 ; X64-NDD-NEXT: orb %cl, %al
2899 ; X64-NDD-NEXT: retq
2900 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 781) ; ~(0x90|0x2) = ~"subnormal|qnan"
2911 attributes #0 = { "denormal-fp-math"="ieee,preserve-sign" }