Commit 60f2b864 by Richard Biener Committed by Richard Biener

re PR tree-optimization/68775 (spec2006 test case 465.tonto fails with the gcc…

re PR tree-optimization/68775 (spec2006 test case 465.tonto fails with the gcc 6.0 fortran compiler)

2015-12-14  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68775
	* tree-vect-slp.c (vect_build_slp_tree): Make sure to apply
	a operand swapping even if replacing the op with scalars.

From-SVN: r231617
parent adb48173
2015-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/68775
* tree-vect-slp.c (vect_build_slp_tree): Make sure to apply
a operand swapping even if replacing the op with scalars.
2015-12-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2015-12-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* combine.c (change_zero_ext): Do not create a shift of zero length. * combine.c (change_zero_ext): Do not create a shift of zero length.
...@@ -1044,6 +1044,20 @@ vect_build_slp_tree (vec_info *vinfo, ...@@ -1044,6 +1044,20 @@ vect_build_slp_tree (vec_info *vinfo,
tem, npermutes, &this_tree_size, tem, npermutes, &this_tree_size,
max_tree_size)) max_tree_size))
{ {
/* ... so if successful we can apply the operand swapping
to the GIMPLE IL. This is necessary because for example
vect_get_slp_defs uses operand indexes and thus expects
canonical operand order. This is also necessary even
if we end up building the operand from scalars as
we'll continue to process swapped operand two. */
for (j = 0; j < group_size; ++j)
if (!matches[j])
{
gimple *stmt = SLP_TREE_SCALAR_STMTS (*node)[j];
swap_ssa_operands (stmt, gimple_assign_rhs1_ptr (stmt),
gimple_assign_rhs2_ptr (stmt));
}
/* If we have all children of child built up from scalars then /* If we have all children of child built up from scalars then
just throw that away and build it up this node from scalars. */ just throw that away and build it up this node from scalars. */
if (!SLP_TREE_CHILDREN (child).is_empty ()) if (!SLP_TREE_CHILDREN (child).is_empty ())
...@@ -1073,17 +1087,6 @@ vect_build_slp_tree (vec_info *vinfo, ...@@ -1073,17 +1087,6 @@ vect_build_slp_tree (vec_info *vinfo,
} }
} }
/* ... so if successful we can apply the operand swapping
to the GIMPLE IL. This is necessary because for example
vect_get_slp_defs uses operand indexes and thus expects
canonical operand order. */
for (j = 0; j < group_size; ++j)
if (!matches[j])
{
gimple *stmt = SLP_TREE_SCALAR_STMTS (*node)[j];
swap_ssa_operands (stmt, gimple_assign_rhs1_ptr (stmt),
gimple_assign_rhs2_ptr (stmt));
}
oprnd_info->def_stmts = vNULL; oprnd_info->def_stmts = vNULL;
SLP_TREE_CHILDREN (*node).quick_push (child); SLP_TREE_CHILDREN (*node).quick_push (child);
continue; continue;
......
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