]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V/testsuite: Fix several zvfh tests.
authorRobin Dapp <rdapp@ventanamicro.com>
Thu, 9 Nov 2023 10:32:30 +0000 (11:32 +0100)
committerRobin Dapp <rdapp@ventanamicro.com>
Thu, 9 Nov 2023 19:56:03 +0000 (20:56 +0100)
This fixes some zvfh test oversights as well as adds zfh to the target
requirements.  It's not strictly necessary to have zfh but it greatly
simplifies test handling when we can just calculate the reference value
instead of working around it.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/binop/fmax_zvfh-1.c: Adjust.
* gcc.target/riscv/rvv/autovec/binop/fmax_zvfh_run-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/binop/fmin_zvfh-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/binop/fmin_zvfh_run-1.c: Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-1.h:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-2.h:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-3.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-4.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-3.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-4.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-1.c:
Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-2.c:
Ditto.
* gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh-10.c: Ditto.
* gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh_run-10.c: Ditto.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-1.h: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-2.h: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-1.c: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-2.c: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-1.c: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-2.c: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-1.c: New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-2.c: New test.

34 files changed:
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/fmax_zvfh-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/fmax_zvfh_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/fmin_zvfh-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/fmin_zvfh_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-1.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-2.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-1.h [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-2.h [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmax_zvfh_run-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-3.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_fmin_zvfh_run-4.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-1.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_sqrt_run-zvfh-2.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh-10.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh_run-10.c

index c137955619fe95061343d378c7f5ef015cdd9408..7e04cbff1e29bd2f3801750181f29edc404f9763 100644 (file)
@@ -1,5 +1,5 @@
-/* { dg-do run { target { riscv_zvfh } } } */
-/* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-signaling-nans" } */
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d --param=riscv-autovec-preference=scalable --param vect-epilogues-nomask=0 -fno-signaling-nans" } */
 
 #include <stdint-gcc.h>
 
@@ -7,16 +7,15 @@
 #define FN(X) __builtin_fmax##X
 #endif
 
-#define DEF_LOOP(FN, SUFFIX, TYPE)                                                     \
+#define DEF_LOOP(FN, SUFFIX, TYPE)                                             \
   void __attribute__ ((noipa))                                                 \
   test_##TYPE (TYPE *__restrict x, TYPE *__restrict y, int n)                  \
   {                                                                            \
     for (int i = 0; i < n; ++i)                                                \
-      x[i] = FN (SUFFIX) (x[i], y[i]);                                                  \
+      x[i] = FN (SUFFIX) (x[i], y[i]);                                         \
   }
 
-#define TEST_ALL(T)                                                            \
-  T (FN, f16, _Float16)                                                       \
+#define TEST_ALL(T) T (FN, f16, _Float16)
 
 TEST_ALL (DEF_LOOP)
 
index 4a248c28e0a5bcb5663d64c344c427431c8290b8..f8c39e39fa5de9ace9c9865f60eec80494f5e6c4 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-signaling-nans" } */
 
 #include <math.h>
@@ -30,7 +30,7 @@
     dst[7] = nan ("0.0");                                                      \
     dst[8] = INFINITY;                                                         \
     dst[9] = -INFINITY;                                                        \
-    kest_##TYPE (dst, y, N);                                                   \
+    test_##TYPE (dst, y, N);                                                   \
     for (int i = 0; i < N; ++i)                                                \
       {                                                                        \
        double ref = FN (SUFFIX) (x[i], y[i]);                                 \
index 39643a71f2505974acea3cbe5b334676caa26c12..c7865be19ceb34acf3f9df939c7a2cb387028172 100644 (file)
@@ -7,4 +7,3 @@
 #include "fmax_zvfh-1.c"
 
 /* { dg-final { scan-assembler-times {vfmin\.vv\s+v[0-9]+,v[0-9]+,v[0-9]+} 1 } } */
-
index 05bfce42e9a4de9286d720980aaeb2e5dde4c624..14913eea1e70cc8b3f36b23bd168c4fac9a3d854 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-signaling-nans" } */
 
 #define FN(X) __builtin_fmin##X
index 639adc34c3d832badb88e54e6a2c36b349a15e52..0c25fcdb36f47597dddb22b845063cc642281912 100644 (file)
@@ -15,8 +15,6 @@
 
 /* FP -> INT */
 #define TEST_ALL_F2X_SAME(T)                                                   \
-  T (_Float16, uint16_t)                                                       \
-  T (_Float16, int16_t)                                                        \
   T (float, uint32_t)                                                          \
   T (float, int32_t)                                                           \
   T (double, uint64_t)                                                         \
 
 /* FP -> wider-INT */
 #define TEST_ALL_F2X_WIDER(T)                                                  \
-  T (_Float16, uint32_t)                                                       \
-  T (_Float16, int32_t)                                                        \
-  T (_Float16, uint64_t)                                                       \
-  T (_Float16, int64_t)                                                        \
   T (float, uint64_t)                                                          \
   T (float, int64_t)
 
 /* FP -> narrower-INT */
 #define TEST_ALL_F2X_NARROWER(T)                                               \
-  T (_Float16, uint8_t)                                                        \
-  T (_Float16, int8_t)                                                         \
   T (float, uint8_t)                                                           \
   T (float, int8_t)                                                            \
   T (float, uint16_t)                                                          \
index 3d518a45cd2f7d695a4f973719178b55fe2199c9..7f2de38efe3dbcc1a32a875886a5653e9a30f5ee 100644 (file)
@@ -14,8 +14,6 @@
 
 /* FP -> INT */
 #define TEST_ALL_F2X_SAME(T)                                                   \
-  T (_Float16, uint16_t)                                                       \
-  T (_Float16, int16_t)                                                        \
   T (float, uint32_t)                                                          \
   T (float, int32_t)                                                           \
   T (double, uint64_t)                                                         \
 
 /* FP -> wider-INT */
 #define TEST_ALL_F2X_WIDER(T)                                                  \
-  T (_Float16, uint32_t)                                                       \
-  T (_Float16, int32_t)                                                        \
-  T (_Float16, uint64_t)                                                       \
-  T (_Float16, int64_t)                                                        \
   T (float, uint64_t)                                                          \
   T (float, int64_t)
 
 /* FP -> narrower-INT */
 #define TEST_ALL_F2X_NARROWER(T)                                               \
-  T (_Float16, uint8_t)                                                        \
-  T (_Float16, int8_t)                                                         \
   T (float, uint8_t)                                                           \
   T (float, int8_t)                                                            \
   T (float, uint16_t)                                                          \
index 8cc0170edebd95773f196b722e4bbb96e416fd60..b7400018fb4b78bf3eaf8f309fe9b021938d6c63 100644 (file)
@@ -3,15 +3,14 @@
 
 #include "cond_convert_float2int-1.h"
 
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
 
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 /* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+\n} 6 } } */
 
 /* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
index 44e990133ec204dac0d9921592792d484c388991..3bc1a4e2eebc882335f783c7e4efd5c8b05c1e61 100644 (file)
@@ -3,15 +3,14 @@
 
 #include "cond_convert_float2int-2.h"
 
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
 
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 /* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+\n} 6 } } */
 
 /* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
index 143e78c87d34f6984fe99e5209157cc57eea496e..a65317c91cbc971b1209c39cb36ecd2e6563e9a9 100644 (file)
@@ -3,15 +3,14 @@
 
 #include "cond_convert_float2int-1.h"
 
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
 
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 /* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+\n} 6 } } */
 
 /* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
index 2d85a48ab2a3c1cd321f83c1c2fdad09b35a63e0..b764b72a6b8b27dd8fd051f43632c899f139d0cd 100644 (file)
@@ -3,15 +3,14 @@
 
 #include "cond_convert_float2int-2.h"
 
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
-/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
 
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
-/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 3 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 2 } } */
 /* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+\n} 6 } } */
 
 /* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
index ed039a3066ccc4492fd79d43668c3e111e43a25e..3f145475a0fb25c65fc6d69e9f1b387bca331871 100644 (file)
     OLD_TYPE a[N], pred[N];                                                    \
     for (int i = 0; i < N; ++i)                                                \
       {                                                                        \
-       a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : -1);                    \
+       a[i] = (i & 1 ? i : 1.1 * i) * (i % 3 == 0 ? 1.2 : -1.5);              \
        b[i] = (i % 9) * (i % 7 + 1);                                          \
        pred[i] = (i % 7 < 4);                                                 \
-       asm volatile("" ::: "memory");                                         \
+       asm volatile ("" ::: "memory");                                        \
       }                                                                        \
     test_##OLD_TYPE##_2_##NEW_TYPE (r, a, b, pred, N);                         \
     for (int i = 0; i < N; ++i)                                                \
-      if (r[i] != (pred[i] ? (NEW_TYPE) a[i] : b[i]))                          \
-       __builtin_abort ();                                                    \
+      {                                                                        \
+       NEW_TYPE ref = pred[i] ? a[i] : b[i];                                  \
+       if (r[i] != ref)                                                       \
+         __builtin_abort ();                                                  \
+      }                                                                        \
   }
 
 int
index 70271fdbb3cee0ae1fcf352dfb633c25ce8591d1..a47602ad1981edaf12a8b6767ddca7fecec82051 100644 (file)
@@ -11,7 +11,7 @@
     OLD_TYPE a[N], pred[N];                                                    \
     for (int i = 0; i < N; ++i)                                                \
       {                                                                        \
-       a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : -1);                    \
+       a[i] = (i & 1 ? i : 1.2 * i) * (i % 3 == 0 ? 1 : -1);                  \
        pred[i] = (i % 7 < 4);                                                 \
        asm volatile("" ::: "memory");                                         \
       }                                                                        \
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-1.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-1.h
new file mode 100644 (file)
index 0000000..3488b38
--- /dev/null
@@ -0,0 +1,35 @@
+#include <stdint-gcc.h>
+
+#define DEF_LOOP(OLD_TYPE, NEW_TYPE)                                           \
+  void __attribute__ ((noipa))                                                 \
+  test_##OLD_TYPE##_2_##NEW_TYPE (NEW_TYPE *__restrict r,                      \
+                                 OLD_TYPE *__restrict a,                      \
+                                 NEW_TYPE *__restrict b,                      \
+                                 OLD_TYPE *__restrict pred, int n)            \
+  {                                                                            \
+    for (int i = 0; i < n; ++i)                                                \
+      {                                                                        \
+       r[i] = pred[i] ? (NEW_TYPE) a[i] : b[i];                               \
+      }                                                                        \
+  }
+
+/* FP -> INT */
+#define TEST_ALL_F2X_SAME(T)                                                   \
+  T (_Float16, uint16_t)                                                       \
+  T (_Float16, int16_t)                                                        \
+
+/* FP -> wider-INT */
+#define TEST_ALL_F2X_WIDER(T)                                                  \
+  T (_Float16, uint32_t)                                                       \
+  T (_Float16, int32_t)                                                        \
+  T (_Float16, uint64_t)                                                       \
+  T (_Float16, int64_t)                                                        \
+
+/* FP -> narrower-INT */
+#define TEST_ALL_F2X_NARROWER(T)                                               \
+  T (_Float16, uint8_t)                                                        \
+  T (_Float16, int8_t)                                                         \
+
+TEST_ALL_F2X_SAME (DEF_LOOP)
+TEST_ALL_F2X_WIDER (DEF_LOOP)
+TEST_ALL_F2X_NARROWER (DEF_LOOP)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-2.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-2.h
new file mode 100644 (file)
index 0000000..1e82d84
--- /dev/null
@@ -0,0 +1,34 @@
+#include <stdint-gcc.h>
+
+#define DEF_LOOP(OLD_TYPE, NEW_TYPE)                                           \
+  void __attribute__ ((noipa))                                                 \
+  test_##OLD_TYPE##_2_##NEW_TYPE (NEW_TYPE *__restrict r,                      \
+                                 OLD_TYPE *__restrict a, NEW_TYPE b,          \
+                                 OLD_TYPE *__restrict pred, int n)            \
+  {                                                                            \
+    for (int i = 0; i < n; ++i)                                                \
+      {                                                                        \
+       r[i] = pred[i] ? (NEW_TYPE) a[i] : b;                                  \
+      }                                                                        \
+  }
+
+/* FP -> INT */
+#define TEST_ALL_F2X_SAME(T)                                                   \
+  T (_Float16, uint16_t)                                                       \
+  T (_Float16, int16_t)                                                        \
+
+/* FP -> wider-INT */
+#define TEST_ALL_F2X_WIDER(T)                                                  \
+  T (_Float16, uint32_t)                                                       \
+  T (_Float16, int32_t)                                                        \
+  T (_Float16, uint64_t)                                                       \
+  T (_Float16, int64_t)                                                        \
+
+/* FP -> narrower-INT */
+#define TEST_ALL_F2X_NARROWER(T)                                               \
+  T (_Float16, uint8_t)                                                        \
+  T (_Float16, int8_t)                                                         \
+
+TEST_ALL_F2X_SAME (DEF_LOOP)
+TEST_ALL_F2X_WIDER (DEF_LOOP)
+TEST_ALL_F2X_NARROWER (DEF_LOOP)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-1.c
new file mode 100644 (file)
index 0000000..c13f134
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d --param riscv-autovec-preference=scalable -fno-vect-cost-model -ffast-math" } */
+
+#include "cond_convert_float2int_zvfh-1.h"
+
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
+/* { dg-final { scan-assembler-not {\tvf?merge\.v[vxi]m\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv32-2.c
new file mode 100644 (file)
index 0000000..ebb0a59
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d --param riscv-autovec-preference=scalable -fno-vect-cost-model -ffast-math" } */
+
+#include "cond_convert_float2int_zvfh-2.h"
+
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
+/* { dg-final { scan-assembler-not {\tvf?merge\.v[vxi]m\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-1.c
new file mode 100644 (file)
index 0000000..2405c7f
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d --param riscv-autovec-preference=scalable -fno-vect-cost-model -ffast-math" } */
+
+#include "cond_convert_float2int_zvfh-1.h"
+
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
+/* { dg-final { scan-assembler-not {\tvf?merge\.v[vxi]m\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh-rv64-2.c
new file mode 100644 (file)
index 0000000..3b2455c
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d --param riscv-autovec-preference=scalable -fno-vect-cost-model -ffast-math" } */
+
+#include "cond_convert_float2int_zvfh-2.h"
+
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.xu\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfwcvt\.rtz\.x\.f\.v\tv[0-9]+,v[0-9]+\n} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.xu\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+/* { dg-final { scan-assembler-times {\tvfncvt\.rtz\.x\.f\.w\tv[0-9]+,v[0-9]+,v0\.t} 1 } } */
+
+/* { dg-final { scan-assembler {\tvsetvli\t[a-z0-9]+,[a-z0-9]+,e[0-9]+,m[f0-9]+,t[au],mu} } } */
+/* { dg-final { scan-assembler-not {\tvf?merge\.v[vxi]m\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-1.c
new file mode 100644 (file)
index 0000000..00f01ca
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
+/* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model" } */
+
+#include "cond_convert_float2int_zvfh-1.h"
+
+#define N 77
+
+#define TEST_LOOP(OLD_TYPE, NEW_TYPE)                                          \
+  {                                                                            \
+    NEW_TYPE r[N], b[N];                                                       \
+    OLD_TYPE a[N], pred[N];                                                    \
+    for (int i = 0; i < N; ++i)                                                \
+      {                                                                        \
+       a[i] = (i & 1 ? i : 1.1 * i) * (i % 3 == 0 ? 1.2 : -1.5);              \
+       b[i] = (i % 9) * (i % 7 + 1);                                          \
+       pred[i] = (i % 7 < 4);                                                 \
+       asm volatile ("" ::: "memory");                                        \
+      }                                                                        \
+    test_##OLD_TYPE##_2_##NEW_TYPE (r, a, b, pred, N);                         \
+    for (int i = 0; i < N; ++i)                                                \
+      {                                                                        \
+       NEW_TYPE ref = pred[i] ? a[i] : b[i];                                  \
+       if (r[i] != ref)                                                       \
+         __builtin_abort ();                                                  \
+      }                                                                        \
+  }
+
+int
+main ()
+{
+  TEST_ALL_F2X_SAME (TEST_LOOP)
+  TEST_ALL_F2X_WIDER (TEST_LOOP)
+  TEST_ALL_F2X_NARROWER (TEST_LOOP)
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_zvfh_run-2.c
new file mode 100644 (file)
index 0000000..c3dc653
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
+/* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model" } */
+
+#include "cond_convert_float2int_zvfh-2.h"
+
+#define N 77
+
+#define TEST_LOOP(OLD_TYPE, NEW_TYPE)                                          \
+  {                                                                            \
+    NEW_TYPE r[N], b = 192;                                                    \
+    OLD_TYPE a[N], pred[N];                                                    \
+    for (int i = 0; i < N; ++i)                                                \
+      {                                                                        \
+       a[i] = (i & 1 ? i : 1.2 * i) * (i % 3 == 0 ? 1 : -1);                  \
+       pred[i] = (i % 7 < 4);                                                 \
+       asm volatile("" ::: "memory");                                         \
+      }                                                                        \
+    test_##OLD_TYPE##_2_##NEW_TYPE (r, a, b, pred, N);                         \
+    for (int i = 0; i < N; ++i)                                                \
+      if (r[i] != (pred[i] ? (NEW_TYPE) a[i] : b))                             \
+       __builtin_abort ();                                                    \
+  }
+
+int
+main ()
+{
+  TEST_ALL_F2X_SAME (TEST_LOOP)
+  TEST_ALL_F2X_WIDER (TEST_LOOP)
+  TEST_ALL_F2X_NARROWER (TEST_LOOP)
+  return 0;
+}
index acb6716221fa58c89cc80815fed3481226842c59..cb7f35d5523470253c4be04be08d6a5422023997 100644 (file)
@@ -5,6 +5,8 @@
 
 #define N 99
 
+#define EPS 1e-8
+
 #define TEST_LOOP(OLD_TYPE, NEW_TYPE)                                          \
   {                                                                            \
     NEW_TYPE r[N], b[N];                                                       \
        a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : -1);                    \
        b[i] = (i % 9) * (i % 7 + 1);                                          \
        pred[i] = (i % 7 < 4);                                                 \
-       asm volatile("" ::: "memory");                                         \
+       asm volatile ("" ::: "memory");                                        \
       }                                                                        \
     test_##OLD_TYPE##_2_##NEW_TYPE (r, a, b, pred, N);                         \
     for (int i = 0; i < N; ++i)                                                \
-      if (r[i] != (pred[i] ? (NEW_TYPE) a[i] : b[i]))                          \
-       __builtin_abort ();                                                    \
+      {                                                                        \
+       NEW_TYPE ref = pred[i] ? a[i] : b[i];                                  \
+       if (__builtin_fabsf (r[i] - ref) > EPS)                                \
+         __builtin_abort ();                                                  \
+      }                                                                        \
   }
 
 int
