diff options
author | Richard Biener <rguenther@suse.de> | 2023-07-24 12:14:26 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-07-24 15:32:00 +0200 |
commit | 2b074dc7bdf4402c1e3e44f247e27f3ef51bd8e4 (patch) | |
tree | e3314c54ccfb9c37c61b0d4eedca1daea5b5e620 /gcc/tree-vect-loop.cc | |
parent | 8547c451aac1c1f0178cf0914243b20fa0dde0c3 (diff) | |
download | gcc-2b074dc7bdf4402c1e3e44f247e27f3ef51bd8e4.zip gcc-2b074dc7bdf4402c1e3e44f247e27f3ef51bd8e4.tar.gz gcc-2b074dc7bdf4402c1e3e44f247e27f3ef51bd8e4.tar.bz2 |
Remove SLP_TREE_VEC_STMTS in favor of SLP_TREE_VEC_DEFS
The following unifies SLP_TREE_VEC_STMTS into SLP_TREE_VEC_DEFS
which can handle all cases we need.
* tree-vectorizer.h (_slp_tree::push_vec_def): Add.
(_slp_tree::vec_stmts): Remove.
(SLP_TREE_VEC_STMTS): Remove.
* tree-vect-slp.cc (_slp_tree::push_vec_def): Define.
(_slp_tree::_slp_tree): Adjust.
(_slp_tree::~_slp_tree): Likewise.
(vect_get_slp_vect_def): Simplify.
(vect_get_slp_defs): Likewise.
(vect_transform_slp_perm_load_1): Adjust.
(vect_add_slp_permutation): Likewise.
(vect_schedule_slp_node): Likewise.
(vectorize_slp_instance_root_stmt): Likewise.
(vect_schedule_scc): Likewise.
* tree-vect-stmts.cc (vectorizable_bswap): Use push_vec_def.
(vectorizable_call): Likewise.
(vectorizable_call): Likewise.
(vect_create_vectorized_demotion_stmts): Likewise.
(vectorizable_conversion): Likewise.
(vectorizable_assignment): Likewise.
(vectorizable_shift): Likewise.
(vectorizable_operation): Likewise.
(vectorizable_load): Likewise.
(vectorizable_condition): Likewise.
(vectorizable_comparison): Likewise.
* tree-vect-loop.cc (vect_create_epilog_for_reduction): Adjust.
(vectorize_fold_left_reduction): Use push_vec_def.
(vect_transform_reduction): Likewise.
(vect_transform_cycle_phi): Likewise.
(vectorizable_lc_phi): Likewise.
(vectorizable_phi): Likewise.
(vectorizable_recurr): Likewise.
(vectorizable_induction): Likewise.
(vectorizable_live_operation): Likewise.
Diffstat (limited to 'gcc/tree-vect-loop.cc')
-rw-r--r-- | gcc/tree-vect-loop.cc | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index ac86b09..2561552 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -5847,7 +5847,7 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, int ncopies; if (slp_node) { - vec_num = SLP_TREE_VEC_STMTS (slp_node_instance->reduc_phis).length (); + vec_num = SLP_TREE_VEC_DEFS (slp_node_instance->reduc_phis).length (); ncopies = 1; } else @@ -6990,7 +6990,7 @@ vectorize_fold_left_reduction (loop_vec_info loop_vinfo, new_stmt, gsi); if (slp_node) - SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt); + slp_node->push_vec_def (new_stmt); else { STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_stmt); @@ -8292,7 +8292,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, } if (slp_node) - SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt); + slp_node->push_vec_def (new_stmt); else if (single_defuse_cycle && i < ncopies - 1) { @@ -8578,7 +8578,7 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo, /* The loop-latch arg is set in epilogue processing. */ if (slp_node) - SLP_TREE_VEC_STMTS (slp_node).quick_push (new_phi); + slp_node->push_vec_def (new_phi); else { if (j == 0) @@ -8639,7 +8639,7 @@ vectorizable_lc_phi (loop_vec_info loop_vinfo, gphi *new_phi = create_phi_node (vec_dest, bb); add_phi_arg (new_phi, vec_oprnds[i], e, UNKNOWN_LOCATION); if (slp_node) - SLP_TREE_VEC_STMTS (slp_node).quick_push (new_phi); + slp_node->push_vec_def (new_phi); else STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_phi); } @@ -8719,7 +8719,7 @@ vectorizable_phi (vec_info *, /* Skip not yet vectorized defs. */ if (SLP_TREE_DEF_TYPE (child) == vect_internal_def - && SLP_TREE_VEC_STMTS (child).is_empty ()) + && SLP_TREE_VEC_DEFS (child).is_empty ()) continue; auto_vec<tree> vec_oprnds; @@ -8731,7 +8731,7 @@ vectorizable_phi (vec_info *, { /* Create the vectorized LC PHI node. */ new_phis.quick_push (create_phi_node (vec_dest, bb)); - SLP_TREE_VEC_STMTS (slp_node).quick_push (new_phis[j]); + slp_node->push_vec_def (new_phis[j]); } } edge e = gimple_phi_arg_edge (as_a <gphi *> (stmt_info->stmt), i); @@ -8912,7 +8912,7 @@ vectorizable_recurr (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, vect_finish_stmt_generation (loop_vinfo, stmt_info, vperm, &gsi2); if (slp_node) - SLP_TREE_VEC_STMTS (slp_node).quick_push (vperm); + slp_node->push_vec_def (vperm); else STMT_VINFO_VEC_STMTS (stmt_info).safe_push (vperm); } @@ -9868,7 +9868,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, /* Set the arguments of the phi node: */ add_phi_arg (induction_phi, vec_init, pe, UNKNOWN_LOCATION); - SLP_TREE_VEC_STMTS (slp_node).quick_push (induction_phi); + slp_node->push_vec_def (induction_phi); } if (!nested_in_vect_loop) { @@ -9878,8 +9878,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, vec_steps.reserve (nivs-ivn); for (; ivn < nivs; ++ivn) { - SLP_TREE_VEC_STMTS (slp_node) - .quick_push (SLP_TREE_VEC_STMTS (slp_node)[0]); + slp_node->push_vec_def (SLP_TREE_VEC_DEFS (slp_node)[0]); vec_steps.quick_push (vec_steps[0]); } } @@ -9898,7 +9897,8 @@ vectorizable_induction (loop_vec_info loop_vinfo, : build_int_cstu (stept, vfp)); for (; ivn < nvects; ++ivn) { - gimple *iv = SLP_TREE_VEC_STMTS (slp_node)[ivn - nivs]; + gimple *iv + = SSA_NAME_DEF_STMT (SLP_TREE_VEC_DEFS (slp_node)[ivn - nivs]); tree def = gimple_get_lhs (iv); if (ivn < 2*nivs) vec_steps[ivn - nivs] @@ -9916,8 +9916,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, gimple_stmt_iterator tgsi = gsi_for_stmt (iv); gsi_insert_seq_after (&tgsi, stmts, GSI_CONTINUE_LINKING); } - SLP_TREE_VEC_STMTS (slp_node) - .quick_push (SSA_NAME_DEF_STMT (def)); + slp_node->push_vec_def (def); } } @@ -10343,8 +10342,8 @@ vectorizable_live_operation (vec_info *vinfo, gcc_assert (!loop_vinfo || !LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)); /* Get the correct slp vectorized stmt. */ - vec_stmt = SLP_TREE_VEC_STMTS (slp_node)[vec_entry]; - vec_lhs = gimple_get_lhs (vec_stmt); + vec_lhs = SLP_TREE_VEC_DEFS (slp_node)[vec_entry]; + vec_stmt = SSA_NAME_DEF_STMT (vec_lhs); /* Get entry to use. */ bitstart = bitsize_int (vec_index); |