diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2018-07-31 14:25:15 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-07-31 14:25:15 +0000 |
commit | eca52fdd6c570658e417ab38d25e0874d0c9c044 (patch) | |
tree | 72c5368b077155f63ecbf0caa5294cd2e38e88dc | |
parent | a1824cfdcd12f2c928b2aa00278082c56e818497 (diff) | |
download | gcc-eca52fdd6c570658e417ab38d25e0874d0c9c044.zip gcc-eca52fdd6c570658e417ab38d25e0874d0c9c044.tar.gz gcc-eca52fdd6c570658e417ab38d25e0874d0c9c044.tar.bz2 |
[30/46] Use stmt_vec_infos rather than gimple stmts for worklists
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* tree-vect-loop.c (vect_analyze_scalar_cycles_1): Change the type
of the worklist from a vector of gimple stmts to a vector of
stmt_vec_infos.
* tree-vect-stmts.c (vect_mark_relevant, process_use)
(vect_mark_stmts_to_be_vectorized): Likewise
From-SVN: r263145
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 6 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 16 |
3 files changed, 18 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c697e70..55e3c2c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2018-07-31 Richard Sandiford <richard.sandiford@arm.com> + * tree-vect-loop.c (vect_analyze_scalar_cycles_1): Change the type + of the worklist from a vector of gimple stmts to a vector of + stmt_vec_infos. + * tree-vect-stmts.c (vect_mark_relevant, process_use) + (vect_mark_stmts_to_be_vectorized): Likewise + +2018-07-31 Richard Sandiford <richard.sandiford@arm.com> + * 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 diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 33e49c9..2f45d0d 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -474,7 +474,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, struct loop *loop) { basic_block bb = loop->header; tree init, step; - auto_vec<gimple *, 64> worklist; + auto_vec<stmt_vec_info, 64> worklist; gphi_iterator gsi; bool double_reduc; @@ -543,9 +543,9 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, struct loop *loop) /* Second - identify all reductions and nested cycles. */ while (worklist.length () > 0) { - gimple *phi = worklist.pop (); + stmt_vec_info stmt_vinfo = worklist.pop (); + gphi *phi = as_a <gphi *> (stmt_vinfo->stmt); tree def = PHI_RESULT (phi); - stmt_vec_info stmt_vinfo = vinfo_for_stmt (phi); if (dump_enabled_p ()) { diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 1a4cfd7..126ffb0 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -194,7 +194,7 @@ vect_clobber_variable (gimple *stmt, gimple_stmt_iterator *gsi, tree var) Mark STMT as "relevant for vectorization" and add it to WORKLIST. */ static void -vect_mark_relevant (vec<gimple *> *worklist, gimple *stmt, +vect_mark_relevant (vec<stmt_vec_info> *worklist, gimple *stmt, enum vect_relevant relevant, bool live_p) { stmt_vec_info stmt_info = vinfo_for_stmt (stmt); @@ -453,7 +453,7 @@ exist_non_indexing_operands_for_use_p (tree use, gimple *stmt) static bool process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo, - enum vect_relevant relevant, vec<gimple *> *worklist, + enum vect_relevant relevant, vec<stmt_vec_info> *worklist, bool force) { stmt_vec_info stmt_vinfo = vinfo_for_stmt (stmt); @@ -618,16 +618,14 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo); unsigned int nbbs = loop->num_nodes; gimple_stmt_iterator si; - gimple *stmt; unsigned int i; - stmt_vec_info stmt_vinfo; basic_block bb; bool live_p; enum vect_relevant relevant; DUMP_VECT_SCOPE ("vect_mark_stmts_to_be_vectorized"); - auto_vec<gimple *, 64> worklist; + auto_vec<stmt_vec_info, 64> worklist; /* 1. Init worklist. */ for (i = 0; i < nbbs; i++) @@ -665,17 +663,17 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo) use_operand_p use_p; ssa_op_iter iter; - stmt = worklist.pop (); + stmt_vec_info stmt_vinfo = worklist.pop (); if (dump_enabled_p ()) { - dump_printf_loc (MSG_NOTE, vect_location, "worklist: examine stmt: "); - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, stmt, 0); + dump_printf_loc (MSG_NOTE, vect_location, + "worklist: examine stmt: "); + dump_gimple_stmt (MSG_NOTE, TDF_SLIM, stmt_vinfo->stmt, 0); } /* Examine the USEs of STMT. For each USE, mark the stmt that defines it (DEF_STMT) as relevant/irrelevant according to the relevance property of STMT. */ - stmt_vinfo = vinfo_for_stmt (stmt); relevant = STMT_VINFO_RELEVANT (stmt_vinfo); /* Generally, the relevance property of STMT (in STMT_VINFO_RELEVANT) is |