Hi,
this patch changes the equality check for the reduc_strict_run-1
testcase from == to fabs () < EPS. The FAIL only occurs with
_Float16 but I'd argue approximate equality is preferable for all
float modes.
Regards
Robin
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/reduc/reduc_strict_run-1.c:
Check float equality with fabs < EPS.
---
.../riscv/rvv/autovec/reduc/reduc_strict_run-1.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_strict_run-1.c
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_strict_run-1.c
index 516be97e9eb..93efe2c4333 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_strict_run-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_strict_run-1.c
@@ -2,6 +2,9 @@
/* { dg-additional-options "--param=riscv-autovec-preference=scalable
-fno-vect-cost-model" } */
#include "reduc_strict-1.c"
+#include <math.h>
+
+#define EPS 1e-2
#define TEST_REDUC_PLUS(TYPE) \
{ \
@@ -10,14 +13,14 @@
TYPE r = 0, q = 3; \
for (int i = 0; i < NUM_ELEMS (TYPE); i++) \
{ \
- a[i] = (i * 0.1) * (i & 1 ? 1 : -1); \
- b[i] = (i * 0.3) * (i & 1 ? 1 : -1); \
+ a[i] = (i * 0.01) * (i & 1 ? 1 : -1); \
+ b[i] = (i * 0.03) * (i & 1 ? 1 : -1); \
r += a[i]; \
q -= b[i]; \
asm volatile ("" ::: "memory"); \
} \
TYPE res = reduc_plus_##TYPE (a, b); \
- if (res != r * q) \
+ if (fabs (res - r * q) > EPS) \
__builtin_abort (); \
}
--
2.41.0