From 16edaeb8a6b1cd72b2eedfe8cac684ac3f4785c2 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 31 Jul 2018 14:22:17 +0000 Subject: [15/46] Make SLP_TREE_VEC_STMTS a vec This patch changes SLP_TREE_VEC_STMTS from a vec to a vec. This involved making the same change to the phis vector in vectorizable_reduction, since SLP_TREE_VEC_STMTS is spliced into it here: phis.splice (SLP_TREE_VEC_STMTS (slp_node_instance->reduc_phis)); 2018-07-31 Richard Sandiford gcc/ * tree-vectorizer.h (_slp_tree::vec_stmts): Change from a vec to a vec. * tree-vect-loop.c (vect_create_epilog_for_reduction): Change the reduction_phis argument from a vec to a vec. (vectorizable_reduction): Likewise the phis local variable that is passed to vect_create_epilog_for_reduction. Update for new type of SLP_TREE_VEC_STMTS. (vectorizable_induction): Update for new type of SLP_TREE_VEC_STMTS. (vectorizable_live_operation): Likewise. * tree-vect-slp.c (vect_get_slp_vect_defs): Likewise. (vect_transform_slp_perm_load, vect_schedule_slp_instance): Likewise. From-SVN: r263130 --- gcc/tree-vect-slp.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'gcc/tree-vect-slp.c') diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index c7af18b..c3d72ec 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -3557,18 +3557,18 @@ static void vect_get_slp_vect_defs (slp_tree slp_node, vec *vec_oprnds) { tree vec_oprnd; - gimple *vec_def_stmt; + stmt_vec_info vec_def_stmt_info; unsigned int i; gcc_assert (SLP_TREE_VEC_STMTS (slp_node).exists ()); - FOR_EACH_VEC_ELT (SLP_TREE_VEC_STMTS (slp_node), i, vec_def_stmt) + FOR_EACH_VEC_ELT (SLP_TREE_VEC_STMTS (slp_node), i, vec_def_stmt_info) { - gcc_assert (vec_def_stmt); - if (gimple_code (vec_def_stmt) == GIMPLE_PHI) - vec_oprnd = gimple_phi_result (vec_def_stmt); + gcc_assert (vec_def_stmt_info); + if (gphi *vec_def_phi = dyn_cast (vec_def_stmt_info->stmt)) + vec_oprnd = gimple_phi_result (vec_def_phi); else - vec_oprnd = gimple_get_lhs (vec_def_stmt); + vec_oprnd = gimple_get_lhs (vec_def_stmt_info->stmt); vec_oprnds->quick_push (vec_oprnd); } } @@ -3687,6 +3687,7 @@ vect_transform_slp_perm_load (slp_tree node, vec dr_chain, { gimple *stmt = SLP_TREE_SCALAR_STMTS (node)[0]; stmt_vec_info stmt_info = vinfo_for_stmt (stmt); + vec_info *vinfo = stmt_info->vinfo; tree mask_element_type = NULL_TREE, mask_type; int vec_index = 0; tree vectype = STMT_VINFO_VECTYPE (stmt_info); @@ -3827,26 +3828,28 @@ vect_transform_slp_perm_load (slp_tree node, vec dr_chain, /* Generate the permute statement if necessary. */ tree first_vec = dr_chain[first_vec_index]; tree second_vec = dr_chain[second_vec_index]; - gimple *perm_stmt; + stmt_vec_info perm_stmt_info; if (! noop_p) { tree perm_dest = vect_create_destination_var (gimple_assign_lhs (stmt), vectype); perm_dest = make_ssa_name (perm_dest); - perm_stmt = gimple_build_assign (perm_dest, - VEC_PERM_EXPR, - first_vec, second_vec, - mask_vec); - vect_finish_stmt_generation (stmt, perm_stmt, gsi); + gassign *perm_stmt + = gimple_build_assign (perm_dest, VEC_PERM_EXPR, + first_vec, second_vec, + mask_vec); + perm_stmt_info + = vect_finish_stmt_generation (stmt, perm_stmt, gsi); } else /* If mask was NULL_TREE generate the requested identity transform. */ - perm_stmt = SSA_NAME_DEF_STMT (first_vec); + perm_stmt_info = vinfo->lookup_def (first_vec); /* Store the vector statement in NODE. */ - SLP_TREE_VEC_STMTS (node)[vect_stmts_counter++] = perm_stmt; + SLP_TREE_VEC_STMTS (node)[vect_stmts_counter++] + = perm_stmt_info; } index = 0; @@ -3948,8 +3951,8 @@ vect_schedule_slp_instance (slp_tree node, slp_instance instance, mask.quick_push (0); if (ocode != ERROR_MARK) { - vec v0; - vec v1; + vec v0; + vec v1; unsigned j; tree tmask = NULL_TREE; vect_transform_stmt (stmt, &si, &grouped_store, node, instance); @@ -3990,10 +3993,11 @@ vect_schedule_slp_instance (slp_tree node, slp_instance instance, gimple *vstmt; vstmt = gimple_build_assign (make_ssa_name (vectype), VEC_PERM_EXPR, - gimple_assign_lhs (v0[j]), - gimple_assign_lhs (v1[j]), tmask); - vect_finish_stmt_generation (stmt, vstmt, &si); - SLP_TREE_VEC_STMTS (node).quick_push (vstmt); + gimple_assign_lhs (v0[j]->stmt), + gimple_assign_lhs (v1[j]->stmt), + tmask); + SLP_TREE_VEC_STMTS (node).quick_push + (vect_finish_stmt_generation (stmt, vstmt, &si)); } v0.release (); v1.release (); -- cgit v1.1