@@ -234,44 +234,84 @@ define i1 @orderedLessZeroPowi(double,double) {
234
234
ret i1 %olt
235
235
}
236
236
237
- define i1 @orderedLessZeroUIToFP (i32 %x ) {
238
- ; CHECK-LABEL: @orderedLessZeroUIToFP (
237
+ define i1 @UIToFP_is_nan_or_positive_or_zero (i32 %x ) {
238
+ ; CHECK-LABEL: @UIToFP_is_nan_or_positive_or_zero (
239
239
; CHECK-NEXT: ret i1 true
240
240
;
241
241
%a = uitofp i32 %x to float
242
- %uge = fcmp uge float %a , 0 .000000e+00
243
- ret i1 %uge
242
+ %r = fcmp uge float %a , 0 .000000e+00
243
+ ret i1 %r
244
244
}
245
245
246
- define <2 x i1 > @orderedLessZeroUIToFP_vec (<2 x i32 > %x ) {
247
- ; CHECK-LABEL: @orderedLessZeroUIToFP_vec (
246
+ define <2 x i1 > @UIToFP_is_nan_or_positive_or_zero_vec (<2 x i32 > %x ) {
247
+ ; CHECK-LABEL: @UIToFP_is_nan_or_positive_or_zero_vec (
248
248
; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
249
249
;
250
250
%a = uitofp <2 x i32 > %x to <2 x float >
251
- %uge = fcmp uge <2 x float > %a , zeroinitializer
252
- ret <2 x i1 > %uge
251
+ %r = fcmp uge <2 x float > %a , zeroinitializer
252
+ ret <2 x i1 > %r
253
253
}
254
254
255
- define i1 @orderedLessZeroUIToFP_nnan (i32 %x ) {
256
- ; CHECK-LABEL: @orderedLessZeroUIToFP_nnan (
255
+ define i1 @UIToFP_nnan_is_positive_or_zero (i32 %x ) {
256
+ ; CHECK-LABEL: @UIToFP_nnan_is_positive_or_zero (
257
257
; CHECK-NEXT: [[A:%.*]] = uitofp i32 [[X:%.*]] to float
258
- ; CHECK-NEXT: [[UGE :%.*]] = fcmp nnan oge float [[A]], 0.000000e+00
259
- ; CHECK-NEXT: ret i1 [[UGE ]]
258
+ ; CHECK-NEXT: [[R :%.*]] = fcmp nnan oge float [[A]], 0.000000e+00
259
+ ; CHECK-NEXT: ret i1 [[R ]]
260
260
;
261
261
%a = uitofp i32 %x to float
262
- %uge = fcmp nnan oge float %a , 0 .000000e+00
263
- ret i1 %uge
262
+ %r = fcmp nnan oge float %a , 0 .000000e+00
263
+ ret i1 %r
264
264
}
265
265
266
- define <2 x i1 > @orderedLessZeroUIToFP_nnan_vec (<2 x i32 > %x ) {
267
- ; CHECK-LABEL: @orderedLessZeroUIToFP_nnan_vec (
266
+ define <2 x i1 > @UIToFP_nnan_is_positive_or_zero_vec (<2 x i32 > %x ) {
267
+ ; CHECK-LABEL: @UIToFP_nnan_is_positive_or_zero_vec (
268
268
; CHECK-NEXT: [[A:%.*]] = uitofp <2 x i32> [[X:%.*]] to <2 x float>
269
- ; CHECK-NEXT: [[UGE:%.*]] = fcmp nnan oge <2 x float> [[A]], zeroinitializer
270
- ; CHECK-NEXT: ret <2 x i1> [[UGE]]
269
+ ; CHECK-NEXT: [[R:%.*]] = fcmp nnan oge <2 x float> [[A]], zeroinitializer
270
+ ; CHECK-NEXT: ret <2 x i1> [[R]]
271
+ ;
272
+ %a = uitofp <2 x i32 > %x to <2 x float >
273
+ %r = fcmp nnan oge <2 x float > %a , zeroinitializer
274
+ ret <2 x i1 > %r
275
+ }
276
+
277
+ define i1 @UIToFP_is_not_negative (i32 %x ) {
278
+ ; CHECK-LABEL: @UIToFP_is_not_negative(
279
+ ; CHECK-NEXT: ret i1 false
280
+ ;
281
+ %a = uitofp i32 %x to float
282
+ %r = fcmp olt float %a , 0 .000000e+00
283
+ ret i1 %r
284
+ }
285
+
286
+ define <2 x i1 > @UIToFP_is_not_negative_vec (<2 x i32 > %x ) {
287
+ ; CHECK-LABEL: @UIToFP_is_not_negative_vec(
288
+ ; CHECK-NEXT: ret <2 x i1> zeroinitializer
271
289
;
272
290
%a = uitofp <2 x i32 > %x to <2 x float >
273
- %uge = fcmp nnan oge <2 x float > %a , zeroinitializer
274
- ret <2 x i1 > %uge
291
+ %r = fcmp olt <2 x float > %a , zeroinitializer
292
+ ret <2 x i1 > %r
293
+ }
294
+
295
+ define i1 @UIToFP_nnan_is_not_negative (i32 %x ) {
296
+ ; CHECK-LABEL: @UIToFP_nnan_is_not_negative(
297
+ ; CHECK-NEXT: [[A:%.*]] = uitofp i32 [[X:%.*]] to float
298
+ ; CHECK-NEXT: [[R:%.*]] = fcmp nnan ult float [[A]], 0.000000e+00
299
+ ; CHECK-NEXT: ret i1 [[R]]
300
+ ;
301
+ %a = uitofp i32 %x to float
302
+ %r = fcmp nnan ult float %a , 0 .000000e+00
303
+ ret i1 %r
304
+ }
305
+
306
+ define <2 x i1 > @UIToFP_nnan_is_not_negative_vec (<2 x i32 > %x ) {
307
+ ; CHECK-LABEL: @UIToFP_nnan_is_not_negative_vec(
308
+ ; CHECK-NEXT: [[A:%.*]] = uitofp <2 x i32> [[X:%.*]] to <2 x float>
309
+ ; CHECK-NEXT: [[R:%.*]] = fcmp nnan ult <2 x float> [[A]], zeroinitializer
310
+ ; CHECK-NEXT: ret <2 x i1> [[R]]
311
+ ;
312
+ %a = uitofp <2 x i32 > %x to <2 x float >
313
+ %r = fcmp nnan ult <2 x float > %a , zeroinitializer
314
+ ret <2 x i1 > %r
275
315
}
276
316
277
317
define i1 @fabs_is_nan_or_positive_or_zero (double %x ) {
@@ -314,6 +354,46 @@ define <2 x i1> @fabs_nnan_is_positive_or_zero_vec(<2 x double> %x) {
314
354
ret <2 x i1 > %cmp
315
355
}
316
356
357
+ define i1 @fabs_is_not_negative (double %x ) {
358
+ ; CHECK-LABEL: @fabs_is_not_negative(
359
+ ; CHECK-NEXT: ret i1 false
360
+ ;
361
+ %fabs = tail call double @llvm.fabs.f64 (double %x )
362
+ %cmp = fcmp olt double %fabs , 0 .0
363
+ ret i1 %cmp
364
+ }
365
+
366
+ define <2 x i1 > @fabs_is_not_negative_vec (<2 x double > %x ) {
367
+ ; CHECK-LABEL: @fabs_is_not_negative_vec(
368
+ ; CHECK-NEXT: ret <2 x i1> zeroinitializer
369
+ ;
370
+ %fabs = tail call <2 x double > @llvm.fabs.v2f64 (<2 x double > %x )
371
+ %cmp = fcmp olt <2 x double > %fabs , zeroinitializer
372
+ ret <2 x i1 > %cmp
373
+ }
374
+
375
+ define i1 @fabs_nnan_is_not_negative (double %x ) {
376
+ ; CHECK-LABEL: @fabs_nnan_is_not_negative(
377
+ ; CHECK-NEXT: [[FABS:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
378
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ult double [[FABS]], 0.000000e+00
379
+ ; CHECK-NEXT: ret i1 [[CMP]]
380
+ ;
381
+ %fabs = tail call double @llvm.fabs.f64 (double %x )
382
+ %cmp = fcmp nnan ult double %fabs , 0 .0
383
+ ret i1 %cmp
384
+ }
385
+
386
+ define <2 x i1 > @fabs_nnan_is_not_negative_vec (<2 x double > %x ) {
387
+ ; CHECK-LABEL: @fabs_nnan_is_not_negative_vec(
388
+ ; CHECK-NEXT: [[FABS:%.*]] = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> [[X:%.*]])
389
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ult <2 x double> [[FABS]], zeroinitializer
390
+ ; CHECK-NEXT: ret <2 x i1> [[CMP]]
391
+ ;
392
+ %fabs = tail call <2 x double > @llvm.fabs.v2f64 (<2 x double > %x )
393
+ %cmp = fcmp nnan ult <2 x double > %fabs , zeroinitializer
394
+ ret <2 x i1 > %cmp
395
+ }
396
+
317
397
define i1 @orderedLessZeroSelect (float , float ) {
318
398
; CHECK-LABEL: @orderedLessZeroSelect(
319
399
; CHECK-NEXT: ret i1 true
0 commit comments