@@ -427,28 +427,28 @@ define float @fmul_by_snan_if_0_oeq_zero_f32(float %x) {
427
427
define float @fmul_by_var_if_0_oeq_zero_f32 (float %x , float %y ) {
428
428
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32(
429
429
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
430
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
430
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
431
431
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul float [[SCALED_X]], [[X]]
432
432
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
433
433
;
434
434
%x.is.zero = fcmp oeq float %x , 0 .0
435
435
%scaled.x = fmul float %x , %y
436
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
436
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
437
437
ret float %scaled.if.denormal
438
438
}
439
439
440
440
define float @fmul_by_fabs_var_if_0_oeq_zero_f32 (float %x , float %y ) {
441
441
; CHECK-LABEL: @fmul_by_fabs_var_if_0_oeq_zero_f32(
442
442
; CHECK-NEXT: [[Y_FABS:%.*]] = call float @llvm.fabs.f32(float [[Y:%.*]])
443
443
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
444
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y_FABS]], float 1.000000e+00
444
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y_FABS]], float 1.000000e+00
445
445
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul float [[SCALED_X]], [[X]]
446
446
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
447
447
;
448
448
%y.fabs = call float @llvm.fabs.f32 (float %y )
449
449
%x.is.zero = fcmp oeq float %x , 0 .0
450
450
%scaled.x = fmul float %x , %y.fabs
451
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
451
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
452
452
ret float %scaled.if.denormal
453
453
}
454
454
@@ -467,55 +467,55 @@ define float @fmul_by_fabs_nnan_ninf_var_if_0_oeq_zero_f32(float %x, float %y) {
467
467
define float @fmul_by_var_if_0_oeq_zero_f32_nsz_fmul (float %x , float %y ) {
468
468
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_fmul(
469
469
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
470
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
470
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
471
471
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nsz float [[SCALED_X]], [[X]]
472
472
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
473
473
;
474
474
%x.is.zero = fcmp oeq float %x , 0 .0
475
475
%scaled.x = fmul nsz float %x , %y
476
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
476
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
477
477
ret float %scaled.if.denormal
478
478
}
479
479
480
480
; nsz ninf is not sufficient
481
481
define float @fmul_by_var_if_0_oeq_zero_f32_nsz_ninf_fmul (float %x , float %y ) {
482
482
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_ninf_fmul(
483
483
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
484
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
484
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
485
485
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul ninf nsz float [[SCALED_X]], [[X]]
486
486
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
487
487
;
488
488
%x.is.zero = fcmp oeq float %x , 0 .0
489
489
%scaled.x = fmul nsz ninf float %x , %y
490
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
490
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
491
491
ret float %scaled.if.denormal
492
492
}
493
493
494
494
; nsz nnan is not sufficient
495
495
define float @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_fmul (float %x , float %y ) {
496
496
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_fmul(
497
497
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
498
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
498
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
499
499
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan nsz float [[SCALED_X]], [[X]]
500
500
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
501
501
;
502
502
%x.is.zero = fcmp oeq float %x , 0 .0
503
503
%scaled.x = fmul nsz nnan float %x , %y
504
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
504
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
505
505
ret float %scaled.if.denormal
506
506
}
507
507
508
508
; nnan ninf is not sufficient
509
509
define float @fmul_by_var_if_0_oeq_zero_f32_nnan_ninf_fmul (float %x , float %y ) {
510
510
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nnan_ninf_fmul(
511
511
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
512
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
512
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
513
513
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf float [[SCALED_X]], [[X]]
514
514
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
515
515
;
516
516
%x.is.zero = fcmp oeq float %x , 0 .0
517
517
%scaled.x = fmul nnan ninf float %x , %y
518
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
518
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
519
519
ret float %scaled.if.denormal
520
520
}
521
521
@@ -558,53 +558,53 @@ define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_nsz_inverted(f
558
558
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz (float %x , float %y ) {
559
559
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(
560
560
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
561
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
561
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
562
562
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf nsz float [[SCALED_X]], [[X]]
563
563
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
564
564
;
565
565
%x.is.zero = fcmp oeq float %x , 0 .0
566
566
%scaled.x = fmul nnan ninf nsz float %x , %y
567
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
567
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
568
568
ret float %scaled.if.denormal
569
569
}
570
570
571
571
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz_commuted (float %x , float %y ) {
572
572
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz_commuted(
573
573
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
574
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
574
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
575
575
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf nsz float [[SCALED_X]], [[X]]
576
576
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
577
577
;
578
578
%x.is.zero = fcmp oeq float %x , 0 .0
579
579
%scaled.x = fmul nnan ninf nsz float %y , %x
580
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
580
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
581
581
ret float %scaled.if.denormal
582
582
}
583
583
584
584
; test computeKnownFPClass is checked
585
585
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero (float %x , float nofpclass(nzero) %y ) {
586
586
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero(
587
587
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
588
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
588
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
589
589
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf float [[SCALED_X]], [[X]]
590
590
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
591
591
;
592
592
%x.is.zero = fcmp oeq float %x , 0 .0
593
593
%scaled.x = fmul nnan ninf float %x , %y
594
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
594
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
595
595
ret float %scaled.if.denormal
596
596
}
597
597
598
598
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero_negsub (float %x , float nofpclass(nzero nsub) %y ) {
599
599
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero_negsub(
600
600
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
601
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
601
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
602
602
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf float [[SCALED_X]], [[X]]
603
603
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
604
604
;
605
605
%x.is.zero = fcmp oeq float %x , 0 .0
606
606
%scaled.x = fmul nnan ninf float %x , %y
607
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
607
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
608
608
ret float %scaled.if.denormal
609
609
}
610
610
@@ -622,26 +622,26 @@ define float @fmul_by_var_if_0_oeq_zero_f32_known_never_nan_inf_select_nsz(float
622
622
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero (float %x , float nofpclass(nan inf nzero) %y ) {
623
623
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero(
624
624
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
625
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
625
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
626
626
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul float [[SCALED_X]], [[X]]
627
627
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
628
628
;
629
629
%x.is.zero = fcmp oeq float %x , 0 .0
630
630
%scaled.x = fmul float %x , %y
631
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
631
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
632
632
ret float %scaled.if.denormal
633
633
}
634
634
635
635
define float @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero_nsub (float %x , float nofpclass(nan inf nzero nsub) %y ) {
636
636
; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero_nsub(
637
637
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
638
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
638
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00
639
639
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul float [[SCALED_X]], [[X]]
640
640
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
641
641
;
642
642
%x.is.zero = fcmp oeq float %x , 0 .0
643
643
%scaled.x = fmul float %x , %y
644
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
644
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
645
645
ret float %scaled.if.denormal
646
646
}
647
647
@@ -692,26 +692,26 @@ define float @fmul_by_var_if_not_one_0_zero_f32_assume_finite_fmul_nsz(float %x,
692
692
define float @fmul_by_self_if_0_oeq_zero_f32 (float %x ) {
693
693
; CHECK-LABEL: @fmul_by_self_if_0_oeq_zero_f32(
694
694
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
695
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00
695
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00
696
696
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul float [[SCALED_X]], [[X]]
697
697
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
698
698
;
699
699
%x.is.zero = fcmp oeq float %x , 0 .0
700
700
%scaled.x = fmul float %x , %x
701
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
701
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
702
702
ret float %scaled.if.denormal
703
703
}
704
704
705
705
define float @fmul_by_self_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz (float %x ) {
706
706
; CHECK-LABEL: @fmul_by_self_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(
707
707
; CHECK-NEXT: [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00
708
- ; CHECK-NEXT: [[SCALED_X:%.*]] = select i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00
708
+ ; CHECK-NEXT: [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00
709
709
; CHECK-NEXT: [[SCALED_IF_DENORMAL:%.*]] = fmul nnan ninf nsz float [[SCALED_X]], [[X]]
710
710
; CHECK-NEXT: ret float [[SCALED_IF_DENORMAL]]
711
711
;
712
712
%x.is.zero = fcmp oeq float %x , 0 .0
713
713
%scaled.x = fmul nnan ninf nsz float %x , %x
714
- %scaled.if.denormal = select i1 %x.is.zero , float %scaled.x , float %x
714
+ %scaled.if.denormal = select nnan i1 %x.is.zero , float %scaled.x , float %x
715
715
ret float %scaled.if.denormal
716
716
}
717
717
0 commit comments