aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2025-03-13 15:13:00 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2025-03-13 15:13:00 +0000
commitdf87b300bd13ed047b1159022c93445f130458e6 (patch)
tree543e4c2c8c488d87dae67fb4fbbe59e4eee52857
parentd4c7de7dc925e79f7aec06848be9d05eb71bd6c8 (diff)
downloadgcc-df87b300bd13ed047b1159022c93445f130458e6.zip
gcc-df87b300bd13ed047b1159022c93445f130458e6.tar.gz
gcc-df87b300bd13ed047b1159022c93445f130458e6.tar.bz2
testsuite: Fix sve/mask_struct_load_3_run.c [PR113965]
Among other things, this testcase tests an addition of the four values (n*4+[0:3])*9//2 for each n in [0:99]. The addition is done in multiple integer and floating-point types and the test is compiled with -ffast-math. One of the floating-point types is _Float16, and as Andrew says in the PR, _Float16's limited precision means that the order of the additions begins to matter for higher n. Specifically, some orders begin to give different results from others at n=38, and at many higher n as well. This patch uses 5/3 rather than 9/2. I tested locally that all addition orders give the same result over the test range. gcc/testsuite/ PR testsuite/113965 * gcc.target/aarch64/sve/mask_struct_load_3_run.c: Use an input range that is suitable for _Float16.
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c b/gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c
index 8bc3b08..c0a7416 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c
@@ -18,7 +18,7 @@
asm volatile ("" ::: "memory"); \
} \
for (int i = 0; i < N * 4; ++i) \
- in[i] = i * 9 / 2; \
+ in[i] = i * 5 / 3; \
NAME##_4 (out, in, mask, N); \
for (int i = 0; i < N; ++i) \
{ \