diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2018-07-31 14:24:58 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-07-31 14:24:58 +0000 |
commit | a1824cfdcd12f2c928b2aa00278082c56e818497 (patch) | |
tree | 20848e71d439014d733475f0e453582eedbef5c0 /gcc/tree-vect-loop.c | |
parent | 86a91c0a7d39103bc26f6a9f6cd0b329c9027161 (diff) | |
download | gcc-a1824cfdcd12f2c928b2aa00278082c56e818497.zip gcc-a1824cfdcd12f2c928b2aa00278082c56e818497.tar.gz gcc-a1824cfdcd12f2c928b2aa00278082c56e818497.tar.bz2 |
[29/46] Use stmt_vec_info instead of gimple stmts internally (part 2)
This second part handles the less mechnical cases, i.e. those that don't
just involve swapping a gimple stmt for an existing stmt_vec_info.
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* tree-vect-loop.c (vect_analyze_loop_operations): Look up the
statement before passing it to vect_analyze_stmt.
(vect_create_epilog_for_reduction): Use a stmt_vec_info to walk
the chain of phi vector definitions. Track the exit phi via its
stmt_vec_info.
(vectorizable_reduction): Set cond_stmt_vinfo directly from the
STMT_VINFO_REDUC_DEF.
* tree-vect-slp.c (vect_get_place_in_interleaving_chain): Use
stmt_vec_infos to handle the statement chains.
(vect_get_slp_defs): Record the first statement in the node
using a stmt_vec_info.
* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Look up
statements here and pass their stmt_vec_info down to subroutines.
(vect_init_vector_1): Hoist call to vinfo_for_stmt and pass it
down to vect_finish_stmt_generation.
(vect_init_vector, vect_get_vec_defs, vect_finish_replace_stmt)
(vect_finish_stmt_generation): Call vinfo_for_stmt and pass
stmt_vec_infos to subroutines.
(vect_remove_stores): Use stmt_vec_infos to handle the statement
chains.
From-SVN: r263144
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 18201f5..33e49c9 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -1629,8 +1629,9 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo) { gimple *stmt = gsi_stmt (si); if (!gimple_clobber_p (stmt) - && !vect_analyze_stmt (stmt, &need_to_vectorize, NULL, NULL, - &cost_vec)) + && !vect_analyze_stmt (loop_vinfo->lookup_stmt (stmt), + &need_to_vectorize, + NULL, NULL, &cost_vec)) return false; } } /* bbs */ @@ -4832,11 +4833,11 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt, tree first_vect = PHI_RESULT (new_phis[0]); gassign *new_vec_stmt = NULL; vec_dest = vect_create_destination_var (scalar_dest, vectype); - gimple *next_phi = new_phis[0]; + stmt_vec_info next_phi_info = loop_vinfo->lookup_stmt (new_phis[0]); for (int k = 1; k < ncopies; ++k) { - next_phi = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (next_phi)); - tree second_vect = PHI_RESULT (next_phi); + next_phi_info = STMT_VINFO_RELATED_STMT (next_phi_info); + tree second_vect = PHI_RESULT (next_phi_info->stmt); tree tem = make_ssa_name (vec_dest, new_vec_stmt); new_vec_stmt = gimple_build_assign (tem, code, first_vect, second_vect); @@ -5573,11 +5574,12 @@ vect_finalize_reduction: else ratio = 1; + stmt_vec_info epilog_stmt_info = NULL; for (k = 0; k < group_size; k++) { if (k % ratio == 0) { - epilog_stmt = new_phis[k / ratio]; + epilog_stmt_info = loop_vinfo->lookup_stmt (new_phis[k / ratio]); reduction_phi_info = reduction_phis[k / ratio]; if (double_reduc) inner_phi = inner_phis[k / ratio]; @@ -5623,8 +5625,7 @@ vect_finalize_reduction: if (double_reduc) STMT_VINFO_VEC_STMT (exit_phi_vinfo) = inner_phi; else - STMT_VINFO_VEC_STMT (exit_phi_vinfo) - = vinfo_for_stmt (epilog_stmt); + STMT_VINFO_VEC_STMT (exit_phi_vinfo) = epilog_stmt_info; if (!double_reduc || STMT_VINFO_DEF_TYPE (exit_phi_vinfo) != vect_double_reduction_def) @@ -6070,7 +6071,7 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, optab optab; tree new_temp = NULL_TREE; enum vect_def_type dt, cond_reduc_dt = vect_unknown_def_type; - gimple *cond_reduc_def_stmt = NULL; + stmt_vec_info cond_stmt_vinfo = NULL; enum tree_code cond_reduc_op_code = ERROR_MARK; tree scalar_type; bool is_simple_use; @@ -6348,7 +6349,7 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, && is_nonwrapping_integer_induction (def_stmt_info, loop)) { cond_reduc_dt = dt; - cond_reduc_def_stmt = def_stmt_info; + cond_stmt_vinfo = def_stmt_info; } } } @@ -6454,7 +6455,6 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, } else if (cond_reduc_dt == vect_induction_def) { - stmt_vec_info cond_stmt_vinfo = vinfo_for_stmt (cond_reduc_def_stmt); tree base = STMT_VINFO_LOOP_PHI_EVOLUTION_BASE_UNCHANGED (cond_stmt_vinfo); tree step = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (cond_stmt_vinfo); |