mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
Abort loop SLP analysis quicker
As we can't cope with removed SLP instances during analysis there's no point in doing that or even continuing analysis of SLP instances after a failure. The following makes us abort early. * tree-vect-slp.cc (vect_slp_analyze_operations): When doing loop analysis fail after the first failed SLP instance. Only remove instances when doing BB vectorization. * tree-vect-loop.cc (vect_analyze_loop_2): Check whether vect_slp_analyze_operations failed instead of checking the number of SLP instances remaining.
This commit is contained in:
parent
44058b8471
commit
412c156d78
@ -2947,12 +2947,10 @@ start_over:
|
||||
|
||||
if (slp)
|
||||
{
|
||||
/* Analyze operations in the SLP instances. Note this may
|
||||
remove unsupported SLP instances which makes the above
|
||||
SLP kind detection invalid. */
|
||||
unsigned old_size = LOOP_VINFO_SLP_INSTANCES (loop_vinfo).length ();
|
||||
vect_slp_analyze_operations (loop_vinfo);
|
||||
if (LOOP_VINFO_SLP_INSTANCES (loop_vinfo).length () != old_size)
|
||||
/* Analyze operations in the SLP instances. We can't simply
|
||||
remove unsupported SLP instances as this makes the above
|
||||
SLP kind detection invalid and might also affect the VF. */
|
||||
if (! vect_slp_analyze_operations (loop_vinfo))
|
||||
{
|
||||
ok = opt_result::failure_at (vect_location,
|
||||
"unsupported SLP instances\n");
|
||||
|
@ -7976,19 +7976,27 @@ vect_slp_analyze_operations (vec_info *vinfo)
|
||||
|| (SLP_INSTANCE_KIND (instance) == slp_inst_kind_bb_reduc
|
||||
&& !vectorizable_bb_reduc_epilogue (instance, &cost_vec)))
|
||||
{
|
||||
cost_vec.release ();
|
||||
slp_tree node = SLP_INSTANCE_TREE (instance);
|
||||
stmt_vec_info stmt_info;
|
||||
if (!SLP_INSTANCE_ROOT_STMTS (instance).is_empty ())
|
||||
stmt_info = SLP_INSTANCE_ROOT_STMTS (instance)[0];
|
||||
else
|
||||
stmt_info = SLP_TREE_SCALAR_STMTS (node)[0];
|
||||
if (is_a <loop_vec_info> (vinfo))
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_NOTE, vect_location,
|
||||
"unsupported SLP instance starting from: %G",
|
||||
stmt_info->stmt);
|
||||
return false;
|
||||
}
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_NOTE, vect_location,
|
||||
"removing SLP instance operations starting from: %G",
|
||||
stmt_info->stmt);
|
||||
vect_free_slp_instance (instance);
|
||||
vinfo->slp_instances.ordered_remove (i);
|
||||
cost_vec.release ();
|
||||
while (!visited_vec.is_empty ())
|
||||
visited.remove (visited_vec.pop ());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user