aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorKewen Lin <linkw@gcc.gnu.org>2020-07-29 14:38:39 +0800
committerKewen Lin <linkw@linux.ibm.com>2020-08-06 00:56:52 -0500
commitdfdf9085d31a1be25cd434328b0ba466c397edb2 (patch)
tree50358b2e48753081ce6f79663300fa576ea72af5 /gcc/tree-vect-stmts.c
parentea858d09571f3f6dcce92d8bfaf077f9d44c6ad6 (diff)
downloadgcc-dfdf9085d31a1be25cd434328b0ba466c397edb2.zip
gcc-dfdf9085d31a1be25cd434328b0ba466c397edb2.tar.gz
gcc-dfdf9085d31a1be25cd434328b0ba466c397edb2.tar.bz2
vect/rs6000: Support vector with length cost modeling
This patch is to add the cost modeling for vector with length, it mainly follows what we generate for vector with length in functions vect_set_loop_controls_directly and vect_gen_len at the worst case. For Power, the length is expected to be in bits 0-7 (high bits), we have to model the cost of shifting bits, which is implemented in adjust_vect_cost_per_loop. Bootstrapped/regtested on powerpc64le-linux-gnu (P9) with explicit param vect-partial-vector-usage=1. gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_adjust_vect_cost_per_loop): New function. (rs6000_finish_cost): Call rs6000_adjust_vect_cost_per_loop. * tree-vect-loop.c (vect_estimate_min_profitable_iters): Add cost modeling for vector with length. (vect_rgroup_iv_might_wrap_p): New function, factored out from... * tree-vect-loop-manip.c (vect_set_loop_controls_directly): ...this. Update function comment. * tree-vect-stmts.c (vect_gen_len): Update function comment. * tree-vectorizer.h (vect_rgroup_iv_might_wrap_p): New declare.
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 7870b97..65e30ba 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -12109,7 +12109,11 @@ vect_get_vector_types_for_stmt (vec_info *vinfo, stmt_vec_info stmt_info,
min_of_start_and_end = min (START_INDEX, END_INDEX);
left_len = END_INDEX - min_of_start_and_end;
rhs = min (left_len, LEN_LIMIT);
- LEN = rhs; */
+ LEN = rhs;
+
+ Note: the cost of the code generated by this function is modeled
+ by vect_estimate_min_profitable_iters, so changes here may need
+ corresponding changes there. */
gimple_seq
vect_gen_len (tree len, tree start_index, tree end_index, tree len_limit)