@@ -186,15 +186,20 @@ entry:
186
186
define i1 @is_plus_inf_f (float %x ) {
187
187
; X86-LABEL: is_plus_inf_f:
188
188
; 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
191
197
; X86-NEXT: retl
192
198
;
193
199
; X64-LABEL: is_plus_inf_f:
194
200
; 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
198
203
; X64-NEXT: retq
199
204
entry:
200
205
%0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 512 ) ; 0x200 = "+inf"
@@ -204,15 +209,20 @@ entry:
204
209
define i1 @is_minus_inf_f (float %x ) {
205
210
; X86-LABEL: is_minus_inf_f:
206
211
; 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
209
219
; X86-NEXT: retl
210
220
;
211
221
; X64-LABEL: is_minus_inf_f:
212
222
; 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
216
226
; X64-NEXT: retq
217
227
entry:
218
228
%0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 4 ) ; "-inf"
@@ -222,15 +232,20 @@ entry:
222
232
define i1 @not_is_minus_inf_f (float %x ) {
223
233
; X86-LABEL: not_is_minus_inf_f:
224
234
; 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
227
242
; X86-NEXT: retl
228
243
;
229
244
; X64-LABEL: not_is_minus_inf_f:
230
245
; 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
234
249
; X64-NEXT: retq
235
250
entry:
236
251
%0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1019 ) ; ~"-inf"
@@ -2116,24 +2131,19 @@ entry:
2116
2131
define i1 @is_plus_inf_or_nan_f (float %x ) {
2117
2132
; X86-LABEL: is_plus_inf_or_nan_f:
2118
2133
; 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
2126
2141
; X86-NEXT: retl
2127
2142
;
2128
2143
; X64-LABEL: is_plus_inf_or_nan_f:
2129
2144
; 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
2137
2147
; X64-NEXT: retq
2138
2148
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 515 ) ; 0x200|0x3 = "+inf|nan"
2139
2149
ret i1 %class
@@ -2142,24 +2152,19 @@ define i1 @is_plus_inf_or_nan_f(float %x) {
2142
2152
define i1 @is_minus_inf_or_nan_f (float %x ) {
2143
2153
; X86-LABEL: is_minus_inf_or_nan_f:
2144
2154
; 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
2152
2162
; X86-NEXT: retl
2153
2163
;
2154
2164
; X64-LABEL: is_minus_inf_or_nan_f:
2155
2165
; 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
2163
2168
; X64-NEXT: retq
2164
2169
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 7 ) ; "-inf|nan"
2165
2170
ret i1 %class
@@ -2168,24 +2173,19 @@ define i1 @is_minus_inf_or_nan_f(float %x) {
2168
2173
define i1 @not_is_plus_inf_or_nan_f (float %x ) {
2169
2174
; X86-LABEL: not_is_plus_inf_or_nan_f:
2170
2175
; 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
2178
2183
; X86-NEXT: retl
2179
2184
;
2180
2185
; X64-LABEL: not_is_plus_inf_or_nan_f:
2181
2186
; 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
2189
2189
; X64-NEXT: retq
2190
2190
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 508 ) ; ~(0x200|0x3) = "~(+inf|nan)"
2191
2191
ret i1 %class
@@ -2194,24 +2194,19 @@ define i1 @not_is_plus_inf_or_nan_f(float %x) {
2194
2194
define i1 @not_is_minus_inf_or_nan_f (float %x ) {
2195
2195
; X86-LABEL: not_is_minus_inf_or_nan_f:
2196
2196
; 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
2204
2204
; X86-NEXT: retl
2205
2205
;
2206
2206
; X64-LABEL: not_is_minus_inf_or_nan_f:
2207
2207
; 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
2215
2210
; X64-NEXT: retq
2216
2211
%class = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1016 ) ; "~(-inf|nan)"
2217
2212
ret i1 %class
0 commit comments