index a4cf1ac8b8d43542c51d3810e9dce33400e8685a..1ec6c591a81ec315200998ae4b5f0d2e284bf9c0 100644 (file)
@@ -5,6 +5,8 @@
 
 #define N 99
 
+#define EPS 1e-8
+
 #define TEST_LOOP(OLD_TYPE, NEW_TYPE)                                          \
   {                                                                            \
     NEW_TYPE r[N], b = 192.12;                                                 \
       {                                                                        \
        a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : -1);                    \
        pred[i] = (i % 7 < 4);                                                 \
-       asm volatile("" ::: "memory");                                         \
+       asm volatile ("" ::: "memory");                                        \
       }                                                                        \
     test_##OLD_TYPE##_2_##NEW_TYPE (r, a, b, pred, N);                         \
     for (int i = 0; i < N; ++i)                                                \
-      if (r[i] != (pred[i] ? (NEW_TYPE) a[i] : b))                             \
-       __builtin_abort ();                                                    \
+      {                                                                        \
+       NEW_TYPE ref = pred[i] ? a[i] : b;                                     \
+       if (__builtin_fabsf (r[i] - ref) > EPS)                                \
+         __builtin_abort ();                                                  \
+      }                                                                        \
   }
 
 int
index 1609d2ced7bee72e17f458608b740cca1dccb5e7..ae6381ab07b83bd9208b93bbe0b0d47b1643dc9c 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #include "cond_fmax_zvfh-1.c"
@@ -18,7 +18,7 @@
     test_##TYPE##_##NAME (x, y, pred, N);                              \
     for (int i = 0; i < N; ++i)                                                \
       {                                                                        \
-       TYPE expected = i % 3 != 1 ? FN (y[i], CONST) : y[i];           \
+       TYPE expected = i % 3 != 1 ? FN (y[i], CONST) : y[i];   \
        if (x[i] != expected)                                           \
          __builtin_abort ();                                           \
        asm volatile ("" ::: "memory");                                 \
index 6c33858cc40bc0d8c90205b53865f9f590d736c2..697abb2b599cdf7f37f33685456753a79fbff2ad 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #include "cond_fmax_zvfh-2.c"
index 6df48c220f38cedc8f2729ad77fd0fa412b3c48d..d4ee99f292581f62f9d0382b3085977d06ec5955 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #include "cond_fmax_zvfh-3.c"
index 9bb1beb141838dbb7f6349f6d32994cd1ab51dc8..c006c64f51e1495f429fcd0e065fb18a88a7eb3e 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #include "cond_fmax_zvfh-4.c"
index b334f4d6bea2b8fd637ce6b7b92d4d1b91955854..01a7dfdeb36650cd54e560b1c2e0feca3f94a9cf 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #define FN(X) __builtin_fmin##X
index 873f413c6b7958d9c567b6e1ee33ca3b401d6088..c2d693e15a6a0343f91ec4451c0b82515d9bae53 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #define FN(X) __builtin_fmin##X
index 94be087fb6ec56ed368ba786bf21733543074a44..4c4696851e9e78d090863813268f9b3bcc55f85f 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #define FN(X) __builtin_fmin##X
index 8a144e85afaf7b49209559b07093ca6e680172b4..49a0c671e8a7a5f40b2a8a3947306a91e61166d0 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-vect-cost-model -fno-signaling-nans" } */
 
 #define FN(X) __builtin_fmin##X
index c96a1a6b09916079a01fcd2921bbb7d0f43ac843..e80ac755a92fc30761ee5e822d4b20c6a8ef1f89 100644 (file)
@@ -2,10 +2,11 @@
 /* { dg-additional-options "--param riscv-autovec-preference=scalable -fno-vect-cost-model -ffast-math " } */
 
 #include "cond_sqrt-zvfh-1.c"
-#include <stdio.h>
 
 #define N 99
 
+#define EPS 1e-2
+
 #define TEST_LOOP(TYPE, OP)                                                    \
   {                                                                            \
     TYPE r[N], a[N], pred[N];                                                  \
       {                                                                        \
        a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : 2);                     \
        pred[i] = (i % 7 < 4);                                                 \
-       asm volatile("" ::: "memory");                                         \
+       asm volatile ("" ::: "memory");                                        \
       }                                                                        \
     test_##TYPE##_##OP (r, a, pred, N);                                        \
     for (int i = 0; i < N; ++i)                                                \
-      if (r[i] != (pred[i] ? OP (a[i]) : a[i]))                                \
-       __builtin_abort ();                                                    \
+      {                                                                        \
+       float ref = pred[i] ? __builtin_sqrtf (a[i]) : a[i];                   \
+       if (__builtin_fabsf (r[i] - ref) > EPS)                                \
+         __builtin_abort ();                                                  \
+      }                                                                        \
   }
 
 int
