@@ -992,3 +992,75 @@ define float @fdiv_nnan_neg_zero_f32(float %x) {
992
992
%fdiv = fdiv nnan float %x , -0 .0
993
993
ret float %fdiv
994
994
}
995
+
996
+ define double @test_positive_zero_nsz (double %X ) {
997
+ ; CHECK-LABEL: @test_positive_zero_nsz(
998
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan nsz double @llvm.copysign.f64(double 0x7FF0000000000000, double [[X:%.*]])
999
+ ; CHECK-NEXT: ret double [[TMP1]]
1000
+ ;
1001
+ %1 = fdiv nnan nsz double %X , 0 .0
1002
+ ret double %1
1003
+ }
1004
+
1005
+ define double @test_negative_zero_nsz (double %X ) {
1006
+ ; CHECK-LABEL: @test_negative_zero_nsz(
1007
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan nsz double @llvm.copysign.f64(double 0x7FF0000000000000, double [[X:%.*]])
1008
+ ; CHECK-NEXT: ret double [[TMP1]]
1009
+ ;
1010
+ %1 = fdiv nnan nsz double %X , -0 .0
1011
+ ret double %1
1012
+ }
1013
+
1014
+ define double @test_positive_zero (double %X ) {
1015
+ ; CHECK-LABEL: @test_positive_zero(
1016
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan double @llvm.copysign.f64(double 0x7FF0000000000000, double [[X:%.*]])
1017
+ ; CHECK-NEXT: ret double [[TMP1]]
1018
+ ;
1019
+ %1 = fdiv nnan double %X , 0 .0
1020
+ ret double %1
1021
+ }
1022
+
1023
+ define double @test_negative_zero (double %X ) {
1024
+ ; CHECK-LABEL: @test_negative_zero(
1025
+ ; CHECK-NEXT: [[TMP1:%.*]] = fdiv nnan double [[X:%.*]], -0.000000e+00
1026
+ ; CHECK-NEXT: ret double [[TMP1]]
1027
+ ;
1028
+ %1 = fdiv nnan double %X , -0 .0
1029
+ ret double %1
1030
+ }
1031
+
1032
+ define <2 x double > @test_positive_zero_vector_nsz (<2 x double > %X ) {
1033
+ ; CHECK-LABEL: @test_positive_zero_vector_nsz(
1034
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan nsz <2 x double> @llvm.copysign.v2f64(<2 x double> <double 0x7FF0000000000000, double 0x7FF0000000000000>, <2 x double> [[X:%.*]])
1035
+ ; CHECK-NEXT: ret <2 x double> [[TMP1]]
1036
+ ;
1037
+ %1 = fdiv nnan nsz <2 x double > %X , <double 0 .0 , double 0 .0 >
1038
+ ret <2 x double > %1
1039
+ }
1040
+
1041
+ define <2 x double > @test_negative_zero_vector_nsz (<2 x double > %X ) {
1042
+ ; CHECK-LABEL: @test_negative_zero_vector_nsz(
1043
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan nsz <2 x double> @llvm.copysign.v2f64(<2 x double> <double 0x7FF0000000000000, double 0x7FF0000000000000>, <2 x double> [[X:%.*]])
1044
+ ; CHECK-NEXT: ret <2 x double> [[TMP1]]
1045
+ ;
1046
+ %1 = fdiv nnan nsz <2 x double > %X , <double -0 .0 , double 0 .0 >
1047
+ ret <2 x double > %1
1048
+ }
1049
+
1050
+ define <2 x double > @test_positive_zero_vector (<2 x double > %X ) {
1051
+ ; CHECK-LABEL: @test_positive_zero_vector(
1052
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan <2 x double> @llvm.copysign.v2f64(<2 x double> <double 0x7FF0000000000000, double 0x7FF0000000000000>, <2 x double> [[X:%.*]])
1053
+ ; CHECK-NEXT: ret <2 x double> [[TMP1]]
1054
+ ;
1055
+ %1 = fdiv nnan <2 x double > %X , <double 0 .0 , double 0 .0 >
1056
+ ret <2 x double > %1
1057
+ }
1058
+
1059
+ define <2 x double > @test_negative_zero_vector (<2 x double > %X ) {
1060
+ ; CHECK-LABEL: @test_negative_zero_vector(
1061
+ ; CHECK-NEXT: [[TMP1:%.*]] = fdiv nnan <2 x double> [[X:%.*]], <double -0.000000e+00, double 0.000000e+00>
1062
+ ; CHECK-NEXT: ret <2 x double> [[TMP1]]
1063
+ ;
1064
+ %1 = fdiv nnan <2 x double > %X , <double -0 .0 , double 0 .0 >
1065
+ ret <2 x double > %1
1066
+ }
0 commit comments