From: Juzhe-Zhong <juzhe.zhong@rivai.ai>
To: gcc-patches@gcc.gnu.org
Cc: richard.sandiford@arm.com, rguenther@suse.de,
Juzhe-Zhong <juzhe.zhong@rivai.ai>
Subject: [PATCH] VECT: Fix ICE on MASK_LEN_{LOAD,STORE} when no LEN recorded[PR110989]
Date: Fri, 11 Aug 2023 19:49:19 +0800 [thread overview]
Message-ID: <20230811114919.2556172-1-juzhe.zhong@rivai.ai> (raw)
This patch fixes bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110989
This ICE is caused because of this situation:
mask__49.21_99 = vect__17.19_96 == { 0.0, ... };
...
vect__6.24_107 = .MASK_LEN_LOAD (vectp.22_105, 32B, mask__49.21_99, POLY_INT_CST [2, 2], 0);
The MASK_LEN_LOAD is using real MASK which is produced by the EQ comparison wheras the LEN
is the dummy LEN which is the vectorization factor.
In this situation, we didn't enter 'vect_record_loop_len' since there is no LEN loop control.
Then 'LOOP_VINFO_RGROUP_IV_TYPE' is not suitable type for 'build_int_cst' used for producing
LEN argument for 'MASK_LEN_LOAD', so use sizetype instead which is perfectly matching
RVV length requirement.
PR middle-end/110989
gcc/ChangeLog:
* tree-vect-stmts.cc (vectorizable_store): Replace iv_type with sizetype.
(vectorizable_load): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/pr110989.c: New test.
---
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c | 11 +++++++++++
gcc/tree-vect-stmts.cc | 7 ++-----
2 files changed, 13 insertions(+), 5 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c
new file mode 100644
index 00000000000..cf3b247e604
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr110989.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -Ofast" } */
+
+int a, b, c;
+double *d;
+void e() {
+ double f;
+ for (; c; c++, d--)
+ f = *d ?: *(&a + c);
+ b = f;
+}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 398fbe945e5..e0e2083d022 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -9126,9 +9126,8 @@ vectorizable_store (vec_info *vinfo,
{
/* Pass VF value to 'len' argument of
MASK_LEN_STORE if LOOP_LENS is invalid. */
- tree iv_type = LOOP_VINFO_RGROUP_IV_TYPE (loop_vinfo);
final_len
- = build_int_cst (iv_type,
+ = build_int_cst (sizetype,
TYPE_VECTOR_SUBPARTS (vectype));
}
if (!final_mask)
@@ -10713,10 +10712,8 @@ vectorizable_load (vec_info *vinfo,
{
/* Pass VF value to 'len' argument of
MASK_LEN_LOAD if LOOP_LENS is invalid. */
- tree iv_type
- = LOOP_VINFO_RGROUP_IV_TYPE (loop_vinfo);
final_len
- = build_int_cst (iv_type,
+ = build_int_cst (sizetype,
TYPE_VECTOR_SUBPARTS (vectype));
}
if (!final_mask)
--
2.36.3
next reply other threads:[~2023-08-11 11:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-11 11:49 Juzhe-Zhong [this message]
2023-08-11 12:16 ` Richard Biener
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230811114919.2556172-1-juzhe.zhong@rivai.ai \
--to=juzhe.zhong@rivai.ai \
--cc=gcc-patches@gcc.gnu.org \
--cc=rguenther@suse.de \
--cc=richard.sandiford@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).