From f47cda24579db16228140f8849e9c456093c92ab Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 16 Dec 2015 13:45:40 +0000 Subject: re PR tree-optimization/68861 (FAIL: libgomp.fortran/vla8.f90 -O3 -g execution test) 2015-12-16 Richard Biener PR tree-optimization/68861 * tree-vect-slp.c (vect_build_slp_tree): Properly handle duplicate stmts when applying swapping to stmts. From-SVN: r231689 --- gcc/tree-vect-slp.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'gcc/tree-vect-slp.c') diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index f57c859..6955e15 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1049,11 +1049,29 @@ vect_build_slp_tree (vec_info *vinfo, 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]; + gimple_set_plf (stmt, GF_PLF_1, false); + } + for (j = 0; j < group_size; ++j) + { + gimple *stmt = SLP_TREE_SCALAR_STMTS (*node)[j]; + if (!matches[j]) + { + /* Avoid swapping operands twice. */ + if (gimple_plf (stmt, GF_PLF_1)) + continue; + swap_ssa_operands (stmt, gimple_assign_rhs1_ptr (stmt), + gimple_assign_rhs2_ptr (stmt)); + gimple_set_plf (stmt, GF_PLF_1, true); + } + } + /* Verify we swap all duplicates or none. */ + if (flag_checking) + for (j = 0; j < group_size; ++j) { gimple *stmt = SLP_TREE_SCALAR_STMTS (*node)[j]; - swap_ssa_operands (stmt, gimple_assign_rhs1_ptr (stmt), - gimple_assign_rhs2_ptr (stmt)); + gcc_assert (gimple_plf (stmt, GF_PLF_1) == ! matches[j]); } /* If we have all children of child built up from scalars then -- cgit v1.1