diff options
author | Richard Biener <rguenther@suse.de> | 2020-02-24 15:36:40 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-05-08 19:47:30 +0200 |
commit | bc484e250990393e887f7239157cc85ce6fadcce (patch) | |
tree | e57aa7d95c2998da04902d8c0144a03dd2c7e999 /gcc/tree-vectorizer.h | |
parent | debfaee5d51e3c07bb88a971618de2baff35d9c0 (diff) | |
download | gcc-bc484e250990393e887f7239157cc85ce6fadcce.zip gcc-bc484e250990393e887f7239157cc85ce6fadcce.tar.gz gcc-bc484e250990393e887f7239157cc85ce6fadcce.tar.bz2 |
move permutation validity check
This delays the SLP permutation check to vectorizable_load and optimizes
permutations only after all SLP instances have been generated and the
vectorization factor is determined.
2020-05-08 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (vec_info::slp_loads): New.
(vect_optimize_slp): Declare.
* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Do
nothing when there are no loads.
(vect_gather_slp_loads): Gather loads into a vector.
(vect_supported_load_permutation_p): Remove.
(vect_analyze_slp_instance): Do not verify permutation
validity here.
(vect_analyze_slp): Optimize permutations of reductions
after all SLP instances have been gathered and gather
all loads.
(vect_optimize_slp): New function split out from
vect_supported_load_permutation_p. Elide some permutations.
(vect_slp_analyze_bb_1): Call vect_optimize_slp.
* tree-vect-loop.c (vect_analyze_loop_2): Likewise.
* tree-vect-stmts.c (vectorizable_load): Check whether
the load can be permuted. When generating code assert we can.
* gcc.dg/vect/bb-slp-pr68892.c: Adjust for not supported
SLP permutations becoming builds from scalars.
* gcc.dg/vect/bb-slp-pr78205.c: Likewise.
* gcc.dg/vect/bb-slp-34.c: Likewise.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index da6d37a..aa8bd33 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -324,8 +324,9 @@ public: /* The mapping of GIMPLE UID to stmt_vec_info. */ vec<stmt_vec_info> stmt_vec_infos; - /* All SLP instances. */ + /* The SLP graph. */ auto_vec<slp_instance> slp_instances; + auto_vec<slp_tree> slp_loads; /* Maps base addresses to an innermost_loop_behavior that gives the maximum known alignment for that base. */ @@ -1858,6 +1859,7 @@ extern void vect_schedule_slp (vec_info *); extern opt_result vect_analyze_slp (vec_info *, unsigned); extern bool vect_make_slp_decision (loop_vec_info); extern void vect_detect_hybrid_slp (loop_vec_info); +extern void vect_optimize_slp (vec_info *); extern void vect_get_slp_defs (vec_info *, slp_tree, vec<vec<tree> > *, unsigned n = -1U); extern bool vect_slp_bb (basic_block); |