mirror of git://gcc.gnu.org/git/gcc.git
tree-optimization/120357 - ICE with early break vectorization
When doing early break vectorization of a loop with a conditional
reduction the epilog creation code is confused as to before which exit
to insert the conditional reduction induction IV update. The
following make sure this is done before the main IV exit.
PR tree-optimization/120357
* tree-vect-loop.cc (vect_create_epilog_for_reduction): Create
the conditional reduction induction IV increment before the
main IV exit.
* gcc.dg/vect/vect-early-break_136-pr120357.c: New testcase.
(cherry picked from commit dce4da51ab
)
This commit is contained in:
parent
f13e686397
commit
bcf8cec0e8
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-add-options vect_early_break } */
|
||||
/* { dg-additional-options "-O3" } */
|
||||
|
||||
char a;
|
||||
unsigned long long t[2][22];
|
||||
int u[22];
|
||||
void f(void)
|
||||
{
|
||||
for (int v = 0; v < 22; v++)
|
||||
for (_Bool w = 0; w < (u[v] < 0) + 1; w = 1)
|
||||
a *= 0 != t[w][v];
|
||||
}
|
|
@ -6134,7 +6134,8 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo,
|
|||
/* Create an induction variable. */
|
||||
gimple_stmt_iterator incr_gsi;
|
||||
bool insert_after;
|
||||
vect_iv_increment_position (loop_exit, &incr_gsi, &insert_after);
|
||||
vect_iv_increment_position (LOOP_VINFO_IV_EXIT (loop_vinfo),
|
||||
&incr_gsi, &insert_after);
|
||||
create_iv (series_vect, PLUS_EXPR, vec_step, NULL_TREE, loop, &incr_gsi,
|
||||
insert_after, &indx_before_incr, &indx_after_incr);
|
||||
|
||||
|
|
Loading…
Reference in New Issue