tree-optimization/107302 - fix vec_perm placement for recurrence vect
The following fixes the VEC_PERM_EXPR placement when the latch definition is a PHI node. PR tree-optimization/107302 * tree-vect-loop.cc (vectorizable_recurrence): Fix vec_perm placement for a PHI latch def. * gcc.dg/vect/pr107302.c: New testcase.
This commit is contained in:
parent
aae016f99b
commit
92ef7822bf
2 changed files with 22 additions and 3 deletions
13
gcc/testsuite/gcc.dg/vect/pr107302.c
Normal file
13
gcc/testsuite/gcc.dg/vect/pr107302.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fno-tree-pre" } */
|
||||
|
||||
int a[2000];
|
||||
int s292_im1;
|
||||
|
||||
void
|
||||
s292() {
|
||||
for (int i = 0; i < 2000; i++) {
|
||||
a[i] = s292_im1;
|
||||
s292_im1 = i;
|
||||
}
|
||||
}
|
|
@ -8485,9 +8485,15 @@ vectorizable_recurr (loop_vec_info loop_vinfo, stmt_vec_info stmt_info,
|
|||
second and later operands are tentative and will be updated when we have
|
||||
vectorized the latch definition. */
|
||||
edge le = loop_latch_edge (LOOP_VINFO_LOOP (loop_vinfo));
|
||||
gimple_stmt_iterator gsi2
|
||||
= gsi_for_stmt (SSA_NAME_DEF_STMT (PHI_ARG_DEF_FROM_EDGE (phi, le)));
|
||||
gsi_next (&gsi2);
|
||||
gimple *latch_def = SSA_NAME_DEF_STMT (PHI_ARG_DEF_FROM_EDGE (phi, le));
|
||||
gimple_stmt_iterator gsi2;
|
||||
if (is_a <gphi *> (latch_def))
|
||||
gsi2 = gsi_after_labels (gimple_bb (latch_def));
|
||||
else
|
||||
{
|
||||
gsi2 = gsi_for_stmt (latch_def);
|
||||
gsi_next (&gsi2);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < ncopies; ++i)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue