@@ -186,15 +186,20 @@ entry:
186186define i1 @is_plus_inf_f (float %x ) {
187187; X86-LABEL: is_plus_inf_f:
188188; X86: # %bb.0: # %entry
189- ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
190- ; X86-NEXT: sete %al
189+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
190+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
191+ ; X86-NEXT: fxch %st(1)
192+ ; X86-NEXT: fucompp
193+ ; X86-NEXT: fnstsw %ax
194+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
195+ ; X86-NEXT: sahf
196+ ; X86-NEXT: setae %al
191197; X86-NEXT: retl
192198;
193199; X64-LABEL: is_plus_inf_f:
194200; X64: # %bb.0: # %entry
195- ; X64-NEXT: movd %xmm0, %eax
196- ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
197- ; X64-NEXT: sete %al
201+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
202+ ; X64-NEXT: setae %al
198203; X64-NEXT: retq
199204entry:
200205 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 512 ) ; 0x200 = "+inf"
@@ -204,15 +209,20 @@ entry:
204209define i1 @is_minus_inf_f (float %x ) {
205210; X86-LABEL: is_minus_inf_f:
206211; X86: # %bb.0: # %entry
207- ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
208- ; X86-NEXT: sete %al
212+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
213+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
214+ ; X86-NEXT: fucompp
215+ ; X86-NEXT: fnstsw %ax
216+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
217+ ; X86-NEXT: sahf
218+ ; X86-NEXT: setae %al
209219; X86-NEXT: retl
210220;
211221; X64-LABEL: is_minus_inf_f:
212222; X64: # %bb.0: # %entry
213- ; X64-NEXT: movd %xmm0, %eax
214- ; X64-NEXT: cmpl $-8388608 , %eax # imm = 0xFF800000
215- ; X64-NEXT: sete %al
223+ ; X64-NEXT: movss {{.*#+}} xmm1 = [-Inf,0.0E+0,0.0E+0,0.0E+0]
224+ ; X64-NEXT: ucomiss %xmm0 , %xmm1
225+ ; X64-NEXT: setae %al
216226; X64-NEXT: retq
217227entry:
218228 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 4 ) ; "-inf"
@@ -222,15 +232,20 @@ entry:
222232define i1 @not_is_minus_inf_f (float %x ) {
223233; X86-LABEL: not_is_minus_inf_f:
224234; X86: # %bb.0: # %entry
225- ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
226- ; X86-NEXT: setne %al
235+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
236+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
237+ ; X86-NEXT: fucompp
238+ ; X86-NEXT: fnstsw %ax
239+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
240+ ; X86-NEXT: sahf
241+ ; X86-NEXT: setb %al
227242; X86-NEXT: retl
228243;
229244; X64-LABEL: not_is_minus_inf_f:
230245; X64: # %bb.0: # %entry
231- ; X64-NEXT: movd %xmm0, %eax
232- ; X64-NEXT: cmpl $-8388608 , %eax # imm = 0xFF800000
233- ; X64-NEXT: setne %al
246+ ; X64-NEXT: movss {{.*#+}} xmm1 = [-Inf,0.0E+0,0.0E+0,0.0E+0]
247+ ; X64-NEXT: ucomiss %xmm0 , %xmm1
248+ ; X64-NEXT: setb %al
234249; X64-NEXT: retq
235250entry:
236251 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1019 ) ; ~"-inf"
@@ -2116,24 +2131,19 @@ entry:
21162131define i1 @is_plus_inf_or_nan_f (float %x ) {
21172132; X86-LABEL: is_plus_inf_or_nan_f:
21182133; X86: # %bb.0:
2119- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2120- ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2121- ; X86-NEXT: sete %cl
2122- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2123- ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2124- ; X86-NEXT: setge %al
2125- ; X86-NEXT: orb %cl, %al
2134+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2135+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2136+ ; X86-NEXT: fucompp
2137+ ; X86-NEXT: fnstsw %ax
2138+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2139+ ; X86-NEXT: sahf
2140+ ; X86-NEXT: sete %al
21262141; X86-NEXT: retl
21272142;
21282143; X64-LABEL: is_plus_inf_or_nan_f:
21292144; X64: # %bb.0:
2130- ; X64-NEXT: movd %xmm0, %eax
2131- ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2132- ; X64-NEXT: sete %cl
2133- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2134- ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2135- ; X64-NEXT: setge %al
2136- ; X64-NEXT: orb %cl, %al
2145+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2146+ ; X64-NEXT: sete %al
21372147; X64-NEXT: retq
21382148 %class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 515 ) ; 0x200|0x3 = "+inf|nan"
21392149 ret i1 %class
@@ -2142,24 +2152,19 @@ define i1 @is_plus_inf_or_nan_f(float %x) {
21422152define i1 @is_minus_inf_or_nan_f (float %x ) {
21432153; X86-LABEL: is_minus_inf_or_nan_f:
21442154; X86: # %bb.0:
2145- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2146- ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2147- ; X86-NEXT: sete %cl
2148- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2149- ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2150- ; X86-NEXT: setge %al
2151- ; X86-NEXT: orb %cl, %al
2155+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2156+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2157+ ; X86-NEXT: fucompp
2158+ ; X86-NEXT: fnstsw %ax
2159+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2160+ ; X86-NEXT: sahf
2161+ ; X86-NEXT: sete %al
21522162; X86-NEXT: retl
21532163;
21542164; X64-LABEL: is_minus_inf_or_nan_f:
21552165; X64: # %bb.0:
2156- ; X64-NEXT: movd %xmm0, %eax
2157- ; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2158- ; X64-NEXT: sete %cl
2159- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2160- ; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
2161- ; X64-NEXT: setge %al
2162- ; X64-NEXT: orb %cl, %al
2166+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2167+ ; X64-NEXT: sete %al
21632168; X64-NEXT: retq
21642169 %class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 7 ) ; "-inf|nan"
21652170 ret i1 %class
@@ -2168,24 +2173,19 @@ define i1 @is_minus_inf_or_nan_f(float %x) {
21682173define i1 @not_is_plus_inf_or_nan_f (float %x ) {
21692174; X86-LABEL: not_is_plus_inf_or_nan_f:
21702175; X86: # %bb.0:
2171- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2172- ; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2173- ; X86-NEXT: sete %cl
2174- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2175- ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2176- ; X86-NEXT: setl %al
2177- ; X86-NEXT: orb %cl, %al
2176+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2177+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2178+ ; X86-NEXT: fucompp
2179+ ; X86-NEXT: fnstsw %ax
2180+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2181+ ; X86-NEXT: sahf
2182+ ; X86-NEXT: setne %al
21782183; X86-NEXT: retl
21792184;
21802185; X64-LABEL: not_is_plus_inf_or_nan_f:
21812186; X64: # %bb.0:
2182- ; X64-NEXT: movd %xmm0, %eax
2183- ; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000
2184- ; X64-NEXT: sete %cl
2185- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2186- ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2187- ; X64-NEXT: setl %al
2188- ; X64-NEXT: orb %cl, %al
2187+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2188+ ; X64-NEXT: setne %al
21892189; X64-NEXT: retq
21902190 %class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 508 ) ; ~(0x200|0x3) = "~(+inf|nan)"
21912191 ret i1 %class
@@ -2194,24 +2194,19 @@ define i1 @not_is_plus_inf_or_nan_f(float %x) {
21942194define i1 @not_is_minus_inf_or_nan_f (float %x ) {
21952195; X86-LABEL: not_is_minus_inf_or_nan_f:
21962196; X86: # %bb.0:
2197- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2198- ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2199- ; X86-NEXT: sete %cl
2200- ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2201- ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2202- ; X86-NEXT: setl %al
2203- ; X86-NEXT: orb %cl, %al
2197+ ; X86-NEXT: flds {{[0-9]+}}(%esp)
2198+ ; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}
2199+ ; X86-NEXT: fucompp
2200+ ; X86-NEXT: fnstsw %ax
2201+ ; X86-NEXT: # kill: def $ah killed $ah killed $ax
2202+ ; X86-NEXT: sahf
2203+ ; X86-NEXT: setne %al
22042204; X86-NEXT: retl
22052205;
22062206; X64-LABEL: not_is_minus_inf_or_nan_f:
22072207; X64: # %bb.0:
2208- ; X64-NEXT: movd %xmm0, %eax
2209- ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2210- ; X64-NEXT: sete %cl
2211- ; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
2212- ; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
2213- ; X64-NEXT: setl %al
2214- ; X64-NEXT: orb %cl, %al
2208+ ; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2209+ ; X64-NEXT: setne %al
22152210; X64-NEXT: retq
22162211 %class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1016 ) ; "~(-inf|nan)"
22172212 ret i1 %class
0 commit comments