diff options
author | Richard Biener <rguenther@suse.de> | 2021-06-18 14:07:00 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-06-21 15:01:52 +0200 |
commit | 0ad9c7087ef3904da89f2db6007b6d28b116087f (patch) | |
tree | f4b7d5a5628d791a2c8ee0a3139cbfc38a046328 /gcc/tree-vectorizer.h | |
parent | 21761d2b2b01f6cef4287c646845f6b3006546aa (diff) | |
download | gcc-0ad9c7087ef3904da89f2db6007b6d28b116087f.zip gcc-0ad9c7087ef3904da89f2db6007b6d28b116087f.tar.gz gcc-0ad9c7087ef3904da89f2db6007b6d28b116087f.tar.bz2 |
tree-optimization/101120 - fix compile-time issue with SLP groups
This places two hacks to avoid an old compile-time issue when
vectorizing large permuted SLP groups with gaps where we end up
emitting loads and IV adjustments for the gap as well and those
have quite a high cost until they are eventually cleaned up.
The first hack is to fold the auto-inc style IV updates early
in the vectorizer rather than in the next forwprop pass which
shortens the SSA use-def chains of the used IV.
The second hack is to remove the unused loads after we've picked
all that we possibly use.
2021-06-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/101120
* tree-vect-data-refs.c (bump_vector_ptr): Fold the
built increment.
* tree-vect-slp.c (vect_transform_slp_perm_load): Add
DR chain DCE capability.
* tree-vectorizer.h (vect_transform_slp_perm_load): Adjust.
* tree-vect-stmts.c (vectorizable_load): Remove unused
loads in the DR chain for SLP.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 04c20f8..5c71fbc 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2012,7 +2012,7 @@ extern void vect_free_slp_instance (slp_instance); extern bool vect_transform_slp_perm_load (vec_info *, slp_tree, vec<tree>, gimple_stmt_iterator *, poly_uint64, bool, unsigned *, - unsigned * = nullptr); + unsigned * = nullptr, bool = false); extern bool vect_slp_analyze_operations (vec_info *); extern void vect_schedule_slp (vec_info *, vec<slp_instance>); extern opt_result vect_analyze_slp (vec_info *, unsigned); |