aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>2023-12-15 06:24:32 +0800
committerPan Li <pan2.li@intel.com>2023-12-15 08:30:31 +0800
commit4bfafea6922dffea145d1aa1d5f5fa4814e66173 (patch)
tree37a99cd265fc523a8e3ff433f03ae94fc38dea0b
parentc7ef2189855a8cf12427a778cd5a31d42ddf6260 (diff)
downloadgcc-4bfafea6922dffea145d1aa1d5f5fa4814e66173.zip
gcc-4bfafea6922dffea145d1aa1d5f5fa4814e66173.tar.gz
gcc-4bfafea6922dffea145d1aa1d5f5fa4814e66173.tar.bz2
RISC-V: Tweak generic vector COST model
Notice current generic vector cost model make PR112387 failed to vectorize. Adapt it same as ARM SVE generic vector cost model which can fix it. Committed as it is obvious fix. PR target/112387 gcc/ChangeLog: * config/riscv/riscv.cc: Adapt generic cost model same ARM SVE. gcc/testsuite/ChangeLog: * gcc.dg/vect/costmodel/riscv/rvv/pr112387.c: Moved to... * gcc.dg/vect/costmodel/riscv/rvv/pr112387-1.c: ...here. * gcc.dg/vect/costmodel/riscv/rvv/pr112387-2.c: New test.
-rw-r--r--gcc/config/riscv/riscv.cc24
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-1.c (renamed from gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387.c)0
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-2.c19
3 files changed, 31 insertions, 12 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index ab0f95e..f6072671 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -355,13 +355,13 @@ static const common_vector_cost generic_vls_vector_cost = {
1, /* fp_stmt_cost */
1, /* gather_load_cost */
1, /* scatter_store_cost */
- 1, /* vec_to_scalar_cost */
+ 2, /* vec_to_scalar_cost */
1, /* scalar_to_vec_cost */
- 1, /* permute_cost */
- 3, /* align_load_cost */
- 3, /* align_store_cost */
- 3, /* unalign_load_cost */
- 3, /* unalign_store_cost */
+ 2, /* permute_cost */
+ 1, /* align_load_cost */
+ 1, /* align_store_cost */
+ 1, /* unalign_load_cost */
+ 1, /* unalign_store_cost */
};
/* Generic costs for VLA vector operations. */
@@ -371,13 +371,13 @@ static const scalable_vector_cost generic_vla_vector_cost = {
1, /* fp_stmt_cost */
1, /* gather_load_cost */
1, /* scatter_store_cost */
- 1, /* vec_to_scalar_cost */
+ 2, /* vec_to_scalar_cost */
1, /* scalar_to_vec_cost */
- 1, /* permute_cost */
- 3, /* align_load_cost */
- 3, /* align_store_cost */
- 3, /* unalign_load_cost */
- 3, /* unalign_store_cost */
+ 2, /* permute_cost */
+ 1, /* align_load_cost */
+ 1, /* align_store_cost */
+ 1, /* unalign_load_cost */
+ 1, /* unalign_store_cost */
},
};
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-1.c
index ee44b5f..ee44b5f 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-1.c
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-2.c
new file mode 100644
index 0000000..d9fcad6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr112387-2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mtune=generic-ooo -O3 -ftree-vectorize -fdump-tree-vect-details" } */
+
+#include <stdint-gcc.h>
+
+void
+f2 (uint64_t *__restrict y, uint64_t *__restrict x,
+ uint64_t *__restrict indices, uint64_t n)
+{
+ for (int64_t i = 0; i < n; ++i)
+ {
+ y[i * 2] = x[indices[i * 2]] + 1;
+ y[i * 2 + 1] = x[indices[i * 2 + 1]] + 2;
+ }
+}
+
+/* { dg-final { scan-tree-dump "Loop contains only SLP stmts" vect } } */
+/* { dg-final { scan-assembler-not "vlseg" } } */
+/* { dg-final { scan-assembler-not "vsseg" } } */