public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Juzhe-Zhong <juzhe.zhong@rivai.ai>
Cc: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com
Subject: Re: [PATCH] VECT: Fix ICE on MASK_LEN_{LOAD,STORE} when no LEN recorded[PR110989]
Date: Fri, 11 Aug 2023 12:16:34 +0000 (UTC)	[thread overview]
Message-ID: <nycvar.YFH.7.77.849.2308111215250.12935@jbgna.fhfr.qr> (raw)
In-Reply-To: <20230811114919.2556172-1-juzhe.zhong@rivai.ai>

On Fri, 11 Aug 2023, Juzhe-Zhong wrote:

> 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.

Looks reasonable.  Note there is size_int (...) you could use to shorten
the code.

Thanks,
Richard.

>         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)
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

      reply	other threads:[~2023-08-11 12:16 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-11 11:49 Juzhe-Zhong
2023-08-11 12:16 ` Richard Biener [this message]

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=nycvar.YFH.7.77.849.2308111215250.12935@jbgna.fhfr.qr \
    --to=rguenther@suse.de \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=juzhe.zhong@rivai.ai \
    --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).