index 3386242bdadbc53d660ea1fbd448657ed7adad1c..6f437b634688f7d94a54a92de5d31d65881996db 100644 (file)
@@ -5,6 +5,8 @@
 
 #define N 99
 
+#define EPS 1e-2
+
 #define TEST_LOOP(TYPE, OP)                                                    \
   {                                                                            \
     TYPE r[N], a[N], b[N], pred[N];                                            \
        a[i] = (i & 1 ? i : 3 * i) * (i % 3 == 0 ? 1 : 2);                     \
        b[i] = (i % 9) * (i % 7 + 1);                                          \
        pred[i] = (i % 7 < 4);                                                 \
-       asm volatile("" ::: "memory");                                         \
+       asm volatile ("" ::: "memory");                                        \
       }                                                                        \
     test_##TYPE##_##OP (r, a, b, pred, N);                                     \
     for (int i = 0; i < N; ++i)                                                \
-      if (r[i] != (pred[i] ? OP (a[i]) : b[i]))                                \
-       __builtin_abort ();                                                    \
+      {                                                                        \
+       float ref = pred[i] ? __builtin_sqrtf (a[i]) : b[i];                   \
+       if (__builtin_fabsf (r[i] - ref) > EPS)                                \
+         __builtin_abort ();                                                  \
+      }                                                                        \
   }
 
 int
