RISC-V: Add RVV auto-vectorization testcase
Checks
Commit Message
From: Juzhe-Zhong <juzhe.zhong@rivai.ai>
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/rvv.exp: Add testing for RVV auto-vectorization.
* gcc.target/riscv/rvv/vsetvl/vsetvl-17.c: Adapt testcase.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c: New test.
* gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c: New test.
* gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c: New test.
* gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h: New test.
* gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c: New test.
* gcc.target/riscv/rvv/autovec/template-1.h: New test.
* gcc.target/riscv/rvv/autovec/v-1.c: New test.
* gcc.target/riscv/rvv/autovec/v-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve32f-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve32f-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve32x-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve32x-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64d-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64d-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64f-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64f-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64x-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64x-2.c: New test.
* gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c: New test.
* gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c: New test.
---
.../rvv/autovec/partial/multiple_rgroup-1.c | 6 +
.../rvv/autovec/partial/multiple_rgroup-1.h | 304 +++++++
.../rvv/autovec/partial/multiple_rgroup-2.c | 6 +
.../rvv/autovec/partial/multiple_rgroup-2.h | 546 ++++++++++++
.../rvv/autovec/partial/multiple_rgroup-2.s | 774 ++++++++++++++++++
.../autovec/partial/multiple_rgroup_run-1.c | 19 +
.../autovec/partial/multiple_rgroup_run-2.c | 19 +
.../rvv/autovec/partial/single_rgroup-1.c | 8 +
.../rvv/autovec/partial/single_rgroup-1.h | 106 +++
.../rvv/autovec/partial/single_rgroup_run-1.c | 19 +
.../gcc.target/riscv/rvv/autovec/template-1.h | 68 ++
.../gcc.target/riscv/rvv/autovec/v-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/v-2.c | 6 +
.../gcc.target/riscv/rvv/autovec/zve32f-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/zve32f-2.c | 5 +
.../riscv/rvv/autovec/zve32f_zvl128b-1.c | 4 +
.../riscv/rvv/autovec/zve32f_zvl128b-2.c | 6 +
.../gcc.target/riscv/rvv/autovec/zve32x-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/zve32x-2.c | 6 +
.../riscv/rvv/autovec/zve32x_zvl128b-1.c | 5 +
.../riscv/rvv/autovec/zve32x_zvl128b-2.c | 6 +
.../gcc.target/riscv/rvv/autovec/zve64d-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/zve64d-2.c | 4 +
.../riscv/rvv/autovec/zve64d_zvl128b-1.c | 4 +
.../riscv/rvv/autovec/zve64d_zvl128b-2.c | 6 +
.../gcc.target/riscv/rvv/autovec/zve64f-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/zve64f-2.c | 4 +
.../riscv/rvv/autovec/zve64f_zvl128b-1.c | 4 +
.../riscv/rvv/autovec/zve64f_zvl128b-2.c | 6 +
.../gcc.target/riscv/rvv/autovec/zve64x-1.c | 4 +
.../gcc.target/riscv/rvv/autovec/zve64x-2.c | 4 +
.../riscv/rvv/autovec/zve64x_zvl128b-1.c | 4 +
.../riscv/rvv/autovec/zve64x_zvl128b-2.c | 6 +
gcc/testsuite/gcc.target/riscv/rvv/rvv.exp | 16 +
.../gcc.target/riscv/rvv/vsetvl/vsetvl-17.c | 2 +-
35 files changed, 1996 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/template-1.h
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/v-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c
Comments
You included asm output by accidently :P
On Thu, Apr 6, 2023 at 10:45 PM <juzhe.zhong@rivai.ai> wrote:
>
> From: Juzhe-Zhong <juzhe.zhong@rivai.ai>
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/riscv/rvv/rvv.exp: Add testing for RVV auto-vectorization.
> * gcc.target/riscv/rvv/vsetvl/vsetvl-17.c: Adapt testcase.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c: New test.
> * gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c: New test.
> * gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c: New test.
> * gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h: New test.
> * gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c: New test.
> * gcc.target/riscv/rvv/autovec/template-1.h: New test.
> * gcc.target/riscv/rvv/autovec/v-1.c: New test.
> * gcc.target/riscv/rvv/autovec/v-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32f-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32f-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32x-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32x-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64d-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64d-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64f-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64f-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64x-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64x-2.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c: New test.
> * gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c: New test.
>
> ---
> .../rvv/autovec/partial/multiple_rgroup-1.c | 6 +
> .../rvv/autovec/partial/multiple_rgroup-1.h | 304 +++++++
> .../rvv/autovec/partial/multiple_rgroup-2.c | 6 +
> .../rvv/autovec/partial/multiple_rgroup-2.h | 546 ++++++++++++
> .../rvv/autovec/partial/multiple_rgroup-2.s | 774 ++++++++++++++++++
> .../autovec/partial/multiple_rgroup_run-1.c | 19 +
> .../autovec/partial/multiple_rgroup_run-2.c | 19 +
> .../rvv/autovec/partial/single_rgroup-1.c | 8 +
> .../rvv/autovec/partial/single_rgroup-1.h | 106 +++
> .../rvv/autovec/partial/single_rgroup_run-1.c | 19 +
> .../gcc.target/riscv/rvv/autovec/template-1.h | 68 ++
> .../gcc.target/riscv/rvv/autovec/v-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/v-2.c | 6 +
> .../gcc.target/riscv/rvv/autovec/zve32f-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/zve32f-2.c | 5 +
> .../riscv/rvv/autovec/zve32f_zvl128b-1.c | 4 +
> .../riscv/rvv/autovec/zve32f_zvl128b-2.c | 6 +
> .../gcc.target/riscv/rvv/autovec/zve32x-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/zve32x-2.c | 6 +
> .../riscv/rvv/autovec/zve32x_zvl128b-1.c | 5 +
> .../riscv/rvv/autovec/zve32x_zvl128b-2.c | 6 +
> .../gcc.target/riscv/rvv/autovec/zve64d-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/zve64d-2.c | 4 +
> .../riscv/rvv/autovec/zve64d_zvl128b-1.c | 4 +
> .../riscv/rvv/autovec/zve64d_zvl128b-2.c | 6 +
> .../gcc.target/riscv/rvv/autovec/zve64f-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/zve64f-2.c | 4 +
> .../riscv/rvv/autovec/zve64f_zvl128b-1.c | 4 +
> .../riscv/rvv/autovec/zve64f_zvl128b-2.c | 6 +
> .../gcc.target/riscv/rvv/autovec/zve64x-1.c | 4 +
> .../gcc.target/riscv/rvv/autovec/zve64x-2.c | 4 +
> .../riscv/rvv/autovec/zve64x_zvl128b-1.c | 4 +
> .../riscv/rvv/autovec/zve64x_zvl128b-2.c | 6 +
> gcc/testsuite/gcc.target/riscv/rvv/rvv.exp | 16 +
> .../gcc.target/riscv/rvv/vsetvl/vsetvl-17.c | 2 +-
> 35 files changed, 1996 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/template-1.h
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/v-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-2.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c
> new file mode 100644
> index 00000000000..69cc3be78f7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax" } */
> +
> +#include "multiple_rgroup-1.h"
> +
> +TEST_ALL (test_1)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h
> new file mode 100644
> index 00000000000..755ee2b3616
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-1.h
> @@ -0,0 +1,304 @@
> +#include <stddef.h>
> +#include <stdint.h>
> +
> +#define test_1(TYPE1, TYPE2) \
> + void __attribute__ ((noinline, noclone)) \
> + test_1_##TYPE1_##TYPE2 (TYPE1 *__restrict f, TYPE2 *__restrict d, TYPE1 x, \
> + TYPE1 x2, TYPE2 y, int n) \
> + { \
> + for (int i = 0; i < n; ++i) \
> + { \
> + f[i * 2 + 0] = x; \
> + f[i * 2 + 1] = x2; \
> + d[i] = y; \
> + } \
> + }
> +
> +#define run_1(TYPE1, TYPE2) \
> + int n_1_##TYPE1_##TYPE2 = 1; \
> + TYPE1 x_1_##TYPE1 = 117; \
> + TYPE1 x2_1_##TYPE1 = 232; \
> + TYPE2 y_1_##TYPE2 = 9762; \
> + TYPE1 f_1_##TYPE1[2 * 2 + 1] = {0}; \
> + TYPE2 d_1_##TYPE2[2] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_1_##TYPE1, d_1_##TYPE2, x_1_##TYPE1, x2_1_##TYPE1, \
> + y_1_##TYPE2, n_1_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_1_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_1_##TYPE1[i * 2 + 0] != x_1_##TYPE1) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 2 + 1] != x2_1_##TYPE1) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i] != y_1_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_1_##TYPE1_##TYPE2; i < n_1_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_1_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_2(TYPE1, TYPE2) \
> + int n_2_##TYPE1_##TYPE2 = 17; \
> + TYPE1 x_2_##TYPE1 = 133; \
> + TYPE1 x2_2_##TYPE1 = 94; \
> + TYPE2 y_2_##TYPE2 = 8672; \
> + TYPE1 f_2_##TYPE1[18 * 2 + 1] = {0}; \
> + TYPE2 d_2_##TYPE2[18] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_2_##TYPE1, d_2_##TYPE2, x_2_##TYPE1, x2_2_##TYPE1, \
> + y_2_##TYPE2, n_2_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_2_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_2_##TYPE1[i * 2 + 0] != x_2_##TYPE1) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 2 + 1] != x2_2_##TYPE1) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i] != y_2_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_2_##TYPE1_##TYPE2; i < n_2_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_2_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_3(TYPE1, TYPE2) \
> + int n_3_##TYPE1_##TYPE2 = 32; \
> + TYPE1 x_3_##TYPE1 = 233; \
> + TYPE1 x2_3_##TYPE1 = 78; \
> + TYPE2 y_3_##TYPE2 = 1234; \
> + TYPE1 f_3_##TYPE1[33 * 2 + 1] = {0}; \
> + TYPE2 d_3_##TYPE2[33] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_3_##TYPE1, d_3_##TYPE2, x_3_##TYPE1, x2_3_##TYPE1, \
> + y_3_##TYPE2, n_3_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_3_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_3_##TYPE1[i * 2 + 0] != x_3_##TYPE1) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 2 + 1] != x2_3_##TYPE1) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i] != y_3_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_3_##TYPE1_##TYPE2; i < n_3_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_3_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_4(TYPE1, TYPE2) \
> + int n_4_##TYPE1_##TYPE2 = 128; \
> + TYPE1 x_4_##TYPE1 = 222; \
> + TYPE1 x2_4_##TYPE1 = 59; \
> + TYPE2 y_4_##TYPE2 = 4321; \
> + TYPE1 f_4_##TYPE1[129 * 2 + 1] = {0}; \
> + TYPE2 d_4_##TYPE2[129] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_4_##TYPE1, d_4_##TYPE2, x_4_##TYPE1, x2_4_##TYPE1, \
> + y_4_##TYPE2, n_4_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_4_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_4_##TYPE1[i * 2 + 0] != x_4_##TYPE1) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 2 + 1] != x2_4_##TYPE1) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i] != y_4_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_4_##TYPE1_##TYPE2; i < n_4_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_4_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_5(TYPE1, TYPE2) \
> + int n_5_##TYPE1_##TYPE2 = 177; \
> + TYPE1 x_5_##TYPE1 = 111; \
> + TYPE1 x2_5_##TYPE1 = 189; \
> + TYPE2 y_5_##TYPE2 = 5555; \
> + TYPE1 f_5_##TYPE1[178 * 2 + 1] = {0}; \
> + TYPE2 d_5_##TYPE2[178] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_5_##TYPE1, d_5_##TYPE2, x_5_##TYPE1, x2_5_##TYPE1, \
> + y_5_##TYPE2, n_5_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_5_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_5_##TYPE1[i * 2 + 0] != x_5_##TYPE1) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 2 + 1] != x2_5_##TYPE1) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i] != y_5_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_5_##TYPE1_##TYPE2; i < n_5_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_5_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_6(TYPE1, TYPE2) \
> + int n_6_##TYPE1_##TYPE2 = 255; \
> + TYPE1 x_6_##TYPE1 = 123; \
> + TYPE1 x2_6_##TYPE1 = 132; \
> + TYPE2 y_6_##TYPE2 = 6655; \
> + TYPE1 f_6_##TYPE1[256 * 2 + 1] = {0}; \
> + TYPE2 d_6_##TYPE2[256] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_6_##TYPE1, d_6_##TYPE2, x_6_##TYPE1, x2_6_##TYPE1, \
> + y_6_##TYPE2, n_6_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_6_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_6_##TYPE1[i * 2 + 0] != x_6_##TYPE1) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 2 + 1] != x2_6_##TYPE1) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i] != y_6_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_6_##TYPE1_##TYPE2; i < n_6_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_6_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_7(TYPE1, TYPE2) \
> + int n_7_##TYPE1_##TYPE2 = 333; \
> + TYPE1 x_7_##TYPE1 = 39; \
> + TYPE1 x2_7_##TYPE1 = 59; \
> + TYPE2 y_7_##TYPE2 = 5968; \
> + TYPE1 f_7_##TYPE1[334 * 2 + 1] = {0}; \
> + TYPE2 d_7_##TYPE2[334] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_7_##TYPE1, d_7_##TYPE2, x_7_##TYPE1, x2_7_##TYPE1, \
> + y_7_##TYPE2, n_7_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_7_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_7_##TYPE1[i * 2 + 0] != x_7_##TYPE1) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 2 + 1] != x2_7_##TYPE1) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i] != y_7_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_7_##TYPE1_##TYPE2; i < n_7_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_7_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_8(TYPE1, TYPE2) \
> + int n_8_##TYPE1_##TYPE2 = 512; \
> + TYPE1 x_8_##TYPE1 = 71; \
> + TYPE1 x2_8_##TYPE1 = 255; \
> + TYPE2 y_8_##TYPE2 = 3366; \
> + TYPE1 f_8_##TYPE1[513 * 2 + 1] = {0}; \
> + TYPE2 d_8_##TYPE2[513] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_8_##TYPE1, d_8_##TYPE2, x_8_##TYPE1, x2_8_##TYPE1, \
> + y_8_##TYPE2, n_8_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_8_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_8_##TYPE1[i * 2 + 0] != x_8_##TYPE1) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 2 + 1] != x2_8_##TYPE1) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i] != y_8_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_8_##TYPE1_##TYPE2; i < n_8_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_8_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_9(TYPE1, TYPE2) \
> + int n_9_##TYPE1_##TYPE2 = 637; \
> + TYPE1 x_9_##TYPE1 = 157; \
> + TYPE1 x2_9_##TYPE1 = 89; \
> + TYPE2 y_9_##TYPE2 = 5511; \
> + TYPE1 f_9_##TYPE1[638 * 2 + 1] = {0}; \
> + TYPE2 d_9_##TYPE2[638] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_9_##TYPE1, d_9_##TYPE2, x_9_##TYPE1, x2_9_##TYPE1, \
> + y_9_##TYPE2, n_9_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_9_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_9_##TYPE1[i * 2 + 0] != x_9_##TYPE1) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 2 + 1] != x2_9_##TYPE1) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i] != y_9_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_9_##TYPE1_##TYPE2; i < n_9_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_9_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_10(TYPE1, TYPE2) \
> + int n_10_##TYPE1_##TYPE2 = 777; \
> + TYPE1 x_10_##TYPE1 = 203; \
> + TYPE1 x2_10_##TYPE1 = 200; \
> + TYPE2 y_10_##TYPE2 = 2023; \
> + TYPE1 f_10_##TYPE1[778 * 2 + 1] = {0}; \
> + TYPE2 d_10_##TYPE2[778] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_10_##TYPE1, d_10_##TYPE2, x_10_##TYPE1, \
> + x2_10_##TYPE1, y_10_##TYPE2, n_10_##TYPE1_##TYPE2); \
> + for (int i = 0; i < n_10_##TYPE1_##TYPE2; ++i) \
> + { \
> + if (f_10_##TYPE1[i * 2 + 0] != x_10_##TYPE1) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 2 + 1] != x2_10_##TYPE1) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i] != y_10_##TYPE2) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_10_##TYPE1_##TYPE2; i < n_10_##TYPE1_##TYPE2 + 1; ++i) \
> + { \
> + if (f_10_##TYPE1[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define TEST_ALL(T) \
> + T (int8_t, int16_t) \
> + T (uint8_t, uint16_t) \
> + T (int16_t, int32_t) \
> + T (uint16_t, uint32_t) \
> + T (int32_t, int64_t) \
> + T (uint32_t, uint64_t) \
> + T (float, double)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c
> new file mode 100644
> index 00000000000..d1c41907547
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax" } */
> +
> +#include "multiple_rgroup-2.h"
> +
> +TEST_ALL (test_1)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h
> new file mode 100644
> index 00000000000..aa50726697c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.h
> @@ -0,0 +1,546 @@
> +#include <stddef.h>
> +#include <stdint.h>
> +
> +#define test_1(TYPE1, TYPE2, TYPE3) \
> + void __attribute__ ((noinline, noclone)) \
> + test_1_##TYPE1_##TYPE2 (TYPE1 *__restrict f, TYPE2 *__restrict d, \
> + TYPE3 *__restrict e, TYPE1 x, TYPE1 x2, TYPE1 x3, \
> + TYPE1 x4, TYPE2 y, TYPE2 y2, TYPE3 z, int n) \
> + { \
> + for (int i = 0; i < n; ++i) \
> + { \
> + f[i * 4 + 0] = x; \
> + f[i * 4 + 1] = x2; \
> + f[i * 4 + 2] = x3; \
> + f[i * 4 + 3] = x4; \
> + d[i * 2 + 0] = y; \
> + d[i * 2 + 1] = y2; \
> + e[i] = z; \
> + } \
> + }
> +
> +#define run_1(TYPE1, TYPE2, TYPE3) \
> + int n_1_##TYPE1_##TYPE2_##TYPE3 = 1; \
> + TYPE1 x_1_##TYPE1 = 117; \
> + TYPE1 x2_1_##TYPE1 = 232; \
> + TYPE1 x3_1_##TYPE1 = 127; \
> + TYPE1 x4_1_##TYPE1 = 11; \
> + TYPE2 y_1_##TYPE2 = 9762; \
> + TYPE2 y2_1_##TYPE2 = 6279; \
> + TYPE3 z_1_##TYPE3 = 5891663; \
> + TYPE1 f_1_##TYPE1[2 * 4 + 1] = {0}; \
> + TYPE2 d_1_##TYPE2[2 * 2 + 1] = {0}; \
> + TYPE3 e_1_##TYPE3[2] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_1_##TYPE1, d_1_##TYPE2, e_1_##TYPE3, x_1_##TYPE1, \
> + x2_1_##TYPE1, x3_1_##TYPE1, x4_1_##TYPE1, \
> + y_1_##TYPE2, y2_1_##TYPE2, z_1_##TYPE3, \
> + n_1_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_1_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_1_##TYPE1[i * 4 + 0] != x_1_##TYPE1) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 1] != x2_1_##TYPE1) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 2] != x3_1_##TYPE1) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 3] != x4_1_##TYPE1) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i * 2 + 0] != y_1_##TYPE2) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i * 2 + 1] != y2_1_##TYPE2) \
> + __builtin_abort (); \
> + if (e_1_##TYPE3[i] != z_1_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_1_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_1_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_1_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_1_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_1_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_1_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_2(TYPE1, TYPE2, TYPE3) \
> + int n_2_##TYPE1_##TYPE2_##TYPE3 = 17; \
> + TYPE1 x_2_##TYPE1 = 107; \
> + TYPE1 x2_2_##TYPE1 = 202; \
> + TYPE1 x3_2_##TYPE1 = 17; \
> + TYPE1 x4_2_##TYPE1 = 53; \
> + TYPE2 y_2_##TYPE2 = 5566; \
> + TYPE2 y2_2_##TYPE2 = 7926; \
> + TYPE3 z_2_##TYPE3 = 781545971; \
> + TYPE1 f_2_##TYPE1[18 * 4 + 1] = {0}; \
> + TYPE2 d_2_##TYPE2[18 * 2 + 1] = {0}; \
> + TYPE3 e_2_##TYPE3[18] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_2_##TYPE1, d_2_##TYPE2, e_2_##TYPE3, x_2_##TYPE1, \
> + x2_2_##TYPE1, x3_2_##TYPE1, x4_2_##TYPE1, \
> + y_2_##TYPE2, y2_2_##TYPE2, z_2_##TYPE3, \
> + n_2_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_2_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_2_##TYPE1[i * 4 + 0] != x_2_##TYPE1) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 1] != x2_2_##TYPE1) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 2] != x3_2_##TYPE1) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 3] != x4_2_##TYPE1) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i * 2 + 0] != y_2_##TYPE2) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i * 2 + 1] != y2_2_##TYPE2) \
> + __builtin_abort (); \
> + if (e_2_##TYPE3[i] != z_2_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_2_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_2_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_2_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_2_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_2_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_2_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_3(TYPE1, TYPE2, TYPE3) \
> + int n_3_##TYPE1_##TYPE2_##TYPE3 = 32; \
> + TYPE1 x_3_##TYPE1 = 109; \
> + TYPE1 x2_3_##TYPE1 = 239; \
> + TYPE1 x3_3_##TYPE1 = 151; \
> + TYPE1 x4_3_##TYPE1 = 3; \
> + TYPE2 y_3_##TYPE2 = 1234; \
> + TYPE2 y2_3_##TYPE2 = 4321; \
> + TYPE3 z_3_##TYPE3 = 145615615; \
> + TYPE1 f_3_##TYPE1[33 * 4 + 1] = {0}; \
> + TYPE2 d_3_##TYPE2[33 * 2 + 1] = {0}; \
> + TYPE3 e_3_##TYPE3[33] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_3_##TYPE1, d_3_##TYPE2, e_3_##TYPE3, x_3_##TYPE1, \
> + x2_3_##TYPE1, x3_3_##TYPE1, x4_3_##TYPE1, \
> + y_3_##TYPE2, y2_3_##TYPE2, z_3_##TYPE3, \
> + n_3_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_3_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_3_##TYPE1[i * 4 + 0] != x_3_##TYPE1) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 1] != x2_3_##TYPE1) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 2] != x3_3_##TYPE1) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 3] != x4_3_##TYPE1) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i * 2 + 0] != y_3_##TYPE2) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i * 2 + 1] != y2_3_##TYPE2) \
> + __builtin_abort (); \
> + if (e_3_##TYPE3[i] != z_3_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_3_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_3_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_3_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_3_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_3_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_3_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_4(TYPE1, TYPE2, TYPE3) \
> + int n_4_##TYPE1_##TYPE2_##TYPE3 = 128; \
> + TYPE1 x_4_##TYPE1 = 239; \
> + TYPE1 x2_4_##TYPE1 = 132; \
> + TYPE1 x3_4_##TYPE1 = 39; \
> + TYPE1 x4_4_##TYPE1 = 48; \
> + TYPE2 y_4_##TYPE2 = 1036; \
> + TYPE2 y2_4_##TYPE2 = 3665; \
> + TYPE3 z_4_##TYPE3 = 5145656; \
> + TYPE1 f_4_##TYPE1[129 * 4 + 1] = {0}; \
> + TYPE2 d_4_##TYPE2[129 * 2 + 1] = {0}; \
> + TYPE3 e_4_##TYPE3[129] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_4_##TYPE1, d_4_##TYPE2, e_4_##TYPE3, x_4_##TYPE1, \
> + x2_4_##TYPE1, x3_4_##TYPE1, x4_4_##TYPE1, \
> + y_4_##TYPE2, y2_4_##TYPE2, z_4_##TYPE3, \
> + n_4_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_4_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_4_##TYPE1[i * 4 + 0] != x_4_##TYPE1) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 1] != x2_4_##TYPE1) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 2] != x3_4_##TYPE1) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 3] != x4_4_##TYPE1) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i * 2 + 0] != y_4_##TYPE2) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i * 2 + 1] != y2_4_##TYPE2) \
> + __builtin_abort (); \
> + if (e_4_##TYPE3[i] != z_4_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_4_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_4_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_4_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_4_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_4_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_4_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_5(TYPE1, TYPE2, TYPE3) \
> + int n_5_##TYPE1_##TYPE2_##TYPE3 = 177; \
> + TYPE1 x_5_##TYPE1 = 239; \
> + TYPE1 x2_5_##TYPE1 = 132; \
> + TYPE1 x3_5_##TYPE1 = 39; \
> + TYPE1 x4_5_##TYPE1 = 48; \
> + TYPE2 y_5_##TYPE2 = 1036; \
> + TYPE2 y2_5_##TYPE2 = 3665; \
> + TYPE3 z_5_##TYPE3 = 5145656; \
> + TYPE1 f_5_##TYPE1[178 * 4 + 1] = {0}; \
> + TYPE2 d_5_##TYPE2[178 * 2 + 1] = {0}; \
> + TYPE3 e_5_##TYPE3[178] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_5_##TYPE1, d_5_##TYPE2, e_5_##TYPE3, x_5_##TYPE1, \
> + x2_5_##TYPE1, x3_5_##TYPE1, x4_5_##TYPE1, \
> + y_5_##TYPE2, y2_5_##TYPE2, z_5_##TYPE3, \
> + n_5_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_5_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_5_##TYPE1[i * 4 + 0] != x_5_##TYPE1) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 1] != x2_5_##TYPE1) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 2] != x3_5_##TYPE1) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 3] != x4_5_##TYPE1) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i * 2 + 0] != y_5_##TYPE2) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i * 2 + 1] != y2_5_##TYPE2) \
> + __builtin_abort (); \
> + if (e_5_##TYPE3[i] != z_5_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_5_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_5_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_5_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_5_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_5_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_5_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_6(TYPE1, TYPE2, TYPE3) \
> + int n_6_##TYPE1_##TYPE2_##TYPE3 = 255; \
> + TYPE1 x_6_##TYPE1 = 239; \
> + TYPE1 x2_6_##TYPE1 = 132; \
> + TYPE1 x3_6_##TYPE1 = 39; \
> + TYPE1 x4_6_##TYPE1 = 48; \
> + TYPE2 y_6_##TYPE2 = 1036; \
> + TYPE2 y2_6_##TYPE2 = 3665; \
> + TYPE3 z_6_##TYPE3 = 5145656; \
> + TYPE1 f_6_##TYPE1[256 * 4 + 1] = {0}; \
> + TYPE2 d_6_##TYPE2[256 * 2 + 1] = {0}; \
> + TYPE3 e_6_##TYPE3[256] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_6_##TYPE1, d_6_##TYPE2, e_6_##TYPE3, x_6_##TYPE1, \
> + x2_6_##TYPE1, x3_6_##TYPE1, x4_6_##TYPE1, \
> + y_6_##TYPE2, y2_6_##TYPE2, z_6_##TYPE3, \
> + n_6_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_6_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_6_##TYPE1[i * 4 + 0] != x_6_##TYPE1) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 1] != x2_6_##TYPE1) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 2] != x3_6_##TYPE1) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 3] != x4_6_##TYPE1) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i * 2 + 0] != y_6_##TYPE2) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i * 2 + 1] != y2_6_##TYPE2) \
> + __builtin_abort (); \
> + if (e_6_##TYPE3[i] != z_6_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_6_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_6_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_6_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_6_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_6_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_6_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_7(TYPE1, TYPE2, TYPE3) \
> + int n_7_##TYPE1_##TYPE2_##TYPE3 = 333; \
> + TYPE1 x_7_##TYPE1 = 239; \
> + TYPE1 x2_7_##TYPE1 = 132; \
> + TYPE1 x3_7_##TYPE1 = 39; \
> + TYPE1 x4_7_##TYPE1 = 48; \
> + TYPE2 y_7_##TYPE2 = 1036; \
> + TYPE2 y2_7_##TYPE2 = 3665; \
> + TYPE3 z_7_##TYPE3 = 5145656; \
> + TYPE1 f_7_##TYPE1[334 * 4 + 1] = {0}; \
> + TYPE2 d_7_##TYPE2[334 * 2 + 1] = {0}; \
> + TYPE3 e_7_##TYPE3[334] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_7_##TYPE1, d_7_##TYPE2, e_7_##TYPE3, x_7_##TYPE1, \
> + x2_7_##TYPE1, x3_7_##TYPE1, x4_7_##TYPE1, \
> + y_7_##TYPE2, y2_7_##TYPE2, z_7_##TYPE3, \
> + n_7_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_7_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_7_##TYPE1[i * 4 + 0] != x_7_##TYPE1) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 1] != x2_7_##TYPE1) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 2] != x3_7_##TYPE1) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 3] != x4_7_##TYPE1) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i * 2 + 0] != y_7_##TYPE2) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i * 2 + 1] != y2_7_##TYPE2) \
> + __builtin_abort (); \
> + if (e_7_##TYPE3[i] != z_7_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_7_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_7_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_7_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_7_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_7_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_7_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_8(TYPE1, TYPE2, TYPE3) \
> + int n_8_##TYPE1_##TYPE2_##TYPE3 = 512; \
> + TYPE1 x_8_##TYPE1 = 239; \
> + TYPE1 x2_8_##TYPE1 = 132; \
> + TYPE1 x3_8_##TYPE1 = 39; \
> + TYPE1 x4_8_##TYPE1 = 48; \
> + TYPE2 y_8_##TYPE2 = 1036; \
> + TYPE2 y2_8_##TYPE2 = 3665; \
> + TYPE3 z_8_##TYPE3 = 5145656; \
> + TYPE1 f_8_##TYPE1[513 * 4 + 1] = {0}; \
> + TYPE2 d_8_##TYPE2[513 * 2 + 1] = {0}; \
> + TYPE3 e_8_##TYPE3[513] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_8_##TYPE1, d_8_##TYPE2, e_8_##TYPE3, x_8_##TYPE1, \
> + x2_8_##TYPE1, x3_8_##TYPE1, x4_8_##TYPE1, \
> + y_8_##TYPE2, y2_8_##TYPE2, z_8_##TYPE3, \
> + n_8_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_8_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_8_##TYPE1[i * 4 + 0] != x_8_##TYPE1) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 1] != x2_8_##TYPE1) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 2] != x3_8_##TYPE1) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 3] != x4_8_##TYPE1) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i * 2 + 0] != y_8_##TYPE2) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i * 2 + 1] != y2_8_##TYPE2) \
> + __builtin_abort (); \
> + if (e_8_##TYPE3[i] != z_8_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_8_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_8_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_8_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_8_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_8_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_8_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_9(TYPE1, TYPE2, TYPE3) \
> + int n_9_##TYPE1_##TYPE2_##TYPE3 = 637; \
> + TYPE1 x_9_##TYPE1 = 222; \
> + TYPE1 x2_9_##TYPE1 = 111; \
> + TYPE1 x3_9_##TYPE1 = 11; \
> + TYPE1 x4_9_##TYPE1 = 7; \
> + TYPE2 y_9_##TYPE2 = 2034; \
> + TYPE2 y2_9_##TYPE2 = 6987; \
> + TYPE3 z_9_##TYPE3 = 1564616; \
> + TYPE1 f_9_##TYPE1[638 * 4 + 1] = {0}; \
> + TYPE2 d_9_##TYPE2[638 * 2 + 1] = {0}; \
> + TYPE3 e_9_##TYPE3[638] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_9_##TYPE1, d_9_##TYPE2, e_9_##TYPE3, x_9_##TYPE1, \
> + x2_9_##TYPE1, x3_9_##TYPE1, x4_9_##TYPE1, \
> + y_9_##TYPE2, y2_9_##TYPE2, z_9_##TYPE3, \
> + n_9_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_9_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_9_##TYPE1[i * 4 + 0] != x_9_##TYPE1) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 1] != x2_9_##TYPE1) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 2] != x3_9_##TYPE1) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 3] != x4_9_##TYPE1) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i * 2 + 0] != y_9_##TYPE2) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i * 2 + 1] != y2_9_##TYPE2) \
> + __builtin_abort (); \
> + if (e_9_##TYPE3[i] != z_9_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_9_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_9_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_9_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_9_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_9_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_9_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define run_10(TYPE1, TYPE2, TYPE3) \
> + int n_10_##TYPE1_##TYPE2_##TYPE3 = 777; \
> + TYPE1 x_10_##TYPE1 = 222; \
> + TYPE1 x2_10_##TYPE1 = 111; \
> + TYPE1 x3_10_##TYPE1 = 11; \
> + TYPE1 x4_10_##TYPE1 = 7; \
> + TYPE2 y_10_##TYPE2 = 2034; \
> + TYPE2 y2_10_##TYPE2 = 6987; \
> + TYPE3 z_10_##TYPE3 = 1564616; \
> + TYPE1 f_10_##TYPE1[778 * 4 + 1] = {0}; \
> + TYPE2 d_10_##TYPE2[778 * 2 + 1] = {0}; \
> + TYPE3 e_10_##TYPE3[778] = {0}; \
> + test_1_##TYPE1_##TYPE2 (f_10_##TYPE1, d_10_##TYPE2, e_10_##TYPE3, x_10_##TYPE1, \
> + x2_10_##TYPE1, x3_10_##TYPE1, x4_10_##TYPE1, \
> + y_10_##TYPE2, y2_10_##TYPE2, z_10_##TYPE3, \
> + n_10_##TYPE1_##TYPE2_##TYPE3); \
> + for (int i = 0; i < n_10_##TYPE1_##TYPE2_##TYPE3; ++i) \
> + { \
> + if (f_10_##TYPE1[i * 4 + 0] != x_10_##TYPE1) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 1] != x2_10_##TYPE1) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 2] != x3_10_##TYPE1) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 3] != x4_10_##TYPE1) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i * 2 + 0] != y_10_##TYPE2) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i * 2 + 1] != y2_10_##TYPE2) \
> + __builtin_abort (); \
> + if (e_10_##TYPE3[i] != z_10_##TYPE3) \
> + __builtin_abort (); \
> + } \
> + for (int i = n_10_##TYPE1_##TYPE2_##TYPE3; \
> + i < n_10_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
> + { \
> + if (f_10_##TYPE1[i * 4 + 0] != 0) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 1] != 0) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 2] != 0) \
> + __builtin_abort (); \
> + if (f_10_##TYPE1[i * 4 + 3] != 0) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i * 2 + 0] != 0) \
> + __builtin_abort (); \
> + if (d_10_##TYPE2[i * 2 + 1] != 0) \
> + __builtin_abort (); \
> + if (e_10_##TYPE3[i] != 0) \
> + __builtin_abort (); \
> + }
> +
> +#define TEST_ALL(T) \
> + T (int8_t, int16_t, int32_t) \
> + T (uint8_t, uint16_t, uint32_t) \
> + T (int16_t, int32_t, int64_t) \
> + T (uint16_t, uint32_t, uint64_t)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s
> new file mode 100644
> index 00000000000..64b36fe5092
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup-2.s
> @@ -0,0 +1,774 @@
> + .file "multiple_rgroup-2.c"
> + .option nopic
> + .attribute arch, "rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
> + .attribute unaligned_access, 0
> + .attribute stack_align, 16
> + .text
> + .align 1
> + .globl test_1_TYPE1_int16_t
> + .type test_1_TYPE1_int16_t, @function
> +test_1_TYPE1_int16_t:
> + addi sp,sp,-48
> + lw t5,56(sp)
> + lh t3,48(sp)
> + lw t6,52(sp)
> + ble t5,zero,.L1
> + or t1,a2,a1
> + or t1,a0,t1
> + andi t1,t1,15
> + bne t1,zero,.L3
> + andi a4,a4,0xff
> + andi a3,a3,0xff
> + slli a4,a4,8
> + andi a5,a5,0xff
> + slli a5,a5,16
> + or t4,a3,a4
> + vsetvli t1,zero,e8,m1,ta,ma
> + li t2,16777216
> + addi t2,t2,-1
> + or t1,t4,a5
> + slli a6,a6,24
> + and t1,t1,t2
> + vmv.v.i v1,0
> + sw s0,44(sp)
> + vs1r.v v1,0(sp)
> + or s0,t1,a6
> + sw s0,0(sp)
> + lw s0,4(sp)
> + li t4,-65536
> + addi t4,t4,255
> + andi t0,s0,-256
> + or t0,t0,a3
> + and s0,t0,t4
> + li t1,-16711680
> + addi t1,t1,-1
> + or s0,s0,a4
> + and t0,s0,t1
> + or t0,t0,a5
> + and t0,t0,t2
> + or s0,t0,a6
> + sw s0,4(sp)
> + lw s0,8(sp)
> + slli a7,a7,16
> + li t0,65536
> + srli a7,a7,16
> + addi t0,t0,-1
> + sw s1,40(sp)
> + slli s1,t3,16
> + vsetvli t3,zero,e16,m1,ta,ma
> + sw s2,36(sp)
> + sw s3,32(sp)
> + andi s2,s0,-256
> + addi t3,sp,16
> + and s0,a7,t0
> + vmv.v.i v1,0
> + or s0,s0,s1
> + vs1r.v v1,0(t3)
> + sw s0,16(sp)
> + lw s0,20(sp)
> + li t3,-65536
> + or s2,s2,a3
> + and s0,t3,s0
> + and s3,s2,t4
> + or s0,s0,a7
> + or s3,s3,a4
> + and s0,s0,t0
> + and s2,s3,t1
> + or s0,s0,s1
> + or s2,s2,a5
> + sw s0,20(sp)
> + lw s0,12(sp)
> + and s2,s2,t2
> + or s2,s2,a6
> + sw s2,8(sp)
> + andi s2,s0,-256
> + lw s0,24(sp)
> + or s2,s2,a3
> + and t4,s2,t4
> + and s0,t3,s0
> + or a3,s0,a7
> + and a3,a3,t0
> + or t4,t4,a4
> + or a4,a3,s1
> + sw a4,24(sp)
> + lw a4,28(sp)
> + and t1,t4,t1
> + or t1,t1,a5
> + and t3,t3,a4
> + or t3,t3,a7
> + and t1,t1,t2
> + and t3,t3,t0
> + or a4,t1,a6
> + sw a4,12(sp)
> + or a4,t3,s1
> + slli a7,t5,2
> + sw a4,28(sp)
> + li a5,48
> + vsetvli a4,zero,e32,m1,ta,ma
> + mv t3,a7
> + vmv.v.x v1,t6
> + bltu a7,a5,.L14
> + li a5,32
> + addi t3,t3,-48
> + mv t4,a7
> + bltu a7,a5,.L15
> +.L5:
> + li a5,16
> + addi t4,t4,-32
> + mv t1,a7
> + bltu a7,a5,.L16
> +.L6:
> + addi t1,t1,-16
> +.L7:
> + vsetvli a6,a7,e8,m4,tu,mu
> + vl1re8.v v2,0(sp)
> + addi a4,a0,16
> + vsetvli zero,a6,e8,m1,ta,ma
> + vse8.v v2,0(a0)
> + addi a5,a0,32
> + vsetvli a3,t1,e8,m4,tu,mu
> + vsetvli zero,a3,e8,m1,ta,ma
> + vse8.v v2,0(a4)
> + addi t6,a0,48
> + vsetvli a4,t4,e8,m4,tu,mu
> + vsetvli zero,a4,e8,m1,ta,ma
> + vse8.v v2,0(a5)
> + srli t5,a6,1
> + vsetvli a5,t3,e8,m4,tu,mu
> + addi s0,sp,16
> + vsetvli zero,a5,e8,m1,ta,ma
> + vse8.v v2,0(t6)
> + vl1re16.v v2,0(s0)
> + srli t6,a3,1
> + vsetvli zero,t5,e16,m1,ta,ma
> + addi t5,a1,16
> + vse16.v v2,0(a1)
> + vsetvli zero,t6,e16,m1,ta,ma
> + srli t6,a4,1
> + vse16.v v2,0(t5)
> + addi t5,a1,32
> + vsetvli zero,t6,e16,m1,ta,ma
> + srli t6,a5,1
> + vse16.v v2,0(t5)
> + addi t5,a1,48
> + vsetvli zero,t6,e16,m1,ta,ma
> + vse16.v v2,0(t5)
> + srli t5,a6,2
> + vsetvli zero,t5,e32,m1,ta,ma
> + addi t6,a2,16
> + vse32.v v1,0(a2)
> + srli a3,a3,2
> + vsetvli zero,a3,e32,m1,ta,ma
> + addi t5,a2,32
> + vse32.v v1,0(t6)
> + srli a4,a4,2
> + addi a3,a2,48
> + vsetvli zero,a4,e32,m1,ta,ma
> + srli a5,a5,2
> + vse32.v v1,0(t5)
> + sub a7,a7,a6
> + vsetvli zero,a5,e32,m1,ta,ma
> + vse32.v v1,0(a3)
> + sub t1,t1,a6
> + sub t4,t4,a6
> + sub t3,t3,a6
> + addi a0,a0,64
> + addi a1,a1,64
> + addi a2,a2,64
> + bne a7,zero,.L7
> + lw s0,44(sp)
> + lw s1,40(sp)
> + lw s2,36(sp)
> + lw s3,32(sp)
> +.L1:
> + addi sp,sp,48
> + jr ra
> +.L16:
> + li t1,16
> + j .L6
> +.L15:
> + li t4,32
> + li a5,16
> + addi t4,t4,-32
> + mv t1,a7
> + bgeu a7,a5,.L6
> + j .L16
> +.L14:
> + li t3,48
> + li a5,32
> + addi t3,t3,-48
> + mv t4,a7
> + bgeu a7,a5,.L5
> + j .L15
> +.L3:
> + slli t5,t5,2
> + add t5,a0,t5
> +.L9:
> + sb a3,0(a0)
> + sb a4,1(a0)
> + sb a5,2(a0)
> + sb a6,3(a0)
> + sh a7,0(a1)
> + sh t3,2(a1)
> + sw t6,0(a2)
> + addi a0,a0,4
> + addi a1,a1,4
> + addi a2,a2,4
> + bne a0,t5,.L9
> + addi sp,sp,48
> + jr ra
> + .size test_1_TYPE1_int16_t, .-test_1_TYPE1_int16_t
> + .align 1
> + .globl test_1_TYPE1_uint16_t
> + .type test_1_TYPE1_uint16_t, @function
> +test_1_TYPE1_uint16_t:
> + addi sp,sp,-48
> + lw t1,56(sp)
> + lhu t4,48(sp)
> + lw t5,52(sp)
> + ble t1,zero,.L17
> + or t3,a2,a1
> + or t3,a0,t3
> + andi t3,t3,15
> + bne t3,zero,.L19
> + slli a4,a4,8
> + slli a5,a5,16
> + or t6,a3,a4
> + vsetvli t3,zero,e8,m1,ta,ma
> + li t2,16777216
> + addi t2,t2,-1
> + or t3,t6,a5
> + slli a6,a6,24
> + and t3,t3,t2
> + vmv.v.i v1,0
> + sw s0,44(sp)
> + vs1r.v v1,0(sp)
> + or s0,t3,a6
> + sw s0,0(sp)
> + lw s0,4(sp)
> + li t6,-65536
> + addi t6,t6,255
> + andi t0,s0,-256
> + or t0,t0,a3
> + and s0,t0,t6
> + li t3,-16711680
> + addi t3,t3,-1
> + or s0,s0,a4
> + and t0,s0,t3
> + or t0,t0,a5
> + and t0,t0,t2
> + or s0,t0,a6
> + sw s0,4(sp)
> + lw s0,8(sp)
> + li t0,65536
> + addi t0,t0,-1
> + sw s2,36(sp)
> + andi s2,s0,-256
> + slli s0,t4,16
> + vsetvli t4,zero,e16,m1,ta,ma
> + sw s1,40(sp)
> + sw s3,32(sp)
> + addi t4,sp,16
> + and s1,a7,t0
> + vmv.v.i v1,0
> + or s1,s1,s0
> + vs1r.v v1,0(t4)
> + sw s1,16(sp)
> + lw s1,20(sp)
> + li t4,-65536
> + or s2,s2,a3
> + and s1,t4,s1
> + and s3,s2,t6
> + or s1,s1,a7
> + or s3,s3,a4
> + and s1,s1,t0
> + and s2,s3,t3
> + or s1,s1,s0
> + or s2,s2,a5
> + sw s1,20(sp)
> + lw s1,12(sp)
> + and s2,s2,t2
> + or s2,s2,a6
> + sw s2,8(sp)
> + andi s2,s1,-256
> + lw s1,24(sp)
> + or s2,s2,a3
> + and t6,s2,t6
> + and s1,t4,s1
> + or a3,s1,a7
> + and a3,a3,t0
> + or t6,t6,a4
> + or a4,a3,s0
> + sw a4,24(sp)
> + lw a4,28(sp)
> + and t3,t6,t3
> + or t3,t3,a5
> + and t4,t4,a4
> + and t3,t3,t2
> + or t4,t4,a7
> + or a4,t3,a6
> + and t4,t4,t0
> + sw a4,12(sp)
> + or a4,t4,s0
> + slli t1,t1,2
> + sw a4,28(sp)
> + li a5,48
> + vsetvli a4,zero,e32,m1,ta,ma
> + mv t3,t1
> + vmv.v.x v1,t5
> + bltu t1,a5,.L29
> + li a5,32
> + addi t3,t3,-48
> + mv t4,t1
> + bltu t1,a5,.L30
> +.L21:
> + li a5,16
> + addi t4,t4,-32
> + mv a7,t1
> + bltu t1,a5,.L31
> +.L22:
> + addi a7,a7,-16
> +.L23:
> + vsetvli a6,t1,e8,m4,tu,mu
> + vl1re8.v v2,0(sp)
> + addi a4,a0,16
> + vsetvli zero,a6,e8,m1,ta,ma
> + vse8.v v2,0(a0)
> + addi a5,a0,32
> + vsetvli a3,a7,e8,m4,tu,mu
> + vsetvli zero,a3,e8,m1,ta,ma
> + vse8.v v2,0(a4)
> + addi t6,a0,48
> + vsetvli a4,t4,e8,m4,tu,mu
> + vsetvli zero,a4,e8,m1,ta,ma
> + vse8.v v2,0(a5)
> + srli t5,a6,1
> + vsetvli a5,t3,e8,m4,tu,mu
> + addi s0,sp,16
> + vsetvli zero,a5,e8,m1,ta,ma
> + vse8.v v2,0(t6)
> + vl1re16.v v2,0(s0)
> + srli t6,a3,1
> + vsetvli zero,t5,e16,m1,ta,ma
> + addi t5,a1,16
> + vse16.v v2,0(a1)
> + vsetvli zero,t6,e16,m1,ta,ma
> + srli t6,a4,1
> + vse16.v v2,0(t5)
> + addi t5,a1,32
> + vsetvli zero,t6,e16,m1,ta,ma
> + srli t6,a5,1
> + vse16.v v2,0(t5)
> + addi t5,a1,48
> + vsetvli zero,t6,e16,m1,ta,ma
> + vse16.v v2,0(t5)
> + srli t5,a6,2
> + vsetvli zero,t5,e32,m1,ta,ma
> + addi t6,a2,16
> + vse32.v v1,0(a2)
> + srli a3,a3,2
> + vsetvli zero,a3,e32,m1,ta,ma
> + addi t5,a2,32
> + vse32.v v1,0(t6)
> + srli a4,a4,2
> + addi a3,a2,48
> + vsetvli zero,a4,e32,m1,ta,ma
> + srli a5,a5,2
> + vse32.v v1,0(t5)
> + sub t1,t1,a6
> + vsetvli zero,a5,e32,m1,ta,ma
> + vse32.v v1,0(a3)
> + sub a7,a7,a6
> + sub t4,t4,a6
> + sub t3,t3,a6
> + addi a0,a0,64
> + addi a1,a1,64
> + addi a2,a2,64
> + bne t1,zero,.L23
> + lw s0,44(sp)
> + lw s1,40(sp)
> + lw s2,36(sp)
> + lw s3,32(sp)
> +.L17:
> + addi sp,sp,48
> + jr ra
> +.L31:
> + li a7,16
> + j .L22
> +.L30:
> + li t4,32
> + li a5,16
> + addi t4,t4,-32
> + mv a7,t1
> + bgeu t1,a5,.L22
> + j .L31
> +.L29:
> + li t3,48
> + li a5,32
> + addi t3,t3,-48
> + mv t4,t1
> + bgeu t1,a5,.L21
> + j .L30
> +.L19:
> + slli t1,t1,2
> + add t1,a0,t1
> +.L25:
> + sb a3,0(a0)
> + sb a4,1(a0)
> + sb a5,2(a0)
> + sb a6,3(a0)
> + sh a7,0(a1)
> + sh t4,2(a1)
> + sw t5,0(a2)
> + addi a0,a0,4
> + addi a1,a1,4
> + addi a2,a2,4
> + bne a0,t1,.L25
> + addi sp,sp,48
> + jr ra
> + .size test_1_TYPE1_uint16_t, .-test_1_TYPE1_uint16_t
> + .align 1
> + .globl test_1_TYPE1_int32_t
> + .type test_1_TYPE1_int32_t, @function
> +test_1_TYPE1_int32_t:
> + addi sp,sp,-64
> + lw t1,80(sp)
> + lw t3,64(sp)
> + lw t5,72(sp)
> + lw t6,76(sp)
> + ble t1,zero,.L32
> + addi t0,t1,-1
> + li t4,6
> + bleu t0,t4,.L34
> + or t4,a2,a1
> + or t4,a0,t4
> + andi t4,t4,15
> + beq t4,zero,.L44
> +.L34:
> + slli t1,t1,3
> + add t1,a0,t1
> +.L40:
> + sh a3,0(a0)
> + sh a4,2(a0)
> + sh a5,4(a0)
> + sh a6,6(a0)
> + sw a7,0(a1)
> + sw t3,4(a1)
> + sw t5,0(a2)
> + sw t6,4(a2)
> + addi a0,a0,8
> + addi a1,a1,8
> + addi a2,a2,8
> + bne a0,t1,.L40
> +.L32:
> + addi sp,sp,64
> + jr ra
> +.L44:
> + sw s0,60(sp)
> + slli t2,a3,16
> + li s0,65536
> + addi s0,s0,-1
> + vsetvli t4,zero,e16,m1,ta,ma
> + srli t2,t2,16
> + slli a4,a4,16
> + and a3,t2,s0
> + addi t4,sp,8
> + or a3,a3,a4
> + vmv.v.i v1,0
> + vs1r.v v1,0(t4)
> + sw a3,8(sp)
> + lw a3,12(sp)
> + li t4,-65536
> + slli a5,a5,16
> + and t0,t4,a3
> + srli a5,a5,16
> + or t0,t0,a5
> + slli a6,a6,16
> + and t0,t0,s0
> + or a3,t0,a6
> + sw a3,12(sp)
> + lw a3,16(sp)
> + sw t3,28(sp)
> + sw t3,36(sp)
> + and a3,t4,a3
> + or a3,a3,t2
> + and a3,a3,s0
> + or a4,a3,a4
> + sw a4,16(sp)
> + lw a4,20(sp)
> + sw a7,24(sp)
> + sw a7,32(sp)
> + and t4,t4,a4
> + or a5,t4,a5
> + and t4,a5,s0
> + or a4,t4,a6
> + sw a4,20(sp)
> + sw t5,40(sp)
> + sw t6,44(sp)
> + slli a5,t1,2
> + addi s0,sp,40
> + li a3,24
> + vsetvli a4,zero,e64,m1,ta,ma
> + mv t3,a5
> + vlse64.v v1,0(s0),zero
> + bltu a5,a3,.L45
> + li a4,16
> + addi t3,t3,-24
> + mv t4,a5
> + bltu a5,a4,.L46
> +.L36:
> + li a4,8
> + addi t4,t4,-16
> + mv t1,a5
> + bltu a5,a4,.L47
> +.L37:
> + addi t1,t1,-8
> +.L38:
> + addi a3,sp,8
> + vsetvli a4,a5,e8,m2,tu,mu
> + vl1re16.v v2,0(a3)
> + addi a6,a0,16
> + vsetvli zero,a4,e16,m1,ta,ma
> + vse16.v v2,0(a0)
> + addi a3,a0,32
> + vsetvli a7,t1,e8,m2,tu,mu
> + vsetvli zero,a7,e16,m1,ta,ma
> + vse16.v v2,0(a6)
> + addi t6,a0,48
> + vsetvli a6,t4,e8,m2,tu,mu
> + vsetvli zero,a6,e16,m1,ta,ma
> + vse16.v v2,0(a3)
> + srli t5,a4,1
> + vsetvli a3,t3,e8,m2,tu,mu
> + addi s0,sp,24
> + vsetvli zero,a3,e16,m1,ta,ma
> + vse16.v v2,0(t6)
> + vl1re32.v v2,0(s0)
> + srli t6,a7,1
> + vsetvli zero,t5,e32,m1,ta,ma
> + addi t5,a1,16
> + vse32.v v2,0(a1)
> + vsetvli zero,t6,e32,m1,ta,ma
> + srli t6,a6,1
> + vse32.v v2,0(t5)
> + addi t5,a1,32
> + vsetvli zero,t6,e32,m1,ta,ma
> + srli t6,a3,1
> + vse32.v v2,0(t5)
> + addi t5,a1,48
> + vsetvli zero,t6,e32,m1,ta,ma
> + vse32.v v2,0(t5)
> + srli t5,a4,2
> + vsetvli zero,t5,e64,m1,ta,ma
> + addi t6,a2,16
> + vse64.v v1,0(a2)
> + srli a7,a7,2
> + vsetvli zero,a7,e64,m1,ta,ma
> + addi t5,a2,32
> + vse64.v v1,0(t6)
> + srli a6,a6,2
> + addi a7,a2,48
> + vsetvli zero,a6,e64,m1,ta,ma
> + srli a3,a3,2
> + vse64.v v1,0(t5)
> + sub a5,a5,a4
> + vsetvli zero,a3,e64,m1,ta,ma
> + vse64.v v1,0(a7)
> + sub t1,t1,a4
> + sub t4,t4,a4
> + sub t3,t3,a4
> + addi a0,a0,64
> + addi a1,a1,64
> + addi a2,a2,64
> + bne a5,zero,.L38
> + lw s0,60(sp)
> + addi sp,sp,64
> + jr ra
> +.L47:
> + li t1,8
> + j .L37
> +.L46:
> + li t4,16
> + li a4,8
> + addi t4,t4,-16
> + mv t1,a5
> + bgeu a5,a4,.L37
> + j .L47
> +.L45:
> + li t3,24
> + li a4,16
> + addi t3,t3,-24
> + mv t4,a5
> + bgeu a5,a4,.L36
> + j .L46
> + .size test_1_TYPE1_int32_t, .-test_1_TYPE1_int32_t
> + .align 1
> + .globl test_1_TYPE1_uint32_t
> + .type test_1_TYPE1_uint32_t, @function
> +test_1_TYPE1_uint32_t:
> + addi sp,sp,-48
> + lw t1,64(sp)
> + lw t5,48(sp)
> + lw t3,56(sp)
> + lw t4,60(sp)
> + ble t1,zero,.L48
> + addi t0,t1,-1
> + li t6,6
> + bleu t0,t6,.L50
> + or t6,a2,a1
> + or t6,a0,t6
> + andi t6,t6,15
> + beq t6,zero,.L60
> +.L50:
> + slli t1,t1,3
> + add t1,a0,t1
> +.L56:
> + sh a3,0(a0)
> + sh a4,2(a0)
> + sh a5,4(a0)
> + sh a6,6(a0)
> + sw a7,0(a1)
> + sw t5,4(a1)
> + sw t3,0(a2)
> + sw t4,4(a2)
> + addi a0,a0,8
> + addi a1,a1,8
> + addi a2,a2,8
> + bne a0,t1,.L56
> +.L48:
> + addi sp,sp,48
> + jr ra
> +.L60:
> + li t0,65536
> + addi t0,t0,-1
> + vsetvli t6,zero,e16,m1,ta,ma
> + slli a4,a4,16
> + and t2,a3,t0
> + addi t6,sp,8
> + or t2,t2,a4
> + vmv.v.i v1,0
> + vs1r.v v1,0(t6)
> + sw t2,8(sp)
> + lw t2,12(sp)
> + li t6,-65536
> + slli a6,a6,16
> + and t2,t6,t2
> + or t2,t2,a5
> + and t2,t2,t0
> + or t2,t2,a6
> + sw t2,12(sp)
> + lw t2,16(sp)
> + sw t3,40(sp)
> + sw a7,24(sp)
> + and t2,t6,t2
> + or a3,t2,a3
> + and a3,a3,t0
> + or a4,a3,a4
> + sw a4,16(sp)
> + lw a4,20(sp)
> + sw t5,28(sp)
> + sw a7,32(sp)
> + and t6,t6,a4
> + or t6,t6,a5
> + and t6,t6,t0
> + or a5,t6,a6
> + sw a5,20(sp)
> + sw t4,44(sp)
> + slli a4,t1,2
> + sw t5,36(sp)
> + addi a6,sp,40
> + li a3,24
> + vsetvli a5,zero,e64,m1,ta,ma
> + mv t3,a4
> + vlse64.v v1,0(a6),zero
> + bltu a4,a3,.L61
> + li a5,16
> + addi t3,t3,-24
> + mv t4,a4
> + bltu a4,a5,.L62
> +.L52:
> + li a5,8
> + addi t4,t4,-16
> + mv t1,a4
> + bltu a4,a5,.L63
> +.L53:
> + addi t1,t1,-8
> +.L54:
> + addi a3,sp,8
> + vsetvli a5,a4,e8,m2,tu,mu
> + vl1re16.v v2,0(a3)
> + addi a6,a0,16
> + vsetvli zero,a5,e16,m1,ta,ma
> + vse16.v v2,0(a0)
> + addi a3,a0,32
> + vsetvli a7,t1,e8,m2,tu,mu
> + vsetvli zero,a7,e16,m1,ta,ma
> + vse16.v v2,0(a6)
> + addi t6,a0,48
> + vsetvli a6,t4,e8,m2,tu,mu
> + vsetvli zero,a6,e16,m1,ta,ma
> + vse16.v v2,0(a3)
> + srli t5,a5,1
> + vsetvli a3,t3,e8,m2,tu,mu
> + vsetvli zero,a3,e16,m1,ta,ma
> + vse16.v v2,0(t6)
> + addi t6,sp,24
> + vl1re32.v v2,0(t6)
> + vsetvli zero,t5,e32,m1,ta,ma
> + srli t6,a7,1
> + vse32.v v2,0(a1)
> + addi t5,a1,16
> + vsetvli zero,t6,e32,m1,ta,ma
> + srli t6,a6,1
> + vse32.v v2,0(t5)
> + addi t5,a1,32
> + vsetvli zero,t6,e32,m1,ta,ma
> + srli t6,a3,1
> + vse32.v v2,0(t5)
> + addi t5,a1,48
> + vsetvli zero,t6,e32,m1,ta,ma
> + vse32.v v2,0(t5)
> + srli t5,a5,2
> + vsetvli zero,t5,e64,m1,ta,ma
> + addi t6,a2,16
> + vse64.v v1,0(a2)
> + srli a7,a7,2
> + vsetvli zero,a7,e64,m1,ta,ma
> + addi t5,a2,32
> + vse64.v v1,0(t6)
> + srli a6,a6,2
> + addi a7,a2,48
> + vsetvli zero,a6,e64,m1,ta,ma
> + srli a3,a3,2
> + vse64.v v1,0(t5)
> + sub a4,a4,a5
> + vsetvli zero,a3,e64,m1,ta,ma
> + vse64.v v1,0(a7)
> + sub t1,t1,a5
> + sub t4,t4,a5
> + sub t3,t3,a5
> + addi a0,a0,64
> + addi a1,a1,64
> + addi a2,a2,64
> + bne a4,zero,.L54
> + addi sp,sp,48
> + jr ra
> +.L63:
> + li t1,8
> + j .L53
> +.L62:
> + li t4,16
> + li a5,8
> + addi t4,t4,-16
> + mv t1,a4
> + bgeu a4,a5,.L53
> + j .L63
> +.L61:
> + li t3,24
> + li a5,16
> + addi t3,t3,-24
> + mv t4,a4
> + bgeu a4,a5,.L52
> + j .L62
> + .size test_1_TYPE1_uint32_t, .-test_1_TYPE1_uint32_t
> + .ident "GCC: (GNU) 13.0.1 20230324 (experimental)"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c
> new file mode 100644
> index 00000000000..d3e187eae68
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-1.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run { target { riscv_vector } } } */
> +/* { dg-additional-options "--param riscv-autovec-preference=fixed-vlmax" } */
> +
> +#include "multiple_rgroup-1.c"
> +
> +int main (void)
> +{
> + TEST_ALL (run_1)
> + TEST_ALL (run_2)
> + TEST_ALL (run_3)
> + TEST_ALL (run_4)
> + TEST_ALL (run_5)
> + TEST_ALL (run_6)
> + TEST_ALL (run_7)
> + TEST_ALL (run_8)
> + TEST_ALL (run_9)
> + TEST_ALL (run_10)
> + return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c
> new file mode 100644
> index 00000000000..5166c9e35a0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/multiple_rgroup_run-2.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run { target { riscv_vector } } } */
> +/* { dg-additional-options "--param riscv-autovec-preference=fixed-vlmax" } */
> +
> +#include "multiple_rgroup-2.c"
> +
> +int main (void)
> +{
> + TEST_ALL (run_1)
> + TEST_ALL (run_2)
> + TEST_ALL (run_3)
> + TEST_ALL (run_4)
> + TEST_ALL (run_5)
> + TEST_ALL (run_6)
> + TEST_ALL (run_7)
> + TEST_ALL (run_8)
> + TEST_ALL (run_9)
> + TEST_ALL (run_10)
> + return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c
> new file mode 100644
> index 00000000000..6384888dd03
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.c
> @@ -0,0 +1,8 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=scalable -fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */
> +
> +#include "single_rgroup-1.h"
> +
> +TEST_ALL (test_1)
> +
> +/* { dg-final { scan-assembler-times {vsetvli} 10 } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h
> new file mode 100644
> index 00000000000..be6b4c641cb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup-1.h
> @@ -0,0 +1,106 @@
> +#include <stddef.h>
> +#include <stdint.h>
> +
> +#define N 777
> +
> +#define test_1(TYPE) \
> + TYPE a_##TYPE[N]; \
> + TYPE b_##TYPE[N]; \
> + void __attribute__ ((noinline, noclone)) test_1_##TYPE (unsigned int n) \
> + { \
> + unsigned int i = 0; \
> + for (i = 0; i < n; i++) \
> + b_##TYPE[i] = a_##TYPE[i]; \
> + }
> +
> +#define run_1(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 33 + 1 + 109; \
> + test_1_##TYPE (5); \
> + for (unsigned int i = 0; i < 5; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_2(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 57 + 1 + 999; \
> + test_1_##TYPE (17); \
> + for (unsigned int i = 0; i < 17; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_3(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 77 + 1 + 3; \
> + test_1_##TYPE (32); \
> + for (unsigned int i = 0; i < 32; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_4(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 45 + 1 + 11; \
> + test_1_##TYPE (128); \
> + for (unsigned int i = 0; i < 128; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_5(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 199 + 1 + 79; \
> + test_1_##TYPE (177); \
> + for (unsigned int i = 0; i < 177; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_6(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 377 + 1 + 73; \
> + test_1_##TYPE (255); \
> + for (unsigned int i = 0; i < 255; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_7(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 98 + 1 + 66; \
> + test_1_##TYPE (333); \
> + for (unsigned int i = 0; i < 333; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_8(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 7 + 1 * 7; \
> + test_1_##TYPE (512); \
> + for (unsigned int i = 0; i < 512; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_9(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 + 1 + 88; \
> + test_1_##TYPE (637); \
> + for (unsigned int i = 0; i < 637; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define run_10(TYPE) \
> + for (unsigned int i = 0; i < N; i++) \
> + a_##TYPE[i] = i * 2 * 331 + 1 + 547; \
> + test_1_##TYPE (777); \
> + for (unsigned int i = 0; i < 777; i++) \
> + if (b_##TYPE[i] != a_##TYPE[i]) \
> + __builtin_abort ();
> +
> +#define TEST_ALL(T) \
> + T (int8_t) \
> + T (uint8_t) \
> + T (int16_t) \
> + T (uint16_t) \
> + T (int32_t) \
> + T (uint32_t) \
> + T (int64_t) \
> + T (uint64_t) \
> + T (float) \
> + T (double)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c
> new file mode 100644
> index 00000000000..4af2f18de8a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/single_rgroup_run-1.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run { target { riscv_vector } } } */
> +/* { dg-additional-options "-fno-vect-cost-model -fno-tree-loop-distribute-patterns --param riscv-autovec-preference=scalable" } */
> +
> +#include "single_rgroup-1.c"
> +
> +int main (void)
> +{
> + TEST_ALL (run_1)
> + TEST_ALL (run_2)
> + TEST_ALL (run_3)
> + TEST_ALL (run_4)
> + TEST_ALL (run_5)
> + TEST_ALL (run_6)
> + TEST_ALL (run_7)
> + TEST_ALL (run_8)
> + TEST_ALL (run_9)
> + TEST_ALL (run_10)
> + return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/template-1.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/template-1.h
> new file mode 100644
> index 00000000000..799e2d7d754
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/template-1.h
> @@ -0,0 +1,68 @@
> +#include <stddef.h>
> +#include <stdint.h>
> +
> +void
> +foo0 (int8_t *__restrict f, int16_t *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> +
> +void
> +foo1 (int16_t *__restrict f, int32_t *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> +
> +void
> +foo2 (int32_t *__restrict f, int64_t *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> +
> +void
> +foo3 (int16_t *__restrict f, float *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> +
> +void
> +foo4 (int32_t *__restrict f, float *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> +
> +void
> +foo5 (float *__restrict f, double *__restrict d, int n)
> +{
> + for (int i = 0; i < n; ++i)
> + {
> + f[i * 2 + 0] = 1;
> + f[i * 2 + 1] = 2;
> + d[i] = 3;
> + }
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c
> new file mode 100644
> index 00000000000..7ff84f60749
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-2.c
> new file mode 100644
> index 00000000000..dc22eefbd36
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/v-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 5 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c
> new file mode 100644
> index 00000000000..36f6d98a5cb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c
> new file mode 100644
> index 00000000000..794f28e73bd
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c
> new file mode 100644
> index 00000000000..d5e36190b31
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c
> new file mode 100644
> index 00000000000..d154df4c4ba
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-1.c
> new file mode 100644
> index 00000000000..68e7696ed65
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-2.c
> new file mode 100644
> index 00000000000..f8860a36332
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c
> new file mode 100644
> index 00000000000..3a6a3aa1261
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-1.c
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c
> new file mode 100644
> index 00000000000..d1aaf3f4297
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve32x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 2 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-1.c
> new file mode 100644
> index 00000000000..0d03536389f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-2.c
> new file mode 100644
> index 00000000000..ca423285011
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-2.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c
> new file mode 100644
> index 00000000000..4c6c7e2fb3b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64d_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c
> new file mode 100644
> index 00000000000..b8253476973
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d_zvl128b-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64d_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 5 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-1.c
> new file mode 100644
> index 00000000000..e7900b82215
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-2.c
> new file mode 100644
> index 00000000000..1c0e8c2785b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-2.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c
> new file mode 100644
> index 00000000000..daf4a4e8e64
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c
> new file mode 100644
> index 00000000000..3866e45546c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f_zvl128b-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-1.c
> new file mode 100644
> index 00000000000..4c190c303c1
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-2.c
> new file mode 100644
> index 00000000000..66bb1f44170
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-2.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c
> new file mode 100644
> index 00000000000..6920a395d1c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-1.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c
> new file mode 100644
> index 00000000000..d8b60babf9a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x_zvl128b-2.c
> @@ -0,0 +1,6 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv32gc_zve64x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
> +
> +#include "template-1.h"
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 3 "vect" } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp b/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
> index 7a9a2b6ac48..5893dbf9742 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
> @@ -44,6 +44,22 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/base/*.\[cS\]]] \
> "" $CFLAGS
> gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vsetvl/*.\[cS\]]] \
> "" $CFLAGS
> +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/*.\[cS\]]] \
> + "" $CFLAGS
> +
> +set AUTOVEC_TEST_OPTS [list \
> + {-ftree-vectorize -O3 --param riscv-autovec-lmul=m1} \
> + {-ftree-vectorize -O3 --param riscv-autovec-lmul=m2} \
> + {-ftree-vectorize -O3 --param riscv-autovec-lmul=m4} \
> + {-ftree-vectorize -O3 --param riscv-autovec-lmul=m8} \
> + {-ftree-vectorize -O2 --param riscv-autovec-lmul=m1} \
> + {-ftree-vectorize -O2 --param riscv-autovec-lmul=m2} \
> + {-ftree-vectorize -O2 --param riscv-autovec-lmul=m4} \
> + {-ftree-vectorize -O2 --param riscv-autovec-lmul=m8} ]
> +foreach op $AUTOVEC_TEST_OPTS {
> + gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/partial/*.\[cS\]]] \
> + "" "$op"
> +}
>
> # All done.
> dg-finish
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-17.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-17.c
> index ee58f9bbdfc..8a1bbb40fc8 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-17.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-17.c
> @@ -11,4 +11,4 @@ void foo(int32_t *in1, int32_t *in2, int32_t *in3, int32_t *out, size_t n, int c
> __riscv_vse32_v_i32m1(out, c, __riscv_vsetvl_e8mf2 (vl));
> }
>
> -/* { dg-final { scan-assembler-times {vsetvli} 8 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
> \ No newline at end of file
> +/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
> --
> 2.36.3
>
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax" } */
+
+#include "multiple_rgroup-1.h"
+
+TEST_ALL (test_1)
new file mode 100644
@@ -0,0 +1,304 @@
+#include <stddef.h>
+#include <stdint.h>
+
+#define test_1(TYPE1, TYPE2) \
+ void __attribute__ ((noinline, noclone)) \
+ test_1_##TYPE1_##TYPE2 (TYPE1 *__restrict f, TYPE2 *__restrict d, TYPE1 x, \
+ TYPE1 x2, TYPE2 y, int n) \
+ { \
+ for (int i = 0; i < n; ++i) \
+ { \
+ f[i * 2 + 0] = x; \
+ f[i * 2 + 1] = x2; \
+ d[i] = y; \
+ } \
+ }
+
+#define run_1(TYPE1, TYPE2) \
+ int n_1_##TYPE1_##TYPE2 = 1; \
+ TYPE1 x_1_##TYPE1 = 117; \
+ TYPE1 x2_1_##TYPE1 = 232; \
+ TYPE2 y_1_##TYPE2 = 9762; \
+ TYPE1 f_1_##TYPE1[2 * 2 + 1] = {0}; \
+ TYPE2 d_1_##TYPE2[2] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_1_##TYPE1, d_1_##TYPE2, x_1_##TYPE1, x2_1_##TYPE1, \
+ y_1_##TYPE2, n_1_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_1_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_1_##TYPE1[i * 2 + 0] != x_1_##TYPE1) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 2 + 1] != x2_1_##TYPE1) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i] != y_1_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_1_##TYPE1_##TYPE2; i < n_1_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_1_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_2(TYPE1, TYPE2) \
+ int n_2_##TYPE1_##TYPE2 = 17; \
+ TYPE1 x_2_##TYPE1 = 133; \
+ TYPE1 x2_2_##TYPE1 = 94; \
+ TYPE2 y_2_##TYPE2 = 8672; \
+ TYPE1 f_2_##TYPE1[18 * 2 + 1] = {0}; \
+ TYPE2 d_2_##TYPE2[18] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_2_##TYPE1, d_2_##TYPE2, x_2_##TYPE1, x2_2_##TYPE1, \
+ y_2_##TYPE2, n_2_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_2_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_2_##TYPE1[i * 2 + 0] != x_2_##TYPE1) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 2 + 1] != x2_2_##TYPE1) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i] != y_2_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_2_##TYPE1_##TYPE2; i < n_2_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_2_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_3(TYPE1, TYPE2) \
+ int n_3_##TYPE1_##TYPE2 = 32; \
+ TYPE1 x_3_##TYPE1 = 233; \
+ TYPE1 x2_3_##TYPE1 = 78; \
+ TYPE2 y_3_##TYPE2 = 1234; \
+ TYPE1 f_3_##TYPE1[33 * 2 + 1] = {0}; \
+ TYPE2 d_3_##TYPE2[33] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_3_##TYPE1, d_3_##TYPE2, x_3_##TYPE1, x2_3_##TYPE1, \
+ y_3_##TYPE2, n_3_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_3_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_3_##TYPE1[i * 2 + 0] != x_3_##TYPE1) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 2 + 1] != x2_3_##TYPE1) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i] != y_3_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_3_##TYPE1_##TYPE2; i < n_3_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_3_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_4(TYPE1, TYPE2) \
+ int n_4_##TYPE1_##TYPE2 = 128; \
+ TYPE1 x_4_##TYPE1 = 222; \
+ TYPE1 x2_4_##TYPE1 = 59; \
+ TYPE2 y_4_##TYPE2 = 4321; \
+ TYPE1 f_4_##TYPE1[129 * 2 + 1] = {0}; \
+ TYPE2 d_4_##TYPE2[129] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_4_##TYPE1, d_4_##TYPE2, x_4_##TYPE1, x2_4_##TYPE1, \
+ y_4_##TYPE2, n_4_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_4_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_4_##TYPE1[i * 2 + 0] != x_4_##TYPE1) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 2 + 1] != x2_4_##TYPE1) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i] != y_4_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_4_##TYPE1_##TYPE2; i < n_4_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_4_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_5(TYPE1, TYPE2) \
+ int n_5_##TYPE1_##TYPE2 = 177; \
+ TYPE1 x_5_##TYPE1 = 111; \
+ TYPE1 x2_5_##TYPE1 = 189; \
+ TYPE2 y_5_##TYPE2 = 5555; \
+ TYPE1 f_5_##TYPE1[178 * 2 + 1] = {0}; \
+ TYPE2 d_5_##TYPE2[178] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_5_##TYPE1, d_5_##TYPE2, x_5_##TYPE1, x2_5_##TYPE1, \
+ y_5_##TYPE2, n_5_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_5_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_5_##TYPE1[i * 2 + 0] != x_5_##TYPE1) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 2 + 1] != x2_5_##TYPE1) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i] != y_5_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_5_##TYPE1_##TYPE2; i < n_5_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_5_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_6(TYPE1, TYPE2) \
+ int n_6_##TYPE1_##TYPE2 = 255; \
+ TYPE1 x_6_##TYPE1 = 123; \
+ TYPE1 x2_6_##TYPE1 = 132; \
+ TYPE2 y_6_##TYPE2 = 6655; \
+ TYPE1 f_6_##TYPE1[256 * 2 + 1] = {0}; \
+ TYPE2 d_6_##TYPE2[256] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_6_##TYPE1, d_6_##TYPE2, x_6_##TYPE1, x2_6_##TYPE1, \
+ y_6_##TYPE2, n_6_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_6_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_6_##TYPE1[i * 2 + 0] != x_6_##TYPE1) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 2 + 1] != x2_6_##TYPE1) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i] != y_6_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_6_##TYPE1_##TYPE2; i < n_6_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_6_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_7(TYPE1, TYPE2) \
+ int n_7_##TYPE1_##TYPE2 = 333; \
+ TYPE1 x_7_##TYPE1 = 39; \
+ TYPE1 x2_7_##TYPE1 = 59; \
+ TYPE2 y_7_##TYPE2 = 5968; \
+ TYPE1 f_7_##TYPE1[334 * 2 + 1] = {0}; \
+ TYPE2 d_7_##TYPE2[334] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_7_##TYPE1, d_7_##TYPE2, x_7_##TYPE1, x2_7_##TYPE1, \
+ y_7_##TYPE2, n_7_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_7_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_7_##TYPE1[i * 2 + 0] != x_7_##TYPE1) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 2 + 1] != x2_7_##TYPE1) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i] != y_7_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_7_##TYPE1_##TYPE2; i < n_7_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_7_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_8(TYPE1, TYPE2) \
+ int n_8_##TYPE1_##TYPE2 = 512; \
+ TYPE1 x_8_##TYPE1 = 71; \
+ TYPE1 x2_8_##TYPE1 = 255; \
+ TYPE2 y_8_##TYPE2 = 3366; \
+ TYPE1 f_8_##TYPE1[513 * 2 + 1] = {0}; \
+ TYPE2 d_8_##TYPE2[513] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_8_##TYPE1, d_8_##TYPE2, x_8_##TYPE1, x2_8_##TYPE1, \
+ y_8_##TYPE2, n_8_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_8_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_8_##TYPE1[i * 2 + 0] != x_8_##TYPE1) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 2 + 1] != x2_8_##TYPE1) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i] != y_8_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_8_##TYPE1_##TYPE2; i < n_8_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_8_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_9(TYPE1, TYPE2) \
+ int n_9_##TYPE1_##TYPE2 = 637; \
+ TYPE1 x_9_##TYPE1 = 157; \
+ TYPE1 x2_9_##TYPE1 = 89; \
+ TYPE2 y_9_##TYPE2 = 5511; \
+ TYPE1 f_9_##TYPE1[638 * 2 + 1] = {0}; \
+ TYPE2 d_9_##TYPE2[638] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_9_##TYPE1, d_9_##TYPE2, x_9_##TYPE1, x2_9_##TYPE1, \
+ y_9_##TYPE2, n_9_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_9_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_9_##TYPE1[i * 2 + 0] != x_9_##TYPE1) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 2 + 1] != x2_9_##TYPE1) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i] != y_9_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_9_##TYPE1_##TYPE2; i < n_9_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_9_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_10(TYPE1, TYPE2) \
+ int n_10_##TYPE1_##TYPE2 = 777; \
+ TYPE1 x_10_##TYPE1 = 203; \
+ TYPE1 x2_10_##TYPE1 = 200; \
+ TYPE2 y_10_##TYPE2 = 2023; \
+ TYPE1 f_10_##TYPE1[778 * 2 + 1] = {0}; \
+ TYPE2 d_10_##TYPE2[778] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_10_##TYPE1, d_10_##TYPE2, x_10_##TYPE1, \
+ x2_10_##TYPE1, y_10_##TYPE2, n_10_##TYPE1_##TYPE2); \
+ for (int i = 0; i < n_10_##TYPE1_##TYPE2; ++i) \
+ { \
+ if (f_10_##TYPE1[i * 2 + 0] != x_10_##TYPE1) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 2 + 1] != x2_10_##TYPE1) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i] != y_10_##TYPE2) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_10_##TYPE1_##TYPE2; i < n_10_##TYPE1_##TYPE2 + 1; ++i) \
+ { \
+ if (f_10_##TYPE1[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define TEST_ALL(T) \
+ T (int8_t, int16_t) \
+ T (uint8_t, uint16_t) \
+ T (int16_t, int32_t) \
+ T (uint16_t, uint32_t) \
+ T (int32_t, int64_t) \
+ T (uint32_t, uint64_t) \
+ T (float, double)
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax" } */
+
+#include "multiple_rgroup-2.h"
+
+TEST_ALL (test_1)
new file mode 100644
@@ -0,0 +1,546 @@
+#include <stddef.h>
+#include <stdint.h>
+
+#define test_1(TYPE1, TYPE2, TYPE3) \
+ void __attribute__ ((noinline, noclone)) \
+ test_1_##TYPE1_##TYPE2 (TYPE1 *__restrict f, TYPE2 *__restrict d, \
+ TYPE3 *__restrict e, TYPE1 x, TYPE1 x2, TYPE1 x3, \
+ TYPE1 x4, TYPE2 y, TYPE2 y2, TYPE3 z, int n) \
+ { \
+ for (int i = 0; i < n; ++i) \
+ { \
+ f[i * 4 + 0] = x; \
+ f[i * 4 + 1] = x2; \
+ f[i * 4 + 2] = x3; \
+ f[i * 4 + 3] = x4; \
+ d[i * 2 + 0] = y; \
+ d[i * 2 + 1] = y2; \
+ e[i] = z; \
+ } \
+ }
+
+#define run_1(TYPE1, TYPE2, TYPE3) \
+ int n_1_##TYPE1_##TYPE2_##TYPE3 = 1; \
+ TYPE1 x_1_##TYPE1 = 117; \
+ TYPE1 x2_1_##TYPE1 = 232; \
+ TYPE1 x3_1_##TYPE1 = 127; \
+ TYPE1 x4_1_##TYPE1 = 11; \
+ TYPE2 y_1_##TYPE2 = 9762; \
+ TYPE2 y2_1_##TYPE2 = 6279; \
+ TYPE3 z_1_##TYPE3 = 5891663; \
+ TYPE1 f_1_##TYPE1[2 * 4 + 1] = {0}; \
+ TYPE2 d_1_##TYPE2[2 * 2 + 1] = {0}; \
+ TYPE3 e_1_##TYPE3[2] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_1_##TYPE1, d_1_##TYPE2, e_1_##TYPE3, x_1_##TYPE1, \
+ x2_1_##TYPE1, x3_1_##TYPE1, x4_1_##TYPE1, \
+ y_1_##TYPE2, y2_1_##TYPE2, z_1_##TYPE3, \
+ n_1_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_1_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_1_##TYPE1[i * 4 + 0] != x_1_##TYPE1) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 1] != x2_1_##TYPE1) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 2] != x3_1_##TYPE1) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 3] != x4_1_##TYPE1) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i * 2 + 0] != y_1_##TYPE2) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i * 2 + 1] != y2_1_##TYPE2) \
+ __builtin_abort (); \
+ if (e_1_##TYPE3[i] != z_1_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_1_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_1_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_1_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_1_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_1_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_1_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_2(TYPE1, TYPE2, TYPE3) \
+ int n_2_##TYPE1_##TYPE2_##TYPE3 = 17; \
+ TYPE1 x_2_##TYPE1 = 107; \
+ TYPE1 x2_2_##TYPE1 = 202; \
+ TYPE1 x3_2_##TYPE1 = 17; \
+ TYPE1 x4_2_##TYPE1 = 53; \
+ TYPE2 y_2_##TYPE2 = 5566; \
+ TYPE2 y2_2_##TYPE2 = 7926; \
+ TYPE3 z_2_##TYPE3 = 781545971; \
+ TYPE1 f_2_##TYPE1[18 * 4 + 1] = {0}; \
+ TYPE2 d_2_##TYPE2[18 * 2 + 1] = {0}; \
+ TYPE3 e_2_##TYPE3[18] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_2_##TYPE1, d_2_##TYPE2, e_2_##TYPE3, x_2_##TYPE1, \
+ x2_2_##TYPE1, x3_2_##TYPE1, x4_2_##TYPE1, \
+ y_2_##TYPE2, y2_2_##TYPE2, z_2_##TYPE3, \
+ n_2_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_2_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_2_##TYPE1[i * 4 + 0] != x_2_##TYPE1) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 1] != x2_2_##TYPE1) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 2] != x3_2_##TYPE1) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 3] != x4_2_##TYPE1) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i * 2 + 0] != y_2_##TYPE2) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i * 2 + 1] != y2_2_##TYPE2) \
+ __builtin_abort (); \
+ if (e_2_##TYPE3[i] != z_2_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_2_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_2_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_2_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_2_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_2_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_2_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_3(TYPE1, TYPE2, TYPE3) \
+ int n_3_##TYPE1_##TYPE2_##TYPE3 = 32; \
+ TYPE1 x_3_##TYPE1 = 109; \
+ TYPE1 x2_3_##TYPE1 = 239; \
+ TYPE1 x3_3_##TYPE1 = 151; \
+ TYPE1 x4_3_##TYPE1 = 3; \
+ TYPE2 y_3_##TYPE2 = 1234; \
+ TYPE2 y2_3_##TYPE2 = 4321; \
+ TYPE3 z_3_##TYPE3 = 145615615; \
+ TYPE1 f_3_##TYPE1[33 * 4 + 1] = {0}; \
+ TYPE2 d_3_##TYPE2[33 * 2 + 1] = {0}; \
+ TYPE3 e_3_##TYPE3[33] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_3_##TYPE1, d_3_##TYPE2, e_3_##TYPE3, x_3_##TYPE1, \
+ x2_3_##TYPE1, x3_3_##TYPE1, x4_3_##TYPE1, \
+ y_3_##TYPE2, y2_3_##TYPE2, z_3_##TYPE3, \
+ n_3_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_3_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_3_##TYPE1[i * 4 + 0] != x_3_##TYPE1) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 1] != x2_3_##TYPE1) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 2] != x3_3_##TYPE1) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 3] != x4_3_##TYPE1) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i * 2 + 0] != y_3_##TYPE2) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i * 2 + 1] != y2_3_##TYPE2) \
+ __builtin_abort (); \
+ if (e_3_##TYPE3[i] != z_3_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_3_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_3_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_3_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_3_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_3_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_3_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_4(TYPE1, TYPE2, TYPE3) \
+ int n_4_##TYPE1_##TYPE2_##TYPE3 = 128; \
+ TYPE1 x_4_##TYPE1 = 239; \
+ TYPE1 x2_4_##TYPE1 = 132; \
+ TYPE1 x3_4_##TYPE1 = 39; \
+ TYPE1 x4_4_##TYPE1 = 48; \
+ TYPE2 y_4_##TYPE2 = 1036; \
+ TYPE2 y2_4_##TYPE2 = 3665; \
+ TYPE3 z_4_##TYPE3 = 5145656; \
+ TYPE1 f_4_##TYPE1[129 * 4 + 1] = {0}; \
+ TYPE2 d_4_##TYPE2[129 * 2 + 1] = {0}; \
+ TYPE3 e_4_##TYPE3[129] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_4_##TYPE1, d_4_##TYPE2, e_4_##TYPE3, x_4_##TYPE1, \
+ x2_4_##TYPE1, x3_4_##TYPE1, x4_4_##TYPE1, \
+ y_4_##TYPE2, y2_4_##TYPE2, z_4_##TYPE3, \
+ n_4_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_4_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_4_##TYPE1[i * 4 + 0] != x_4_##TYPE1) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 1] != x2_4_##TYPE1) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 2] != x3_4_##TYPE1) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 3] != x4_4_##TYPE1) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i * 2 + 0] != y_4_##TYPE2) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i * 2 + 1] != y2_4_##TYPE2) \
+ __builtin_abort (); \
+ if (e_4_##TYPE3[i] != z_4_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_4_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_4_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_4_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_4_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_4_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_4_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_5(TYPE1, TYPE2, TYPE3) \
+ int n_5_##TYPE1_##TYPE2_##TYPE3 = 177; \
+ TYPE1 x_5_##TYPE1 = 239; \
+ TYPE1 x2_5_##TYPE1 = 132; \
+ TYPE1 x3_5_##TYPE1 = 39; \
+ TYPE1 x4_5_##TYPE1 = 48; \
+ TYPE2 y_5_##TYPE2 = 1036; \
+ TYPE2 y2_5_##TYPE2 = 3665; \
+ TYPE3 z_5_##TYPE3 = 5145656; \
+ TYPE1 f_5_##TYPE1[178 * 4 + 1] = {0}; \
+ TYPE2 d_5_##TYPE2[178 * 2 + 1] = {0}; \
+ TYPE3 e_5_##TYPE3[178] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_5_##TYPE1, d_5_##TYPE2, e_5_##TYPE3, x_5_##TYPE1, \
+ x2_5_##TYPE1, x3_5_##TYPE1, x4_5_##TYPE1, \
+ y_5_##TYPE2, y2_5_##TYPE2, z_5_##TYPE3, \
+ n_5_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_5_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_5_##TYPE1[i * 4 + 0] != x_5_##TYPE1) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 1] != x2_5_##TYPE1) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 2] != x3_5_##TYPE1) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 3] != x4_5_##TYPE1) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i * 2 + 0] != y_5_##TYPE2) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i * 2 + 1] != y2_5_##TYPE2) \
+ __builtin_abort (); \
+ if (e_5_##TYPE3[i] != z_5_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_5_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_5_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_5_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_5_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_5_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_5_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_6(TYPE1, TYPE2, TYPE3) \
+ int n_6_##TYPE1_##TYPE2_##TYPE3 = 255; \
+ TYPE1 x_6_##TYPE1 = 239; \
+ TYPE1 x2_6_##TYPE1 = 132; \
+ TYPE1 x3_6_##TYPE1 = 39; \
+ TYPE1 x4_6_##TYPE1 = 48; \
+ TYPE2 y_6_##TYPE2 = 1036; \
+ TYPE2 y2_6_##TYPE2 = 3665; \
+ TYPE3 z_6_##TYPE3 = 5145656; \
+ TYPE1 f_6_##TYPE1[256 * 4 + 1] = {0}; \
+ TYPE2 d_6_##TYPE2[256 * 2 + 1] = {0}; \
+ TYPE3 e_6_##TYPE3[256] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_6_##TYPE1, d_6_##TYPE2, e_6_##TYPE3, x_6_##TYPE1, \
+ x2_6_##TYPE1, x3_6_##TYPE1, x4_6_##TYPE1, \
+ y_6_##TYPE2, y2_6_##TYPE2, z_6_##TYPE3, \
+ n_6_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_6_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_6_##TYPE1[i * 4 + 0] != x_6_##TYPE1) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 1] != x2_6_##TYPE1) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 2] != x3_6_##TYPE1) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 3] != x4_6_##TYPE1) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i * 2 + 0] != y_6_##TYPE2) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i * 2 + 1] != y2_6_##TYPE2) \
+ __builtin_abort (); \
+ if (e_6_##TYPE3[i] != z_6_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_6_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_6_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_6_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_6_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_6_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_6_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_7(TYPE1, TYPE2, TYPE3) \
+ int n_7_##TYPE1_##TYPE2_##TYPE3 = 333; \
+ TYPE1 x_7_##TYPE1 = 239; \
+ TYPE1 x2_7_##TYPE1 = 132; \
+ TYPE1 x3_7_##TYPE1 = 39; \
+ TYPE1 x4_7_##TYPE1 = 48; \
+ TYPE2 y_7_##TYPE2 = 1036; \
+ TYPE2 y2_7_##TYPE2 = 3665; \
+ TYPE3 z_7_##TYPE3 = 5145656; \
+ TYPE1 f_7_##TYPE1[334 * 4 + 1] = {0}; \
+ TYPE2 d_7_##TYPE2[334 * 2 + 1] = {0}; \
+ TYPE3 e_7_##TYPE3[334] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_7_##TYPE1, d_7_##TYPE2, e_7_##TYPE3, x_7_##TYPE1, \
+ x2_7_##TYPE1, x3_7_##TYPE1, x4_7_##TYPE1, \
+ y_7_##TYPE2, y2_7_##TYPE2, z_7_##TYPE3, \
+ n_7_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_7_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_7_##TYPE1[i * 4 + 0] != x_7_##TYPE1) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 1] != x2_7_##TYPE1) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 2] != x3_7_##TYPE1) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 3] != x4_7_##TYPE1) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i * 2 + 0] != y_7_##TYPE2) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i * 2 + 1] != y2_7_##TYPE2) \
+ __builtin_abort (); \
+ if (e_7_##TYPE3[i] != z_7_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_7_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_7_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_7_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_7_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_7_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_7_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_8(TYPE1, TYPE2, TYPE3) \
+ int n_8_##TYPE1_##TYPE2_##TYPE3 = 512; \
+ TYPE1 x_8_##TYPE1 = 239; \
+ TYPE1 x2_8_##TYPE1 = 132; \
+ TYPE1 x3_8_##TYPE1 = 39; \
+ TYPE1 x4_8_##TYPE1 = 48; \
+ TYPE2 y_8_##TYPE2 = 1036; \
+ TYPE2 y2_8_##TYPE2 = 3665; \
+ TYPE3 z_8_##TYPE3 = 5145656; \
+ TYPE1 f_8_##TYPE1[513 * 4 + 1] = {0}; \
+ TYPE2 d_8_##TYPE2[513 * 2 + 1] = {0}; \
+ TYPE3 e_8_##TYPE3[513] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_8_##TYPE1, d_8_##TYPE2, e_8_##TYPE3, x_8_##TYPE1, \
+ x2_8_##TYPE1, x3_8_##TYPE1, x4_8_##TYPE1, \
+ y_8_##TYPE2, y2_8_##TYPE2, z_8_##TYPE3, \
+ n_8_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_8_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_8_##TYPE1[i * 4 + 0] != x_8_##TYPE1) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 1] != x2_8_##TYPE1) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 2] != x3_8_##TYPE1) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 3] != x4_8_##TYPE1) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i * 2 + 0] != y_8_##TYPE2) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i * 2 + 1] != y2_8_##TYPE2) \
+ __builtin_abort (); \
+ if (e_8_##TYPE3[i] != z_8_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_8_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_8_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_8_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_8_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_8_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_8_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_9(TYPE1, TYPE2, TYPE3) \
+ int n_9_##TYPE1_##TYPE2_##TYPE3 = 637; \
+ TYPE1 x_9_##TYPE1 = 222; \
+ TYPE1 x2_9_##TYPE1 = 111; \
+ TYPE1 x3_9_##TYPE1 = 11; \
+ TYPE1 x4_9_##TYPE1 = 7; \
+ TYPE2 y_9_##TYPE2 = 2034; \
+ TYPE2 y2_9_##TYPE2 = 6987; \
+ TYPE3 z_9_##TYPE3 = 1564616; \
+ TYPE1 f_9_##TYPE1[638 * 4 + 1] = {0}; \
+ TYPE2 d_9_##TYPE2[638 * 2 + 1] = {0}; \
+ TYPE3 e_9_##TYPE3[638] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_9_##TYPE1, d_9_##TYPE2, e_9_##TYPE3, x_9_##TYPE1, \
+ x2_9_##TYPE1, x3_9_##TYPE1, x4_9_##TYPE1, \
+ y_9_##TYPE2, y2_9_##TYPE2, z_9_##TYPE3, \
+ n_9_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_9_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_9_##TYPE1[i * 4 + 0] != x_9_##TYPE1) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 1] != x2_9_##TYPE1) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 2] != x3_9_##TYPE1) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 3] != x4_9_##TYPE1) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i * 2 + 0] != y_9_##TYPE2) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i * 2 + 1] != y2_9_##TYPE2) \
+ __builtin_abort (); \
+ if (e_9_##TYPE3[i] != z_9_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_9_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_9_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_9_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_9_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_9_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_9_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define run_10(TYPE1, TYPE2, TYPE3) \
+ int n_10_##TYPE1_##TYPE2_##TYPE3 = 777; \
+ TYPE1 x_10_##TYPE1 = 222; \
+ TYPE1 x2_10_##TYPE1 = 111; \
+ TYPE1 x3_10_##TYPE1 = 11; \
+ TYPE1 x4_10_##TYPE1 = 7; \
+ TYPE2 y_10_##TYPE2 = 2034; \
+ TYPE2 y2_10_##TYPE2 = 6987; \
+ TYPE3 z_10_##TYPE3 = 1564616; \
+ TYPE1 f_10_##TYPE1[778 * 4 + 1] = {0}; \
+ TYPE2 d_10_##TYPE2[778 * 2 + 1] = {0}; \
+ TYPE3 e_10_##TYPE3[778] = {0}; \
+ test_1_##TYPE1_##TYPE2 (f_10_##TYPE1, d_10_##TYPE2, e_10_##TYPE3, x_10_##TYPE1, \
+ x2_10_##TYPE1, x3_10_##TYPE1, x4_10_##TYPE1, \
+ y_10_##TYPE2, y2_10_##TYPE2, z_10_##TYPE3, \
+ n_10_##TYPE1_##TYPE2_##TYPE3); \
+ for (int i = 0; i < n_10_##TYPE1_##TYPE2_##TYPE3; ++i) \
+ { \
+ if (f_10_##TYPE1[i * 4 + 0] != x_10_##TYPE1) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 1] != x2_10_##TYPE1) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 2] != x3_10_##TYPE1) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 3] != x4_10_##TYPE1) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i * 2 + 0] != y_10_##TYPE2) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i * 2 + 1] != y2_10_##TYPE2) \
+ __builtin_abort (); \
+ if (e_10_##TYPE3[i] != z_10_##TYPE3) \
+ __builtin_abort (); \
+ } \
+ for (int i = n_10_##TYPE1_##TYPE2_##TYPE3; \
+ i < n_10_##TYPE1_##TYPE2_##TYPE3 + 1; ++i) \
+ { \
+ if (f_10_##TYPE1[i * 4 + 0] != 0) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 1] != 0) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 2] != 0) \
+ __builtin_abort (); \
+ if (f_10_##TYPE1[i * 4 + 3] != 0) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i * 2 + 0] != 0) \
+ __builtin_abort (); \
+ if (d_10_##TYPE2[i * 2 + 1] != 0) \
+ __builtin_abort (); \
+ if (e_10_##TYPE3[i] != 0) \
+ __builtin_abort (); \
+ }
+
+#define TEST_ALL(T) \
+ T (int8_t, int16_t, int32_t) \
+ T (uint8_t, uint16_t, uint32_t) \
+ T (int16_t, int32_t, int64_t) \
+ T (uint16_t, uint32_t, uint64_t)
new file mode 100644
@@ -0,0 +1,774 @@
+ .file "multiple_rgroup-2.c"
+ .option nopic
+ .attribute arch, "rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
+ .attribute unaligned_access, 0
+ .attribute stack_align, 16
+ .text
+ .align 1
+ .globl test_1_TYPE1_int16_t
+ .type test_1_TYPE1_int16_t, @function
+test_1_TYPE1_int16_t:
+ addi sp,sp,-48
+ lw t5,56(sp)
+ lh t3,48(sp)
+ lw t6,52(sp)
+ ble t5,zero,.L1
+ or t1,a2,a1
+ or t1,a0,t1
+ andi t1,t1,15
+ bne t1,zero,.L3
+ andi a4,a4,0xff
+ andi a3,a3,0xff
+ slli a4,a4,8
+ andi a5,a5,0xff
+ slli a5,a5,16
+ or t4,a3,a4
+ vsetvli t1,zero,e8,m1,ta,ma
+ li t2,16777216
+ addi t2,t2,-1
+ or t1,t4,a5
+ slli a6,a6,24
+ and t1,t1,t2
+ vmv.v.i v1,0
+ sw s0,44(sp)
+ vs1r.v v1,0(sp)
+ or s0,t1,a6
+ sw s0,0(sp)
+ lw s0,4(sp)
+ li t4,-65536
+ addi t4,t4,255
+ andi t0,s0,-256
+ or t0,t0,a3
+ and s0,t0,t4
+ li t1,-16711680
+ addi t1,t1,-1
+ or s0,s0,a4
+ and t0,s0,t1
+ or t0,t0,a5
+ and t0,t0,t2
+ or s0,t0,a6
+ sw s0,4(sp)
+ lw s0,8(sp)
+ slli a7,a7,16
+ li t0,65536
+ srli a7,a7,16
+ addi t0,t0,-1
+ sw s1,40(sp)
+ slli s1,t3,16
+ vsetvli t3,zero,e16,m1,ta,ma
+ sw s2,36(sp)
+ sw s3,32(sp)
+ andi s2,s0,-256
+ addi t3,sp,16
+ and s0,a7,t0
+ vmv.v.i v1,0
+ or s0,s0,s1
+ vs1r.v v1,0(t3)
+ sw s0,16(sp)
+ lw s0,20(sp)
+ li t3,-65536
+ or s2,s2,a3
+ and s0,t3,s0
+ and s3,s2,t4
+ or s0,s0,a7
+ or s3,s3,a4
+ and s0,s0,t0
+ and s2,s3,t1
+ or s0,s0,s1
+ or s2,s2,a5
+ sw s0,20(sp)
+ lw s0,12(sp)
+ and s2,s2,t2
+ or s2,s2,a6
+ sw s2,8(sp)
+ andi s2,s0,-256
+ lw s0,24(sp)
+ or s2,s2,a3
+ and t4,s2,t4
+ and s0,t3,s0
+ or a3,s0,a7
+ and a3,a3,t0
+ or t4,t4,a4
+ or a4,a3,s1
+ sw a4,24(sp)
+ lw a4,28(sp)
+ and t1,t4,t1
+ or t1,t1,a5
+ and t3,t3,a4
+ or t3,t3,a7
+ and t1,t1,t2
+ and t3,t3,t0
+ or a4,t1,a6
+ sw a4,12(sp)
+ or a4,t3,s1
+ slli a7,t5,2
+ sw a4,28(sp)
+ li a5,48
+ vsetvli a4,zero,e32,m1,ta,ma
+ mv t3,a7
+ vmv.v.x v1,t6
+ bltu a7,a5,.L14
+ li a5,32
+ addi t3,t3,-48
+ mv t4,a7
+ bltu a7,a5,.L15
+.L5:
+ li a5,16
+ addi t4,t4,-32
+ mv t1,a7
+ bltu a7,a5,.L16
+.L6:
+ addi t1,t1,-16
+.L7:
+ vsetvli a6,a7,e8,m4,tu,mu
+ vl1re8.v v2,0(sp)
+ addi a4,a0,16
+ vsetvli zero,a6,e8,m1,ta,ma
+ vse8.v v2,0(a0)
+ addi a5,a0,32
+ vsetvli a3,t1,e8,m4,tu,mu
+ vsetvli zero,a3,e8,m1,ta,ma
+ vse8.v v2,0(a4)
+ addi t6,a0,48
+ vsetvli a4,t4,e8,m4,tu,mu
+ vsetvli zero,a4,e8,m1,ta,ma
+ vse8.v v2,0(a5)
+ srli t5,a6,1
+ vsetvli a5,t3,e8,m4,tu,mu
+ addi s0,sp,16
+ vsetvli zero,a5,e8,m1,ta,ma
+ vse8.v v2,0(t6)
+ vl1re16.v v2,0(s0)
+ srli t6,a3,1
+ vsetvli zero,t5,e16,m1,ta,ma
+ addi t5,a1,16
+ vse16.v v2,0(a1)
+ vsetvli zero,t6,e16,m1,ta,ma
+ srli t6,a4,1
+ vse16.v v2,0(t5)
+ addi t5,a1,32
+ vsetvli zero,t6,e16,m1,ta,ma
+ srli t6,a5,1
+ vse16.v v2,0(t5)
+ addi t5,a1,48
+ vsetvli zero,t6,e16,m1,ta,ma
+ vse16.v v2,0(t5)
+ srli t5,a6,2
+ vsetvli zero,t5,e32,m1,ta,ma
+ addi t6,a2,16
+ vse32.v v1,0(a2)
+ srli a3,a3,2
+ vsetvli zero,a3,e32,m1,ta,ma
+ addi t5,a2,32
+ vse32.v v1,0(t6)
+ srli a4,a4,2
+ addi a3,a2,48
+ vsetvli zero,a4,e32,m1,ta,ma
+ srli a5,a5,2
+ vse32.v v1,0(t5)
+ sub a7,a7,a6
+ vsetvli zero,a5,e32,m1,ta,ma
+ vse32.v v1,0(a3)
+ sub t1,t1,a6
+ sub t4,t4,a6
+ sub t3,t3,a6
+ addi a0,a0,64
+ addi a1,a1,64
+ addi a2,a2,64
+ bne a7,zero,.L7
+ lw s0,44(sp)
+ lw s1,40(sp)
+ lw s2,36(sp)
+ lw s3,32(sp)
+.L1:
+ addi sp,sp,48
+ jr ra
+.L16:
+ li t1,16
+ j .L6
+.L15:
+ li t4,32
+ li a5,16
+ addi t4,t4,-32
+ mv t1,a7
+ bgeu a7,a5,.L6
+ j .L16
+.L14:
+ li t3,48
+ li a5,32
+ addi t3,t3,-48
+ mv t4,a7
+ bgeu a7,a5,.L5
+ j .L15
+.L3:
+ slli t5,t5,2
+ add t5,a0,t5
+.L9:
+ sb a3,0(a0)
+ sb a4,1(a0)
+ sb a5,2(a0)
+ sb a6,3(a0)
+ sh a7,0(a1)
+ sh t3,2(a1)
+ sw t6,0(a2)
+ addi a0,a0,4
+ addi a1,a1,4
+ addi a2,a2,4
+ bne a0,t5,.L9
+ addi sp,sp,48
+ jr ra
+ .size test_1_TYPE1_int16_t, .-test_1_TYPE1_int16_t
+ .align 1
+ .globl test_1_TYPE1_uint16_t
+ .type test_1_TYPE1_uint16_t, @function
+test_1_TYPE1_uint16_t:
+ addi sp,sp,-48
+ lw t1,56(sp)
+ lhu t4,48(sp)
+ lw t5,52(sp)
+ ble t1,zero,.L17
+ or t3,a2,a1
+ or t3,a0,t3
+ andi t3,t3,15
+ bne t3,zero,.L19
+ slli a4,a4,8
+ slli a5,a5,16
+ or t6,a3,a4
+ vsetvli t3,zero,e8,m1,ta,ma
+ li t2,16777216
+ addi t2,t2,-1
+ or t3,t6,a5
+ slli a6,a6,24
+ and t3,t3,t2
+ vmv.v.i v1,0
+ sw s0,44(sp)
+ vs1r.v v1,0(sp)
+ or s0,t3,a6
+ sw s0,0(sp)
+ lw s0,4(sp)
+ li t6,-65536
+ addi t6,t6,255
+ andi t0,s0,-256
+ or t0,t0,a3
+ and s0,t0,t6
+ li t3,-16711680
+ addi t3,t3,-1
+ or s0,s0,a4
+ and t0,s0,t3
+ or t0,t0,a5
+ and t0,t0,t2
+ or s0,t0,a6
+ sw s0,4(sp)
+ lw s0,8(sp)
+ li t0,65536
+ addi t0,t0,-1
+ sw s2,36(sp)
+ andi s2,s0,-256
+ slli s0,t4,16
+ vsetvli t4,zero,e16,m1,ta,ma
+ sw s1,40(sp)
+ sw s3,32(sp)
+ addi t4,sp,16
+ and s1,a7,t0
+ vmv.v.i v1,0
+ or s1,s1,s0
+ vs1r.v v1,0(t4)
+ sw s1,16(sp)
+ lw s1,20(sp)
+ li t4,-65536
+ or s2,s2,a3
+ and s1,t4,s1
+ and s3,s2,t6
+ or s1,s1,a7
+ or s3,s3,a4
+ and s1,s1,t0
+ and s2,s3,t3
+ or s1,s1,s0
+ or s2,s2,a5
+ sw s1,20(sp)
+ lw s1,12(sp)
+ and s2,s2,t2
+ or s2,s2,a6
+ sw s2,8(sp)
+ andi s2,s1,-256
+ lw s1,24(sp)
+ or s2,s2,a3
+ and t6,s2,t6
+ and s1,t4,s1
+ or a3,s1,a7
+ and a3,a3,t0
+ or t6,t6,a4
+ or a4,a3,s0
+ sw a4,24(sp)
+ lw a4,28(sp)
+ and t3,t6,t3
+ or t3,t3,a5
+ and t4,t4,a4
+ and t3,t3,t2
+ or t4,t4,a7
+ or a4,t3,a6
+ and t4,t4,t0
+ sw a4,12(sp)
+ or a4,t4,s0
+ slli t1,t1,2
+ sw a4,28(sp)
+ li a5,48
+ vsetvli a4,zero,e32,m1,ta,ma
+ mv t3,t1
+ vmv.v.x v1,t5
+ bltu t1,a5,.L29
+ li a5,32
+ addi t3,t3,-48
+ mv t4,t1
+ bltu t1,a5,.L30
+.L21:
+ li a5,16
+ addi t4,t4,-32
+ mv a7,t1
+ bltu t1,a5,.L31
+.L22:
+ addi a7,a7,-16
+.L23:
+ vsetvli a6,t1,e8,m4,tu,mu
+ vl1re8.v v2,0(sp)
+ addi a4,a0,16
+ vsetvli zero,a6,e8,m1,ta,ma
+ vse8.v v2,0(a0)
+ addi a5,a0,32
+ vsetvli a3,a7,e8,m4,tu,mu
+ vsetvli zero,a3,e8,m1,ta,ma
+ vse8.v v2,0(a4)
+ addi t6,a0,48
+ vsetvli a4,t4,e8,m4,tu,mu
+ vsetvli zero,a4,e8,m1,ta,ma
+ vse8.v v2,0(a5)
+ srli t5,a6,1
+ vsetvli a5,t3,e8,m4,tu,mu
+ addi s0,sp,16
+ vsetvli zero,a5,e8,m1,ta,ma
+ vse8.v v2,0(t6)
+ vl1re16.v v2,0(s0)
+ srli t6,a3,1
+ vsetvli zero,t5,e16,m1,ta,ma
+ addi t5,a1,16
+ vse16.v v2,0(a1)
+ vsetvli zero,t6,e16,m1,ta,ma
+ srli t6,a4,1
+ vse16.v v2,0(t5)
+ addi t5,a1,32
+ vsetvli zero,t6,e16,m1,ta,ma
+ srli t6,a5,1
+ vse16.v v2,0(t5)
+ addi t5,a1,48
+ vsetvli zero,t6,e16,m1,ta,ma
+ vse16.v v2,0(t5)
+ srli t5,a6,2
+ vsetvli zero,t5,e32,m1,ta,ma
+ addi t6,a2,16
+ vse32.v v1,0(a2)
+ srli a3,a3,2
+ vsetvli zero,a3,e32,m1,ta,ma
+ addi t5,a2,32
+ vse32.v v1,0(t6)
+ srli a4,a4,2
+ addi a3,a2,48
+ vsetvli zero,a4,e32,m1,ta,ma
+ srli a5,a5,2
+ vse32.v v1,0(t5)
+ sub t1,t1,a6
+ vsetvli zero,a5,e32,m1,ta,ma
+ vse32.v v1,0(a3)
+ sub a7,a7,a6
+ sub t4,t4,a6
+ sub t3,t3,a6
+ addi a0,a0,64
+ addi a1,a1,64
+ addi a2,a2,64
+ bne t1,zero,.L23
+ lw s0,44(sp)
+ lw s1,40(sp)
+ lw s2,36(sp)
+ lw s3,32(sp)
+.L17:
+ addi sp,sp,48
+ jr ra
+.L31:
+ li a7,16
+ j .L22
+.L30:
+ li t4,32
+ li a5,16
+ addi t4,t4,-32
+ mv a7,t1
+ bgeu t1,a5,.L22
+ j .L31
+.L29:
+ li t3,48
+ li a5,32
+ addi t3,t3,-48
+ mv t4,t1
+ bgeu t1,a5,.L21
+ j .L30
+.L19:
+ slli t1,t1,2
+ add t1,a0,t1
+.L25:
+ sb a3,0(a0)
+ sb a4,1(a0)
+ sb a5,2(a0)
+ sb a6,3(a0)
+ sh a7,0(a1)
+ sh t4,2(a1)
+ sw t5,0(a2)
+ addi a0,a0,4
+ addi a1,a1,4
+ addi a2,a2,4
+ bne a0,t1,.L25
+ addi sp,sp,48
+ jr ra
+ .size test_1_TYPE1_uint16_t, .-test_1_TYPE1_uint16_t
+ .align 1
+ .globl test_1_TYPE1_int32_t
+ .type test_1_TYPE1_int32_t, @function
+test_1_TYPE1_int32_t:
+ addi sp,sp,-64
+ lw t1,80(sp)
+ lw t3,64(sp)
+ lw t5,72(sp)
+ lw t6,76(sp)
+ ble t1,zero,.L32
+ addi t0,t1,-1
+ li t4,6
+ bleu t0,t4,.L34
+ or t4,a2,a1
+ or t4,a0,t4
+ andi t4,t4,15
+ beq t4,zero,.L44
+.L34:
+ slli t1,t1,3
+ add t1,a0,t1
+.L40:
+ sh a3,0(a0)
+ sh a4,2(a0)
+ sh a5,4(a0)
+ sh a6,6(a0)
+ sw a7,0(a1)
+ sw t3,4(a1)
+ sw t5,0(a2)
+ sw t6,4(a2)
+ addi a0,a0,8
+ addi a1,a1,8
+ addi a2,a2,8
+ bne a0,t1,.L40
+.L32:
+ addi sp,sp,64
+ jr ra
+.L44:
+ sw s0,60(sp)
+ slli t2,a3,16
+ li s0,65536
+ addi s0,s0,-1
+ vsetvli t4,zero,e16,m1,ta,ma
+ srli t2,t2,16
+ slli a4,a4,16
+ and a3,t2,s0
+ addi t4,sp,8
+ or a3,a3,a4
+ vmv.v.i v1,0
+ vs1r.v v1,0(t4)
+ sw a3,8(sp)
+ lw a3,12(sp)
+ li t4,-65536
+ slli a5,a5,16
+ and t0,t4,a3
+ srli a5,a5,16
+ or t0,t0,a5
+ slli a6,a6,16
+ and t0,t0,s0
+ or a3,t0,a6
+ sw a3,12(sp)
+ lw a3,16(sp)
+ sw t3,28(sp)
+ sw t3,36(sp)
+ and a3,t4,a3
+ or a3,a3,t2
+ and a3,a3,s0
+ or a4,a3,a4
+ sw a4,16(sp)
+ lw a4,20(sp)
+ sw a7,24(sp)
+ sw a7,32(sp)
+ and t4,t4,a4
+ or a5,t4,a5
+ and t4,a5,s0
+ or a4,t4,a6
+ sw a4,20(sp)
+ sw t5,40(sp)
+ sw t6,44(sp)
+ slli a5,t1,2
+ addi s0,sp,40
+ li a3,24
+ vsetvli a4,zero,e64,m1,ta,ma
+ mv t3,a5
+ vlse64.v v1,0(s0),zero
+ bltu a5,a3,.L45
+ li a4,16
+ addi t3,t3,-24
+ mv t4,a5
+ bltu a5,a4,.L46
+.L36:
+ li a4,8
+ addi t4,t4,-16
+ mv t1,a5
+ bltu a5,a4,.L47
+.L37:
+ addi t1,t1,-8
+.L38:
+ addi a3,sp,8
+ vsetvli a4,a5,e8,m2,tu,mu
+ vl1re16.v v2,0(a3)
+ addi a6,a0,16
+ vsetvli zero,a4,e16,m1,ta,ma
+ vse16.v v2,0(a0)
+ addi a3,a0,32
+ vsetvli a7,t1,e8,m2,tu,mu
+ vsetvli zero,a7,e16,m1,ta,ma
+ vse16.v v2,0(a6)
+ addi t6,a0,48
+ vsetvli a6,t4,e8,m2,tu,mu
+ vsetvli zero,a6,e16,m1,ta,ma
+ vse16.v v2,0(a3)
+ srli t5,a4,1
+ vsetvli a3,t3,e8,m2,tu,mu
+ addi s0,sp,24
+ vsetvli zero,a3,e16,m1,ta,ma
+ vse16.v v2,0(t6)
+ vl1re32.v v2,0(s0)
+ srli t6,a7,1
+ vsetvli zero,t5,e32,m1,ta,ma
+ addi t5,a1,16
+ vse32.v v2,0(a1)
+ vsetvli zero,t6,e32,m1,ta,ma
+ srli t6,a6,1
+ vse32.v v2,0(t5)
+ addi t5,a1,32
+ vsetvli zero,t6,e32,m1,ta,ma
+ srli t6,a3,1
+ vse32.v v2,0(t5)
+ addi t5,a1,48
+ vsetvli zero,t6,e32,m1,ta,ma
+ vse32.v v2,0(t5)
+ srli t5,a4,2
+ vsetvli zero,t5,e64,m1,ta,ma
+ addi t6,a2,16
+ vse64.v v1,0(a2)
+ srli a7,a7,2
+ vsetvli zero,a7,e64,m1,ta,ma
+ addi t5,a2,32
+ vse64.v v1,0(t6)
+ srli a6,a6,2
+ addi a7,a2,48
+ vsetvli zero,a6,e64,m1,ta,ma
+ srli a3,a3,2
+ vse64.v v1,0(t5)
+ sub a5,a5,a4
+ vsetvli zero,a3,e64,m1,ta,ma
+ vse64.v v1,0(a7)
+ sub t1,t1,a4
+ sub t4,t4,a4
+ sub t3,t3,a4
+ addi a0,a0,64
+ addi a1,a1,64
+ addi a2,a2,64
+ bne a5,zero,.L38
+ lw s0,60(sp)
+ addi sp,sp,64
+ jr ra
+.L47:
+ li t1,8
+ j .L37
+.L46:
+ li t4,16
+ li a4,8
+ addi t4,t4,-16
+ mv t1,a5
+ bgeu a5,a4,.L37
+ j .L47
+.L45:
+ li t3,24
+ li a4,16
+ addi t3,t3,-24
+ mv t4,a5
+ bgeu a5,a4,.L36
+ j .L46
+ .size test_1_TYPE1_int32_t, .-test_1_TYPE1_int32_t
+ .align 1
+ .globl test_1_TYPE1_uint32_t
+ .type test_1_TYPE1_uint32_t, @function
+test_1_TYPE1_uint32_t:
+ addi sp,sp,-48
+ lw t1,64(sp)
+ lw t5,48(sp)
+ lw t3,56(sp)
+ lw t4,60(sp)
+ ble t1,zero,.L48
+ addi t0,t1,-1
+ li t6,6
+ bleu t0,t6,.L50
+ or t6,a2,a1
+ or t6,a0,t6
+ andi t6,t6,15
+ beq t6,zero,.L60
+.L50:
+ slli t1,t1,3
+ add t1,a0,t1
+.L56:
+ sh a3,0(a0)
+ sh a4,2(a0)
+ sh a5,4(a0)
+ sh a6,6(a0)
+ sw a7,0(a1)
+ sw t5,4(a1)
+ sw t3,0(a2)
+ sw t4,4(a2)
+ addi a0,a0,8
+ addi a1,a1,8
+ addi a2,a2,8
+ bne a0,t1,.L56
+.L48:
+ addi sp,sp,48
+ jr ra
+.L60:
+ li t0,65536
+ addi t0,t0,-1
+ vsetvli t6,zero,e16,m1,ta,ma
+ slli a4,a4,16
+ and t2,a3,t0
+ addi t6,sp,8
+ or t2,t2,a4
+ vmv.v.i v1,0
+ vs1r.v v1,0(t6)
+ sw t2,8(sp)
+ lw t2,12(sp)
+ li t6,-65536
+ slli a6,a6,16
+ and t2,t6,t2
+ or t2,t2,a5
+ and t2,t2,t0
+ or t2,t2,a6
+ sw t2,12(sp)
+ lw t2,16(sp)
+ sw t3,40(sp)
+ sw a7,24(sp)
+ and t2,t6,t2
+ or a3,t2,a3
+ and a3,a3,t0
+ or a4,a3,a4
+ sw a4,16(sp)
+ lw a4,20(sp)
+ sw t5,28(sp)
+ sw a7,32(sp)
+ and t6,t6,a4
+ or t6,t6,a5
+ and t6,t6,t0
+ or a5,t6,a6
+ sw a5,20(sp)
+ sw t4,44(sp)
+ slli a4,t1,2
+ sw t5,36(sp)
+ addi a6,sp,40
+ li a3,24
+ vsetvli a5,zero,e64,m1,ta,ma
+ mv t3,a4
+ vlse64.v v1,0(a6),zero
+ bltu a4,a3,.L61
+ li a5,16
+ addi t3,t3,-24
+ mv t4,a4
+ bltu a4,a5,.L62
+.L52:
+ li a5,8
+ addi t4,t4,-16
+ mv t1,a4
+ bltu a4,a5,.L63
+.L53:
+ addi t1,t1,-8
+.L54:
+ addi a3,sp,8
+ vsetvli a5,a4,e8,m2,tu,mu
+ vl1re16.v v2,0(a3)
+ addi a6,a0,16
+ vsetvli zero,a5,e16,m1,ta,ma
+ vse16.v v2,0(a0)
+ addi a3,a0,32
+ vsetvli a7,t1,e8,m2,tu,mu
+ vsetvli zero,a7,e16,m1,ta,ma
+ vse16.v v2,0(a6)
+ addi t6,a0,48
+ vsetvli a6,t4,e8,m2,tu,mu
+ vsetvli zero,a6,e16,m1,ta,ma
+ vse16.v v2,0(a3)
+ srli t5,a5,1
+ vsetvli a3,t3,e8,m2,tu,mu
+ vsetvli zero,a3,e16,m1,ta,ma
+ vse16.v v2,0(t6)
+ addi t6,sp,24
+ vl1re32.v v2,0(t6)
+ vsetvli zero,t5,e32,m1,ta,ma
+ srli t6,a7,1
+ vse32.v v2,0(a1)
+ addi t5,a1,16
+ vsetvli zero,t6,e32,m1,ta,ma
+ srli t6,a6,1
+ vse32.v v2,0(t5)
+ addi t5,a1,32
+ vsetvli zero,t6,e32,m1,ta,ma
+ srli t6,a3,1
+ vse32.v v2,0(t5)
+ addi t5,a1,48
+ vsetvli zero,t6,e32,m1,ta,ma
+ vse32.v v2,0(t5)
+ srli t5,a5,2
+ vsetvli zero,t5,e64,m1,ta,ma
+ addi t6,a2,16
+ vse64.v v1,0(a2)
+ srli a7,a7,2
+ vsetvli zero,a7,e64,m1,ta,ma
+ addi t5,a2,32
+ vse64.v v1,0(t6)
+ srli a6,a6,2
+ addi a7,a2,48
+ vsetvli zero,a6,e64,m1,ta,ma
+ srli a3,a3,2
+ vse64.v v1,0(t5)
+ sub a4,a4,a5
+ vsetvli zero,a3,e64,m1,ta,ma
+ vse64.v v1,0(a7)
+ sub t1,t1,a5
+ sub t4,t4,a5
+ sub t3,t3,a5
+ addi a0,a0,64
+ addi a1,a1,64
+ addi a2,a2,64
+ bne a4,zero,.L54
+ addi sp,sp,48
+ jr ra
+.L63:
+ li t1,8
+ j .L53
+.L62:
+ li t4,16
+ li a5,8
+ addi t4,t4,-16
+ mv t1,a4
+ bgeu a4,a5,.L53
+ j .L63
+.L61:
+ li t3,24
+ li a5,16
+ addi t3,t3,-24
+ mv t4,a4
+ bgeu a4,a5,.L52
+ j .L62
+ .size test_1_TYPE1_uint32_t, .-test_1_TYPE1_uint32_t
+ .ident "GCC: (GNU) 13.0.1 20230324 (experimental)"
new file mode 100644
@@ -0,0 +1,19 @@
+/* { dg-do run { target { riscv_vector } } } */
+/* { dg-additional-options "--param riscv-autovec-preference=fixed-vlmax" } */
+
+#include "multiple_rgroup-1.c"
+
+int main (void)
+{
+ TEST_ALL (run_1)
+ TEST_ALL (run_2)
+ TEST_ALL (run_3)
+ TEST_ALL (run_4)
+ TEST_ALL (run_5)
+ TEST_ALL (run_6)
+ TEST_ALL (run_7)
+ TEST_ALL (run_8)
+ TEST_ALL (run_9)
+ TEST_ALL (run_10)
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,19 @@
+/* { dg-do run { target { riscv_vector } } } */
+/* { dg-additional-options "--param riscv-autovec-preference=fixed-vlmax" } */
+
+#include "multiple_rgroup-2.c"
+
+int main (void)
+{
+ TEST_ALL (run_1)
+ TEST_ALL (run_2)
+ TEST_ALL (run_3)
+ TEST_ALL (run_4)
+ TEST_ALL (run_5)
+ TEST_ALL (run_6)
+ TEST_ALL (run_7)
+ TEST_ALL (run_8)
+ TEST_ALL (run_9)
+ TEST_ALL (run_10)
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=scalable -fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */
+
+#include "single_rgroup-1.h"
+
+TEST_ALL (test_1)
+
+/* { dg-final { scan-assembler-times {vsetvli} 10 } } */
new file mode 100644
@@ -0,0 +1,106 @@
+#include <stddef.h>
+#include <stdint.h>
+
+#define N 777
+
+#define test_1(TYPE) \
+ TYPE a_##TYPE[N]; \
+ TYPE b_##TYPE[N]; \
+ void __attribute__ ((noinline, noclone)) test_1_##TYPE (unsigned int n) \
+ { \
+ unsigned int i = 0; \
+ for (i = 0; i < n; i++) \
+ b_##TYPE[i] = a_##TYPE[i]; \
+ }
+
+#define run_1(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 33 + 1 + 109; \
+ test_1_##TYPE (5); \
+ for (unsigned int i = 0; i < 5; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_2(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 57 + 1 + 999; \
+ test_1_##TYPE (17); \
+ for (unsigned int i = 0; i < 17; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_3(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 77 + 1 + 3; \
+ test_1_##TYPE (32); \
+ for (unsigned int i = 0; i < 32; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_4(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 45 + 1 + 11; \
+ test_1_##TYPE (128); \
+ for (unsigned int i = 0; i < 128; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_5(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 199 + 1 + 79; \
+ test_1_##TYPE (177); \
+ for (unsigned int i = 0; i < 177; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_6(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 377 + 1 + 73; \
+ test_1_##TYPE (255); \
+ for (unsigned int i = 0; i < 255; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_7(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 98 + 1 + 66; \
+ test_1_##TYPE (333); \
+ for (unsigned int i = 0; i < 333; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_8(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 7 + 1 * 7; \
+ test_1_##TYPE (512); \
+ for (unsigned int i = 0; i < 512; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_9(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 + 1 + 88; \
+ test_1_##TYPE (637); \
+ for (unsigned int i = 0; i < 637; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define run_10(TYPE) \
+ for (unsigned int i = 0; i < N; i++) \
+ a_##TYPE[i] = i * 2 * 331 + 1 + 547; \
+ test_1_##TYPE (777); \
+ for (unsigned int i = 0; i < 777; i++) \
+ if (b_##TYPE[i] != a_##TYPE[i]) \
+ __builtin_abort ();
+
+#define TEST_ALL(T) \
+ T (int8_t) \
+ T (uint8_t) \
+ T (int16_t) \
+ T (uint16_t) \
+ T (int32_t) \
+ T (uint32_t) \
+ T (int64_t) \
+ T (uint64_t) \
+ T (float) \
+ T (double)
new file mode 100644
@@ -0,0 +1,19 @@
+/* { dg-do run { target { riscv_vector } } } */
+/* { dg-additional-options "-fno-vect-cost-model -fno-tree-loop-distribute-patterns --param riscv-autovec-preference=scalable" } */
+
+#include "single_rgroup-1.c"
+
+int main (void)
+{
+ TEST_ALL (run_1)
+ TEST_ALL (run_2)
+ TEST_ALL (run_3)
+ TEST_ALL (run_4)
+ TEST_ALL (run_5)
+ TEST_ALL (run_6)
+ TEST_ALL (run_7)
+ TEST_ALL (run_8)
+ TEST_ALL (run_9)
+ TEST_ALL (run_10)
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,68 @@
+#include <stddef.h>
+#include <stdint.h>
+
+void
+foo0 (int8_t *__restrict f, int16_t *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
+
+void
+foo1 (int16_t *__restrict f, int32_t *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
+
+void
+foo2 (int32_t *__restrict f, int64_t *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
+
+void
+foo3 (int16_t *__restrict f, float *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
+
+void
+foo4 (int32_t *__restrict f, float *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
+
+void
+foo5 (float *__restrict f, double *__restrict d, int n)
+{
+ for (int i = 0; i < n; ++i)
+ {
+ f[i * 2 + 0] = 1;
+ f[i * 2 + 1] = 2;
+ d[i] = 3;
+ }
+}
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gcv -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 5 "vect" } } */
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+
new file mode 100644
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve32x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 2 "vect" } } */
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64d_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64d_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 5 "vect" } } */
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64f_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=scalable -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
new file mode 100644
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zve64x_zvl128b -mabi=ilp32d --param riscv-autovec-preference=fixed-vlmax -O3 -ftree-vectorize -fdump-tree-vect-details -save-temps" } */
+
+#include "template-1.h"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 3 "vect" } } */
@@ -44,6 +44,22 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/base/*.\[cS\]]] \
"" $CFLAGS
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vsetvl/*.\[cS\]]] \
"" $CFLAGS
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/*.\[cS\]]] \
+ "" $CFLAGS
+
+set AUTOVEC_TEST_OPTS [list \
+ {-ftree-vectorize -O3 --param riscv-autovec-lmul=m1} \
+ {-ftree-vectorize -O3 --param riscv-autovec-lmul=m2} \
+ {-ftree-vectorize -O3 --param riscv-autovec-lmul=m4} \
+ {-ftree-vectorize -O3 --param riscv-autovec-lmul=m8} \
+ {-ftree-vectorize -O2 --param riscv-autovec-lmul=m1} \
+ {-ftree-vectorize -O2 --param riscv-autovec-lmul=m2} \
+ {-ftree-vectorize -O2 --param riscv-autovec-lmul=m4} \
+ {-ftree-vectorize -O2 --param riscv-autovec-lmul=m8} ]
+foreach op $AUTOVEC_TEST_OPTS {
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/partial/*.\[cS\]]] \
+ "" "$op"
+}
# All done.
dg-finish
@@ -11,4 +11,4 @@ void foo(int32_t *in1, int32_t *in2, int32_t *in3, int32_t *out, size_t n, int c
__riscv_vse32_v_i32m1(out, c, __riscv_vsetvl_e8mf2 (vl));
}
-/* { dg-final { scan-assembler-times {vsetvli} 8 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */
\ No newline at end of file
+/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-g" no-opts "-funroll-loops" } } } } */