[compiler-rt] 689f1e8 - [compiler-rt] [builtins] Fix logb / logbl tests

Luís Marques via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 20 02:16:33 PST 2020


Author: Luís Marques
Date: 2020-02-20T10:16:03Z
New Revision: 689f1e85ba68db7440451a6834095a52d1526b00

URL: https://github.com/llvm/llvm-project/commit/689f1e85ba68db7440451a6834095a52d1526b00
DIFF: https://github.com/llvm/llvm-project/commit/689f1e85ba68db7440451a6834095a52d1526b00.diff

LOG: [compiler-rt] [builtins] Fix logb / logbl tests

Like was done before in D67999 for `logbf`, this patch fixes the tests for
the internal compiler-rt implementations of `logb` and `logbl` to consider
all NaNs equivalent. Not doing so was resulting in test failures for
riscv64, since the the NaNs had different signs, but the spec doesn't
specify the NaN signedness or payload.

Fixes bug 44244.

Reviewers: rupprecht, delcypher
Reviewed By: rupprecht, delcypher
Differential Revision: https://reviews.llvm.org/D74826

Added: 
    

Modified: 
    compiler-rt/test/builtins/Unit/compiler_rt_logb_test.c
    compiler-rt/test/builtins/Unit/compiler_rt_logbl_test.c

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/builtins/Unit/compiler_rt_logb_test.c b/compiler-rt/test/builtins/Unit/compiler_rt_logb_test.c
index c36b19ca3db1..de6ca1794204 100644
--- a/compiler-rt/test/builtins/Unit/compiler_rt_logb_test.c
+++ b/compiler-rt/test/builtins/Unit/compiler_rt_logb_test.c
@@ -20,8 +20,10 @@
 int test__compiler_rt_logb(fp_t x) {
   fp_t crt_value = __compiler_rt_logb(x);
   fp_t libm_value = logb(x);
-  // Compare actual rep, e.g. to avoid NaN != the same NaN
-  if (toRep(crt_value) != toRep(libm_value)) {
+  // Compare the values, considering all NaNs equivalent, as the spec doesn't
+  // specify the NaN signedness/payload.
+  if (crt_value != libm_value &&
+      !(crt_isnan(crt_value) && crt_isnan(libm_value))) {
     printf("error: in __compiler_rt_logb(%a [%lX]) = %a [%lX] !=  %a [%lX]\n",
            x, toRep(x), crt_value, toRep(crt_value), libm_value,
            toRep(libm_value));

diff  --git a/compiler-rt/test/builtins/Unit/compiler_rt_logbl_test.c b/compiler-rt/test/builtins/Unit/compiler_rt_logbl_test.c
index 2a60d5bd19e4..5b72f3dbf1da 100644
--- a/compiler-rt/test/builtins/Unit/compiler_rt_logbl_test.c
+++ b/compiler-rt/test/builtins/Unit/compiler_rt_logbl_test.c
@@ -27,18 +27,20 @@
 int test__compiler_rt_logbl(fp_t x) {
   fp_t crt_value = __compiler_rt_logbl(x);
   fp_t libm_value = logbl(x);
-  // Compare actual rep, e.g. to avoid NaN != the same NaN
-  if (toRep(crt_value) != toRep(libm_value)) {
+  // Compare the values, considering all NaNs equivalent, as the spec doesn't
+  // specify the NaN signedness/payload.
+  if (crt_value != libm_value &&
+      !(crt_isnan(crt_value) && crt_isnan(libm_value))) {
     // Split expected values into two for printf
     twords x_t, crt_value_t, libm_value_t;
     x_t.all = toRep(x);
     crt_value_t.all = toRep(crt_value);
     libm_value_t.all = toRep(libm_value);
     printf(
-        "error: in __compiler_rt_logb(%a [%llX %llX]) = %a [%llX %llX] !=  %a "
+        "error: in __compiler_rt_logbl([%llX %llX]) = [%llX %llX] !=  "
         "[%llX %llX]\n",
-        x, x_t.s.high, x_t.s.low, crt_value, crt_value_t.s.high,
-        crt_value_t.s.low, libm_value, libm_value_t.s.high, libm_value_t.s.low);
+        x_t.s.high, x_t.s.low, crt_value_t.s.high, crt_value_t.s.low,
+        libm_value_t.s.high, libm_value_t.s.low);
     return 1;
   }
   return 0;


        


More information about the llvm-commits mailing list