mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-09 17:11:20 +08:00
tree-optimization/97139 - fix BB SLP live lane extraction
This fixes SLP live lane extraction with pattern stmts. 2020-09-21 Richard Biener <rguenther@suse.de> PR tree-optimization/97139 * tree-vect-slp.c (vect_bb_slp_mark_live_stmts): Only mark the pattern root, track visited vectorized stmts. * gcc.dg/vect/pr97139.c: New testcase.
This commit is contained in:
parent
b6ff694e59
commit
e6f58fb619
27
gcc/testsuite/gcc.dg/vect/pr97139.c
Normal file
27
gcc/testsuite/gcc.dg/vect/pr97139.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* { dg-require-effective-target vect_int } */
|
||||
|
||||
#include "tree-vect.h"
|
||||
|
||||
int pix[4];
|
||||
|
||||
int __attribute__((noipa)) foo (void)
|
||||
{
|
||||
pix[0] = pix[0] / 4;
|
||||
pix[1] = pix[1] / 4;
|
||||
pix[2] = pix[2] / 4;
|
||||
pix[3] = pix[3] / 4;
|
||||
return pix[0] + pix[1] + pix[2] + pix[3];
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
check_vect ();
|
||||
|
||||
pix[0] = 8;
|
||||
pix[1] = 16;
|
||||
pix[2] = 32;
|
||||
pix[3] = 64;
|
||||
if (foo () != 30)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -3021,10 +3021,14 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo, slp_tree node,
|
||||
bool all_visited = true;
|
||||
FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info)
|
||||
{
|
||||
stmt_vec_info orig_stmt_info = vect_orig_stmt (stmt_info);
|
||||
if (svisited.contains (orig_stmt_info))
|
||||
if (svisited.contains (stmt_info))
|
||||
continue;
|
||||
all_visited = false;
|
||||
stmt_vec_info orig_stmt_info = vect_orig_stmt (stmt_info);
|
||||
if (STMT_VINFO_IN_PATTERN_P (orig_stmt_info)
|
||||
&& STMT_VINFO_RELATED_STMT (orig_stmt_info) != stmt_info)
|
||||
/* Only the pattern root stmt computes the original scalar value. */
|
||||
continue;
|
||||
bool mark_visited = true;
|
||||
gimple *orig_stmt = orig_stmt_info->stmt;
|
||||
ssa_op_iter op_iter;
|
||||
@ -3091,7 +3095,7 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo, slp_tree node,
|
||||
}
|
||||
}
|
||||
if (mark_visited)
|
||||
svisited.add (orig_stmt_info);
|
||||
svisited.add (stmt_info);
|
||||
}
|
||||
if (all_visited)
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user