index 0651e3177b748a7c26e97762e60060e91d5314c3..b3bba249c040a8a0928fa9c4000b57b98775e78b 100644 (file)
@@ -7,16 +7,15 @@
   TYPE __attribute__ ((noinline, noclone))                                     \
   reduc_##NAME##_##TYPE (TYPE *a, int n)                                       \
   {                                                                            \
-    TYPE r = -0.0;                                                              \
+    TYPE r = -0.0;                                                             \
     for (int i = 0; i < n; ++i)                                                \
       r = MAXMIN_OP (r, a[i]);                                                 \
     return r;                                                                  \
   }
 
 #define TEST_FMAXMIN(T)                                                        \
-  T (_Float16, max, __builtin_fmaxf16)                                              \
-  T (_Float16, min, __builtin_fminf16)                                              \
-
+  T (_Float16, max, __builtin_fmaxf16)                                         \
+  T (_Float16, min, __builtin_fminf16)
 
 TEST_FMAXMIN (DEF_REDUC_FMAXMIN)
 
index 2b8bcdfe8fac40d3f38c8e7b47e069a71ce15067..ab047d7077d4a9134c1608fcb44b9f4ae41163a9 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do run { target { riscv_zvfh } } } */
+/* { dg-do run { target { riscv_zvfh && riscv_zfh } } } */
 /* { dg-additional-options "--param=riscv-autovec-preference=scalable -fno-signaling-nans" } */
 
 #include <math.h>
