On Mon, 23 Sep 2024, Tamar Christina wrote:

> Hi All,
> 
> The new invariant statements should be inserted before the current
> statement and not after.  This goes fine 99% of the time but when the
> current statement is a gcond the control flow gets corrupted.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> 
> Ok for master?
> 
> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       PR tree-optimization/116812
>       * tree-vect-slp.cc (vect_slp_region): Fix insertion.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR tree-optimization/116812
>       * gcc.dg/vect/pr116812.c: New test.
> 
> ---
> diff --git a/gcc/testsuite/gcc.dg/vect/pr116812.c 
> b/gcc/testsuite/gcc.dg/vect/pr116812.c
> new file mode 100644
> index 
> 0000000000000000000000000000000000000000..3e83c13d94bdb475828971efb5b6f2e5101eaebe
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/vect/pr116812.c
> @@ -0,0 +1,17 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-O2 -fno-tree-dce -fno-tree-dse" } */
> +
> +int a, b, c, d, e, f[2], g, h;
> +int k(int j) { return 2 >> a ? 2 >> a : a; }
> +int main() {
> +  int i;
> +  for (; g; g = k(d = 0))
> +    ;
> +  if (a)
> +    b && h;
> +  for (e = 0; e < 2; e++)
> +    c = d & 1 ? d : 0;
> +  for (i = 0; i < 2; i++)
> +    f[i] = 0;
> +  return 0;
> +}
> diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
> index 
> 600987dd6e5d506aa5fbb02350f9dab77793d382..d08d2f84a00ed307e03fc1c027681d428e12fdd0
>  100644
> --- a/gcc/tree-vect-slp.cc
> +++ b/gcc/tree-vect-slp.cc
> @@ -9170,8 +9170,8 @@ vect_slp_region (vec<basic_block> bbs, 
> vec<data_reference_p> datarefs,
>  
>             gimple_stmt_iterator gsi;
>             gsi = gsi_after_labels (bb_vinfo->bbs[0]);
> -           gsi_insert_seq_after (&gsi, bb_vinfo->inv_pattern_def_seq,
> -                                 GSI_CONTINUE_LINKING);
> +           gsi_insert_seq_before (&gsi, bb_vinfo->inv_pattern_def_seq,
> +                                  GSI_CONTINUE_LINKING);

Please use bb_vinfo->insert_seq_on_entry

OK with that change.
Richard.

>           }
>       }
>        else
> 
> 
> 
> 
> 

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

Reply via email to