Commit 77100812 by Richard Biener Committed by Richard Biener

tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail swapping if we actually…

tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail swapping if we actually have to modify the IL on a shared stmt.

2019-10-25  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail
	swapping if we actually have to modify the IL on a shared stmt.
	(vect_build_slp_tree_2): Never fail swapping on shared stmts
	because we no longer modify the IL.

From-SVN: r277446
parent bafe6f6a
2019-10-25 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail
swapping if we actually have to modify the IL on a shared stmt.
(vect_build_slp_tree_2): Never fail swapping on shared stmts
because we no longer modify the IL.
2019-10-25 Martin Liska <mliska@suse.cz> 2019-10-25 Martin Liska <mliska@suse.cz>
* tree.c (dump_tree_statistics): Use sorted index 'j' and not 'i'. * tree.c (dump_tree_statistics): Use sorted index 'j' and not 'i'.
...@@ -537,19 +537,19 @@ again: ...@@ -537,19 +537,19 @@ again:
/* Swap operands. */ /* Swap operands. */
if (swapped) if (swapped)
{ {
/* If there are already uses of this stmt in a SLP instance then
we've committed to the operand order and can't swap it. */
if (STMT_VINFO_NUM_SLP_USES (stmt_info) != 0)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"Build SLP failed: cannot swap operands of "
"shared stmt %G", stmt_info->stmt);
return -1;
}
if (first_op_cond) if (first_op_cond)
{ {
/* If there are already uses of this stmt in a SLP instance then
we've committed to the operand order and can't swap it. */
if (STMT_VINFO_NUM_SLP_USES (stmt_info) != 0)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"Build SLP failed: cannot swap operands of "
"shared stmt %G", stmt_info->stmt);
return -1;
}
/* To get rid of this swapping we have to move the stmt code /* To get rid of this swapping we have to move the stmt code
to the SLP tree as well (and gather it here per stmt). */ to the SLP tree as well (and gather it here per stmt). */
gassign *stmt = as_a <gassign *> (stmt_info->stmt); gassign *stmt = as_a <gassign *> (stmt_info->stmt);
...@@ -1413,28 +1413,6 @@ vect_build_slp_tree_2 (vec_info *vinfo, ...@@ -1413,28 +1413,6 @@ vect_build_slp_tree_2 (vec_info *vinfo,
swap_not_matching = false; swap_not_matching = false;
break; break;
} }
/* Verify if we can safely swap or if we committed to a
specific operand order already.
??? Instead of modifying GIMPLE stmts here we could
record whether we want to swap operands in the SLP
node and temporarily do that when processing it
(or wrap operand accessors in a helper). */
else if (swap[j] != 0
|| STMT_VINFO_NUM_SLP_USES (stmt_info))
{
if (!swap_not_matching)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION,
vect_location,
"Build SLP failed: cannot swap "
"operands of shared stmt %G",
stmts[j]->stmt);
goto fail;
}
swap_not_matching = false;
break;
}
} }
} }
while (j != group_size); while (j != group_size);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment