On Wed, May 29, 2024 at 1:39 AM Patrick O'Neill <patr...@rivosinc.com> wrote:
>
> From: Greg McGary <g...@rivosinc.com>
>
> gcc/ChangeLog:
>         * gcc/tree-vect-stmts.cc (gcc/tree-vect-stmts.cc): Prevent 
> divide-by-zero.
>         * testsuite/gcc.target/riscv/rvv/autovec/no-segment.c: Remove xfail.
> ---
>  gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c | 1 -
>  gcc/tree-vect-stmts.cc                                  | 3 ++-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c
> index fd996a27501..79d03612a22 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c
> @@ -1,6 +1,5 @@
>  /* { dg-do compile } */
>  /* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=scalable -O3 
> -mno-autovec-segment" } */
> -/* { xfail *-*-* } */
>
>  enum e { c, d };
>  enum g { f };
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index 4219ad832db..34f5736ba00 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -11558,7 +11558,8 @@ vectorizable_load (vec_info *vinfo,
>                                  - (vec_num * j + i) * nunits);
>                             /* remain should now be > 0 and < nunits.  */

^^^

>                             unsigned num;
> -                           if (constant_multiple_p (nunits, remain, &num))
> +                           if (known_gt (remain, 0)

So this shouldn't happen.  Do you have a testcase where this triggers?
If < nunits doesn't hold things will also go wrong.

Richard.


> +                               && constant_multiple_p (nunits, remain, &num))
>                               {
>                                 tree ptype;
>                                 new_vtype
> --
> 2.43.2
>

Reply via email to