@@ -706,11 +706,10 @@ define i32 @select_lshr_icmp_const_different_values(i32 %x, i32 %y) {
706
706
ret i32 %C
707
707
}
708
708
709
- ; Invalid identity constant for FP op
710
- define float @select_fadd_fcmp_bad (float %x , float %y , float %z ) {
711
- ; CHECK-LABEL: @select_fadd_fcmp_bad(
709
+ define float @select_fadd_fcmp_equiv (float %x , float %y , float %z ) {
710
+ ; CHECK-LABEL: @select_fadd_fcmp_equiv(
712
711
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], -1.000000e+00
713
- ; CHECK-NEXT: [[B:%.*]] = fadd nsz float [[X]], [[ Z:%.*]]
712
+ ; CHECK-NEXT: [[B:%.*]] = fadd nsz float [[Z:%.*]], -1.000000e+00
714
713
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
715
714
; CHECK-NEXT: ret float [[C]]
716
715
;
@@ -720,6 +719,19 @@ define float @select_fadd_fcmp_bad(float %x, float %y, float %z) {
720
719
ret float %C
721
720
}
722
721
722
+ define float @select_fadd_fcmp_equiv2 (float %x , float %y , float %z ) {
723
+ ; CHECK-LABEL: @select_fadd_fcmp_equiv2(
724
+ ; CHECK-NEXT: [[A:%.*]] = fcmp une float [[X:%.*]], -1.000000e+00
725
+ ; CHECK-NEXT: [[B:%.*]] = fadd nsz float [[Z:%.*]], -1.000000e+00
726
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[Y:%.*]], float [[B]]
727
+ ; CHECK-NEXT: ret float [[C]]
728
+ ;
729
+ %A = fcmp une float %x , -1 .0
730
+ %B = fadd nsz float %x , %z
731
+ %C = select i1 %A , float %y , float %B
732
+ ret float %C
733
+ }
734
+
723
735
; Invalid comparison type
724
736
define float @select_fadd_fcmp_bad_2 (float %x , float %y , float %z ) {
725
737
; CHECK-LABEL: @select_fadd_fcmp_bad_2(
@@ -893,24 +905,10 @@ define float @select_fadd_fcmp_bad_13(float %x, float %y, float %z) {
893
905
ret float %C
894
906
}
895
907
896
- ; Invalid identity constant for FP op
897
- define float @select_fadd_fcmp_bad_14 (float %x , float %y , float %z ) {
898
- ; CHECK-LABEL: @select_fadd_fcmp_bad_14(
899
- ; CHECK-NEXT: [[A:%.*]] = fcmp une float [[X:%.*]], -1.000000e+00
900
- ; CHECK-NEXT: [[B:%.*]] = fadd nsz float [[X]], [[Z:%.*]]
901
- ; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[Y:%.*]], float [[B]]
902
- ; CHECK-NEXT: ret float [[C]]
903
- ;
904
- %A = fcmp une float %x , -1 .0
905
- %B = fadd nsz float %x , %z
906
- %C = select i1 %A , float %y , float %B
907
- ret float %C
908
- }
909
-
910
- define float @select_fmul_fcmp_bad (float %x , float %y , float %z ) {
911
- ; CHECK-LABEL: @select_fmul_fcmp_bad(
908
+ define float @select_fmul_fcmp_equiv (float %x , float %y , float %z ) {
909
+ ; CHECK-LABEL: @select_fmul_fcmp_equiv(
912
910
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], 3.000000e+00
913
- ; CHECK-NEXT: [[B:%.*]] = fmul nsz float [[X]], [[ Z:%.*]]
911
+ ; CHECK-NEXT: [[B:%.*]] = fmul nsz float [[Z:%.*]], 3.000000e+00
914
912
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
915
913
; CHECK-NEXT: ret float [[C]]
916
914
;
@@ -920,11 +918,10 @@ define float @select_fmul_fcmp_bad(float %x, float %y, float %z) {
920
918
ret float %C
921
919
}
922
920
923
- define float @select_fmul_fcmp_bad_2 (float %x , float %y , float %z ) {
924
- ; CHECK-LABEL: @select_fmul_fcmp_bad_2 (
921
+ define float @select_fmul_fcmp_equiv2 (float %x , float %y , float %z ) {
922
+ ; CHECK-LABEL: @select_fmul_fcmp_equiv2 (
925
923
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], 1.000000e+00
926
- ; CHECK-NEXT: [[B:%.*]] = fmul float [[X]], [[Z:%.*]]
927
- ; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
924
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B:%.*]], float [[Y:%.*]]
928
925
; CHECK-NEXT: ret float [[C]]
929
926
;
930
927
%A = fcmp oeq float %x , 1 .0
@@ -959,10 +956,10 @@ define float @select_fmul_icmp_bad_2(float %x, float %y, float %z, i32 %k) {
959
956
ret float %C
960
957
}
961
958
962
- define float @select_fdiv_fcmp_bad (float %x , float %y , float %z ) {
963
- ; CHECK-LABEL: @select_fdiv_fcmp_bad (
959
+ define float @select_fdiv_fcmp_equiv (float %x , float %y , float %z ) {
960
+ ; CHECK-LABEL: @select_fdiv_fcmp_equiv (
964
961
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], 1.000000e+00
965
- ; CHECK-NEXT: [[B:%.*]] = fdiv float [[X]] , [[Z:%.*]]
962
+ ; CHECK-NEXT: [[B:%.*]] = fdiv float 1.000000e+00 , [[Z:%.*]]
966
963
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
967
964
; CHECK-NEXT: ret float [[C]]
968
965
;
@@ -972,10 +969,10 @@ define float @select_fdiv_fcmp_bad(float %x, float %y, float %z) {
972
969
ret float %C
973
970
}
974
971
975
- define float @select_fdiv_fcmp_bad_2 (float %x , float %y , float %z ) {
976
- ; CHECK-LABEL: @select_fdiv_fcmp_bad_2 (
972
+ define float @select_fdiv_fcmp_equiv2 (float %x , float %y , float %z ) {
973
+ ; CHECK-LABEL: @select_fdiv_fcmp_equiv2 (
977
974
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], 3.000000e+00
978
- ; CHECK-NEXT: [[B:%.*]] = fdiv nsz float [[X]] , [[Z:%.*]]
975
+ ; CHECK-NEXT: [[B:%.*]] = fdiv nsz float 3.000000e+00 , [[Z:%.*]]
979
976
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
980
977
; CHECK-NEXT: ret float [[C]]
981
978
;
@@ -1001,10 +998,10 @@ define float @select_fsub_fcmp_bad(float %x, float %y, float %z) {
1001
998
ret float %C
1002
999
}
1003
1000
1004
- define float @select_fsub_fcmp_bad_2 (float %x , float %y , float %z ) {
1005
- ; CHECK-LABEL: @select_fsub_fcmp_bad_2 (
1001
+ define float @select_fsub_fcmp_equiv (float %x , float %y , float %z ) {
1002
+ ; CHECK-LABEL: @select_fsub_fcmp_equiv (
1006
1003
; CHECK-NEXT: [[A:%.*]] = fcmp oeq float [[X:%.*]], 1.000000e+00
1007
- ; CHECK-NEXT: [[B:%.*]] = fsub nsz float [[Z:%.*]], [[X]]
1004
+ ; CHECK-NEXT: [[B:%.*]] = fadd nsz float [[Z:%.*]], -1.000000e+00
1008
1005
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], float [[B]], float [[Y:%.*]]
1009
1006
; CHECK-NEXT: ret float [[C]]
1010
1007
;
0 commit comments