@@ -2597,24 +2597,22 @@ define i1 @issubnormal_or_nan_f(float %x) {
2597
2597
define i1 @issubnormal_or_zero_or_nan_f (float %x ) {
2598
2598
; X86-LABEL: issubnormal_or_zero_or_nan_f:
2599
2599
; X86: # %bb.0:
2600
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2601
- ; X86-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2602
- ; X86-NEXT: sete %cl
2603
- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2604
- ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2605
- ; X86-NEXT: setge %al
2606
- ; X86-NEXT: orb %cl, %al
2600
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2601
+ ; X86-NEXT: fabs
2602
+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2603
+ ; X86-NEXT: fxch %st(1)
2604
+ ; X86-NEXT: fucompp
2605
+ ; X86-NEXT: fnstsw %ax
2606
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2607
+ ; X86-NEXT: sahf
2608
+ ; X86-NEXT: setb %al
2607
2609
; X86-NEXT: retl
2608
2610
;
2609
2611
; X64-LABEL: issubnormal_or_zero_or_nan_f:
2610
2612
; X64: # %bb.0:
2611
- ; X64-NEXT: movd %xmm0, %eax
2612
- ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2613
- ; X64-NEXT: sete %cl
2614
- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2615
- ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2616
- ; X64-NEXT: setge %al
2617
- ; X64-NEXT: orb %cl, %al
2613
+ ; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2614
+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2615
+ ; X64-NEXT: setb %al
2618
2616
; X64-NEXT: retq
2619
2617
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 243 ) ; 0xf0|0x3 = "subnormal|zero|nan"
2620
2618
ret i1 %class
@@ -2768,24 +2766,22 @@ define i1 @not_issubnormal_or_nan_f(float %x) {
2768
2766
define i1 @not_issubnormal_or_zero_or_nan_f (float %x ) {
2769
2767
; X86-LABEL: not_issubnormal_or_zero_or_nan_f:
2770
2768
; X86: # %bb.0:
2771
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2772
- ; X86-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2773
- ; X86-NEXT: setne %cl
2774
- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2775
- ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2776
- ; X86-NEXT: setl %al
2777
- ; X86-NEXT: andb %cl, %al
2769
+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2770
+ ; X86-NEXT: fabs
2771
+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2772
+ ; X86-NEXT: fxch %st(1)
2773
+ ; X86-NEXT: fucompp
2774
+ ; X86-NEXT: fnstsw %ax
2775
+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2776
+ ; X86-NEXT: sahf
2777
+ ; X86-NEXT: setae %al
2778
2778
; X86-NEXT: retl
2779
2779
;
2780
2780
; X64-LABEL: not_issubnormal_or_zero_or_nan_f:
2781
2781
; X64: # %bb.0:
2782
- ; X64-NEXT: movd %xmm0, %eax
2783
- ; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000
2784
- ; X64-NEXT: setne %cl
2785
- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2786
- ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2787
- ; X64-NEXT: setl %al
2788
- ; X64-NEXT: andb %cl, %al
2782
+ ; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2783
+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2784
+ ; X64-NEXT: setae %al
2789
2785
; X64-NEXT: retq
2790
2786
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 780 ) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"
2791
2787
ret i1 %class
0 commit comments