fix ICE with BB vectorization of PHIs
This fixes a vector CTOR insertion issue when we try to insert after a PHI node. 2020-10-09 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_create_constant_vectors): Properly insert after PHIs. * gcc.dg/vect/bb-slp-phis-1.c: New testcase.
This commit is contained in:
parent
da9df69975
commit
36500ed18a
|
@ -0,0 +1,20 @@
|
|||
/* From gcc.c-torture/execute/loop-13.c */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-march=cascadelake" { target x86_64-*-* i?86-*-* } } */
|
||||
#define TYPE long
|
||||
|
||||
void
|
||||
scale (TYPE *alpha, TYPE *x, int n)
|
||||
{
|
||||
int i, ix;
|
||||
|
||||
if (*alpha != 1)
|
||||
for (i = 0, ix = 0; i < n; i++, ix += 2)
|
||||
{
|
||||
TYPE tmpr, tmpi;
|
||||
tmpr = *alpha * x[ix];
|
||||
tmpi = *alpha * x[ix + 1];
|
||||
x[ix] = tmpr;
|
||||
x[ix + 1] = tmpi;
|
||||
}
|
||||
}
|
|
@ -4144,7 +4144,9 @@ vect_create_constant_vectors (vec_info *vinfo, slp_tree op_node)
|
|||
if (insert_after)
|
||||
{
|
||||
gimple_stmt_iterator gsi;
|
||||
if (!stmt_ends_bb_p (insert_after->stmt))
|
||||
if (gimple_code (insert_after->stmt) == GIMPLE_PHI)
|
||||
gsi = gsi_after_labels (gimple_bb (insert_after->stmt));
|
||||
else if (!stmt_ends_bb_p (insert_after->stmt))
|
||||
gsi = gsi_for_stmt (insert_after->stmt);
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue