+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>
* combine.c (change_zero_ext): Do not create a shift of zero length.
tem, npermutes, &this_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
just throw that away and build it up this node from scalars. */
if (!SLP_TREE_CHILDREN (child).is_empty ())
}
}
- /* ... 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;
SLP_TREE_CHILDREN (*node).quick_push (child);
continue;