@@ -7,29 +7,29 @@
 
 #define NUM_ELEMS(TYPE) (73 + sizeof (TYPE))
 
-#define INIT_VECTOR(TYPE)                              \
-  TYPE a[NUM_ELEMS (TYPE) + 1];                                \
-  for (int i = 0; i < NUM_ELEMS (TYPE) + 1; i++)       \
-    {                                                  \
-      a[i] = ((i * 2) * (i & 1 ? 1 : -1) | 3);         \
-      asm volatile ("" ::: "memory");                  \
-    }                                                  \
-    a[0] = -0.0;                                       \
-    a[1] = nan ("0.0");                                        \
-    a[2] = nan ("1.0");                                        \
-    a[3] = 0.0;                                                \
-    a[4] = -INFINITY;                                  \
-    a[5] = INFINITY;                                   \
+#define INIT_VECTOR(TYPE)                                                      \
+  TYPE a[NUM_ELEMS (TYPE) + 1];                                                \
+  for (int i = 0; i < NUM_ELEMS (TYPE) + 1; i++)                               \
+    {                                                                          \
+      a[i] = ((i * 2) * (i & 1 ? 1 : -1) | 3);                                 \
+      asm volatile ("" ::: "memory");                                          \
+    }                                                                          \
+  a[0] = -0.0;                                                                 \
+  a[1] = nan ("0.0");                                                          \
+  a[2] = nan ("1.0");                                                          \
+  a[3] = 0.0;                                                                  \
+  a[4] = -INFINITY;                                                            \
+  a[5] = INFINITY;\
 
-#define TEST_REDUC_FMAXMIN(TYPE, NAME, MAXMIN_OP)              \
-  {                                                            \
-    INIT_VECTOR (TYPE);                                                \
-    TYPE r1 = reduc_##NAME##_##TYPE (a, NUM_ELEMS (TYPE));     \
-    volatile TYPE r2 = -0.0;                                   \
-    for (int i = 0; i < NUM_ELEMS (TYPE); ++i)                 \
-      r2 = MAXMIN_OP (r2, a[i]);                               \
-    if (r1 != r2)                                              \
-      __builtin_abort ();                                      \
+#define TEST_REDUC_FMAXMIN(TYPE, NAME, MAXMIN_OP)                              \
+  {                                                                            \
+    INIT_VECTOR (TYPE);                                                        \
+    TYPE r1 = reduc_##NAME##_##TYPE (a, NUM_ELEMS (TYPE));                     \
+    volatile TYPE r2 = -0.0;                                                   \
+    for (int i = 0; i < NUM_ELEMS (TYPE); ++i)                                 \
+      r2 = MAXMIN_OP (r2, a[i]);                                               \
+    if (r1 != r2)                                                              \
+      __builtin_abort ();                                                      \
   }
 
 __attribute__ ((optimize ("1")))