diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-05-31 18:23:27 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-05-31 21:57:00 +0800 |
commit | 644d168385f2e90da1985ed7307be0637ea184e9 (patch) | |
tree | 696f19cdae8632ae58ceab1840b37fec09c9425b /gcc | |
parent | 57920ae9653e8ef2b3f5f68c22894f5e65a3673d (diff) | |
download | gcc-644d168385f2e90da1985ed7307be0637ea184e9.zip gcc-644d168385f2e90da1985ed7307be0637ea184e9.tar.gz gcc-644d168385f2e90da1985ed7307be0637ea184e9.tar.bz2 |
RISC-V: Add testcase for vrsub.vi auto-vectorization
Apparently, we are missing vrsub.vi tests.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/binop/vsub-run.c: Add vsub.vi.
* gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c: Ditto.
* gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c: Ditto.
* gcc.target/riscv/rvv/autovec/binop/vsub-template.h: Ditto.
Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai>
Diffstat (limited to 'gcc')
4 files changed, 59 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c index 8c6d8e8..4f25487 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-run.c @@ -27,6 +27,22 @@ for (int i = 0; i < SZ; i++) \ assert (as##TYPE[i] == 999 - VAL); +#define RUN3(TYPE) \ + TYPE as2##TYPE[SZ]; \ + for (int i = 0; i < SZ; i++) \ + as2##TYPE[i] = i * 33 - 779; \ + vsubi_##TYPE (as2##TYPE, as2##TYPE, SZ); \ + for (int i = 0; i < SZ; i++) \ + assert (as2##TYPE[i] == (TYPE)(-16 - (i * 33 - 779))); + +#define RUN4(TYPE) \ + TYPE as3##TYPE[SZ]; \ + for (int i = 0; i < SZ; i++) \ + as3##TYPE[i] = i * -17 + 667; \ + vsubi2_##TYPE (as3##TYPE, as3##TYPE, SZ); \ + for (int i = 0; i < SZ; i++) \ + assert (as3##TYPE[i] == (TYPE)(15 - (i * -17 + 667))); + #define RUN_ALL() \ RUN(int16_t, 1) \ RUN(uint16_t, 2) \ @@ -39,7 +55,19 @@ RUN2(int32_t, 9) \ RUN2(uint32_t, 10) \ RUN2(int64_t, 11) \ - RUN2(uint64_t, 12) + RUN2(uint64_t, 12) \ + RUN3(int16_t) \ + RUN3(uint16_t) \ + RUN3(int32_t) \ + RUN3(uint32_t) \ + RUN3(int64_t) \ + RUN3(uint64_t) \ + RUN4(int16_t) \ + RUN4(uint16_t) \ + RUN4(int32_t) \ + RUN4(uint32_t) \ + RUN4(int64_t) \ + RUN4(uint64_t) int main () { diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c index e2bdd0f..a0d3802 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv.c @@ -4,3 +4,4 @@ #include "vsub-template.h" /* { dg-final { scan-assembler-times {\tvsub\.vv} 12 } } */ +/* { dg-final { scan-assembler-times {\tvrsub\.vi} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c index f7a2691..562c026 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv.c @@ -4,3 +4,4 @@ #include "vsub-template.h" /* { dg-final { scan-assembler-times {\tvsub\.vv} 12 } } */ +/* { dg-final { scan-assembler-times {\tvrsub\.vi} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h index 8c0a9c9..47f07f1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/vsub-template.h @@ -16,6 +16,22 @@ dst[i] = a[i] - b; \ } +#define TEST3_TYPE(TYPE) \ + __attribute__((noipa)) \ + void vsubi_##TYPE (TYPE *dst, TYPE *a, int n) \ + { \ + for (int i = 0; i < n; i++) \ + dst[i] = -16 - a[i]; \ + } + +#define TEST4_TYPE(TYPE) \ + __attribute__((noipa)) \ + void vsubi2_##TYPE (TYPE *dst, TYPE *a, int n) \ + { \ + for (int i = 0; i < n; i++) \ + dst[i] = 15 - a[i]; \ + } + /* *int8_t not autovec currently. */ #define TEST_ALL() \ TEST_TYPE(int16_t) \ @@ -30,5 +46,17 @@ TEST2_TYPE(uint32_t) \ TEST2_TYPE(int64_t) \ TEST2_TYPE(uint64_t) + TEST3_TYPE(int16_t) \ + TEST3_TYPE(uint16_t) \ + TEST3_TYPE(int32_t) \ + TEST3_TYPE(uint32_t) \ + TEST3_TYPE(int64_t) \ + TEST3_TYPE(uint64_t) \ + TEST4_TYPE(int16_t) \ + TEST4_TYPE(uint16_t) \ + TEST4_TYPE(int32_t) \ + TEST4_TYPE(uint32_t) \ + TEST4_TYPE(int64_t) \ + TEST4_TYPE(uint64_t) TEST_ALL() |