@@ -815,3 +815,93 @@ define float @maxnum_with_pos_one_op(float %a) {
815
815
%fabs = call float @llvm.fabs.f32 (float %max )
816
816
ret float %fabs
817
817
}
818
+
819
+ define double @fadd_nnan_inf_op0 (double %x ) {
820
+ ; CHECK-LABEL: @fadd_nnan_inf_op0(
821
+ ; CHECK-NEXT: [[R:%.*]] = fadd nnan double 0x7FF0000000000000, [[X:%.*]]
822
+ ; CHECK-NEXT: ret double [[R]]
823
+ ;
824
+ %r = fadd nnan double 0x7ff0000000000000 , %x
825
+ ret double %r
826
+ }
827
+
828
+ define double @fadd_nnan_inf_op1 (double %x ) {
829
+ ; CHECK-LABEL: @fadd_nnan_inf_op1(
830
+ ; CHECK-NEXT: [[R:%.*]] = fadd nnan double [[X:%.*]], 0x7FF0000000000000
831
+ ; CHECK-NEXT: ret double [[R]]
832
+ ;
833
+ %r = fadd nnan double %x , 0x7ff0000000000000
834
+ ret double %r
835
+ }
836
+
837
+ define <2 x double > @fadd_nnan_neginf_op1 (<2 x double > %x ) {
838
+ ; CHECK-LABEL: @fadd_nnan_neginf_op1(
839
+ ; CHECK-NEXT: [[R:%.*]] = fadd nnan <2 x double> [[X:%.*]], <double 0xFFF0000000000000, double poison>
840
+ ; CHECK-NEXT: ret <2 x double> [[R]]
841
+ ;
842
+ %r = fadd nnan <2 x double > %x , <double 0xfff0000000000000 , double poison>
843
+ ret <2 x double > %r
844
+ }
845
+
846
+ define double @fadd_nnan_neginf_op0 (double %x ) {
847
+ ; CHECK-LABEL: @fadd_nnan_neginf_op0(
848
+ ; CHECK-NEXT: [[R:%.*]] = fadd nnan double 0xFFF0000000000000, [[X:%.*]]
849
+ ; CHECK-NEXT: ret double [[R]]
850
+ ;
851
+ %r = fadd nnan double 0xfff0000000000000 , %x
852
+ ret double %r
853
+ }
854
+
855
+ define double @fadd_inf_op0 (double %x ) {
856
+ ; CHECK-LABEL: @fadd_inf_op0(
857
+ ; CHECK-NEXT: [[R:%.*]] = fadd double 0x7FF0000000000000, [[X:%.*]]
858
+ ; CHECK-NEXT: ret double [[R]]
859
+ ;
860
+ %r = fadd double 0x7ff0000000000000 , %x
861
+ ret double %r
862
+ }
863
+
864
+ define double @fsub_nnan_inf_op0 (double %x ) {
865
+ ; CHECK-LABEL: @fsub_nnan_inf_op0(
866
+ ; CHECK-NEXT: [[R:%.*]] = fsub nnan double 0x7FF0000000000000, [[X:%.*]]
867
+ ; CHECK-NEXT: ret double [[R]]
868
+ ;
869
+ %r = fsub nnan double 0x7ff0000000000000 , %x
870
+ ret double %r
871
+ }
872
+
873
+ define double @fsub_nnan_inf_op1 (double %x ) {
874
+ ; CHECK-LABEL: @fsub_nnan_inf_op1(
875
+ ; CHECK-NEXT: [[R:%.*]] = fsub nnan double [[X:%.*]], 0x7FF0000000000000
876
+ ; CHECK-NEXT: ret double [[R]]
877
+ ;
878
+ %r = fsub nnan double %x , 0x7ff0000000000000
879
+ ret double %r
880
+ }
881
+
882
+ define <2 x double > @fsub_nnan_neginf_op0 (<2 x double > %x ) {
883
+ ; CHECK-LABEL: @fsub_nnan_neginf_op0(
884
+ ; CHECK-NEXT: [[R:%.*]] = fsub nnan <2 x double> <double 0xFFF0000000000000, double poison>, [[X:%.*]]
885
+ ; CHECK-NEXT: ret <2 x double> [[R]]
886
+ ;
887
+ %r = fsub nnan <2 x double > <double 0xfff0000000000000 , double poison>, %x
888
+ ret <2 x double > %r
889
+ }
890
+
891
+ define double @fsub_nnan_neginf_op1 (double %x ) {
892
+ ; CHECK-LABEL: @fsub_nnan_neginf_op1(
893
+ ; CHECK-NEXT: [[R:%.*]] = fsub nnan double [[X:%.*]], 0xFFF0000000000000
894
+ ; CHECK-NEXT: ret double [[R]]
895
+ ;
896
+ %r = fsub nnan double %x , 0xfff0000000000000
897
+ ret double %r
898
+ }
899
+
900
+ define double @fsub_inf_op0 (double %x ) {
901
+ ; CHECK-LABEL: @fsub_inf_op0(
902
+ ; CHECK-NEXT: [[R:%.*]] = fsub double 0x7FF0000000000000, [[X:%.*]]
903
+ ; CHECK-NEXT: ret double [[R]]
904
+ ;
905
+ %r = fsub double 0x7ff0000000000000 , %x
906
+ ret double %r
907
+ }
0 commit comments