The function body checks for f3 only ran with -mcmodel explicitly set which meant I missed a regression in my local testing of:
commit b039d06c9a810a3fab4c5eb9d50b0c7aff94b2d8 Author: Craig Blackmore <craig.blackm...@embecosm.com> Date: Fri Oct 18 09:17:21 2024 -0600 [PATCH 3/7] RISC-V: Fix vector memcpy smaller LMUL generation The failure showed up in the rivos CI and it is due to f3 now using LMUL m1 instead of m8. I have reworked the test to make it more robust and maintainable. This allowed most of the special casing of command line arguments to be removed. It also fixes an issue where some targets would enable multiple versions of the function body check e.g. `-march=rv32gcv -mcmodel=medany`. Changes since v1: Added missing ChangeLog. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/cpymem-1.c: Fix and rework f3. --- .../gcc.target/riscv/rvv/base/cpymem-1.c | 107 ++++++++---------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c index 6edb4c9253a..81d14d83633 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c @@ -9,6 +9,8 @@ extern void *memcpy(void *__restrict dest, const void *__restrict src, __SIZE_TYPE__ n); #endif +#define MIN_VECTOR_BYTES (__riscv_v_min_vlen / 8) + /* memcpy should be implemented using the cpymem pattern. ** f1: XX \.L\d+: # local label is ignored @@ -50,70 +52,57 @@ void f2 (__INT32_TYPE__* a, __INT32_TYPE__* b, int l) Use extern here so that we get a known alignment, lest DATA_ALIGNMENT force us to make the scan pattern accomodate code for different alignments depending on word size. -** f3: { target { { any-opts "-mcmodel=medlow" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl1024b" "-mrvv-max-lmul=dynamic" "-mrvv-max-lmul=m2" "-mrvv-max-lmul=m4" "-mrvv-max-lmul=m8" "-mrvv-vector-bits=zvl" } } } -** lui\s+[ta][0-7],%hi\(a_a\) -** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) -** lui\s+[ta][0-7],%hi\(a_b\) -** addi\s+a4,[ta][0-7],%lo\(a_b\) -** vsetivli\s+zero,16,e32,m8,ta,ma -** vle32.v\s+v\d+,0\([ta][0-7]\) -** vse32\.v\s+v\d+,0\([ta][0-7]\) -** ret -*/ - -/* -** f3: { target { { any-opts "-mcmodel=medlow -mrvv-vector-bits=zvl" "-mcmodel=medlow -march=rv64gcv_zvl512b -mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" } } } -** lui\s+[ta][0-7],%hi\(a_a\) -** lui\s+[ta][0-7],%hi\(a_b\) -** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) -** addi\s+a4,[ta][0-7],%lo\(a_b\) -** vl(1|4|2)re32\.v\s+v\d+,0\([ta][0-7]\) -** vs(1|4|2)r\.v\s+v\d+,0\([ta][0-7]\) -** ret -*/ - -/* -** f3: { target { { any-opts "-mcmodel=medlow -march=rv64gcv_zvl1024b" "-mcmodel=medlow -march=rv64gcv_zvl512b" } && { no-opts "-mrvv-vector-bits=zvl" } } } -** lui\s+[ta][0-7],%hi\(a_a\) -** lui\s+[ta][0-7],%hi\(a_b\) -** addi\s+a4,[ta][0-7],%lo\(a_b\) -** vsetivli\s+zero,16,e32,(m1|m4|mf2),ta,ma -** vle32.v\s+v\d+,0\([ta][0-7]\) -** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) -** vse32\.v\s+v\d+,0\([ta][0-7]\) -** ret -*/ - -/* -** f3: { target { { any-opts "-mcmodel=medany" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl1024b" "-mrvv-max-lmul=dynamic" "-mrvv-max-lmul=m8" "-mrvv-max-lmul=m4" "-mrvv-vector-bits=zvl" } } } -** lla\s+[ta][0-7],a_a -** lla\s+[ta][0-7],a_b -** vsetivli\s+zero,16,e32,m8,ta,ma -** vle32.v\s+v\d+,0\([ta][0-7]\) -** vse32\.v\s+v\d+,0\([ta][0-7]\) -** ret -*/ - -/* -** f3: { target { { any-opts "-mcmodel=medany" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl256b" "-march=rv64gcv" "-march=rv64gc_zve64d" "-march=rv64gc_zve32f" } } } -** lla\s+[ta][0-7],a_b -** vsetivli\s+zero,16,e32,m(f2|1|4),ta,ma -** vle32.v\s+v\d+,0\([ta][0-7]\) -** lla\s+[ta][0-7],a_a -** vse32\.v\s+v\d+,0\([ta][0-7]\) -** ret +** f3: { target { no-opts "-mrvv-vector-bits=zvl" } } +** ( +** lui\s+[ta][0-7],%hi\(a_a\) +** lui\s+[ta][0-7],%hi\(a_b\) +** addi\s+[ta][0-7],[ta][0-7],%lo\(a_b\) +** vsetivli\s+zero,4,e32,m1,ta,ma +** | +** lui\s+[ta][0-7],%hi\(a_a\) +** lui\s+[ta][0-7],%hi\(a_b\) +** li\s+[ta][0-7],\d+ +** addi\s+[ta][0-7],[ta][0-7],%lo\(a_b\) +** vsetvli\s+zero,[ta][0-7],e32,m1,ta,ma +** | +** lla\s+[ta][0-7],a_b +** vsetivli\s+zero,4,e32,m1,ta,ma +** | +** li\s+[ta][0-7],\d+ +** lla\s+[ta][0-7],a_b +** vsetvli\s+zero,[ta][0-7],e32,m1,ta,ma +** | +** lla\s+[ta][0-7],a_b +** li\s+[ta][0-7],32 +** vsetvli\s+zero,[ta][0-7],e32,m1,ta,ma +** ) +** vle32.v\s+v\d+,0\([ta][0-7]\) +** ( +** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) +** | +** lla\s+[ta][0-7],a_a +** ) +** vse32.v\s+v\d+,0\([ta][0-7]\) +** ret */ /* -** f3: { target { { any-opts "-mcmodel=medany -mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" } } } -** lla\s+[ta][0-7],a_a -** lla\s+[ta][0-7],a_b -** vl(1|2|4)re32\.v\s+v\d+,0\([ta][0-7]\) -** vs(1|2|4)r\.v\s+v\d+,0\([ta][0-7]\) -** ret +** f3: { target { any-opts "-mrvv-vector-bits=zvl" } } +** ( +** lui\s+[ta][0-7],%hi\(a_a\) +** lui\s+[ta][0-7],%hi\(a_b\) +** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) +** addi\s+[ta][0-7],[ta][0-7],%lo\(a_b\) +** | +** lla\s+[ta][0-7],a_a +** lla\s+[ta][0-7],a_b +** ) +** vl1re32.v\s+v\d+,0\([ta][0-7]\) +** vs1r.v\s+v\d+,0\([ta][0-7]\) +** ret */ -extern struct { __INT32_TYPE__ a[16]; } a_a, a_b; +extern struct { __INT32_TYPE__ a[MIN_VECTOR_BYTES / 4]; } a_a, a_b; void f3 () { -- 2.43.0