aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-07-04 13:53:24 +0200
committerRichard Biener <rguenther@suse.de>2022-07-04 13:56:45 +0200
commit3769ad4ccea9589b3f7edaef901cb542aa10f49a (patch)
tree29cc23eb0ebd0a84e4032db3fc3396143bdfddea
parent683f11843974f0bdf42f79cdcbb0c2b43c7b81b0 (diff)
downloadgcc-3769ad4ccea9589b3f7edaef901cb542aa10f49a.zip
gcc-3769ad4ccea9589b3f7edaef901cb542aa10f49a.tar.gz
gcc-3769ad4ccea9589b3f7edaef901cb542aa10f49a.tar.bz2
Revert update-ssa assert in vectorizer
The following reverts the just added assert that virtual SSA does not need updating. It instead goes for a select whitelist of transforms known to be prone to difficulties with virtual SSA update. * tree-vect-loop-manip.cc (vect_do_peeling): Revert assert and update virtual SSA form again. Assert we do so for a known set of transforms only. * tree-vectorizer.h (vec_info::any_known_not_updated_vssa): New. * tree-vect-stmts.cc (vectorizable_load): When vectorizing using load-lanes allow virtual SSA update.
-rw-r--r--gcc/tree-vect-loop-manip.cc11
-rw-r--r--gcc/tree-vect-stmts.cc3
-rw-r--r--gcc/tree-vectorizer.h4
3 files changed, 13 insertions, 5 deletions
diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index 7b7af94..5c31f0a 100644
--- a/gcc/tree-vect-loop-manip.cc
+++ b/gcc/tree-vect-loop-manip.cc
@@ -2683,11 +2683,12 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
class loop *first_loop = loop;
bool irred_flag = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP;
- /* Historically we might have a queued need to update virtual SSA form.
- As we delete the update SSA machinery below after doing a regular
- incremental SSA update during loop copying make sure we don't
- lose that fact. */
- gcc_assert (!need_ssa_update_p (cfun));
+ /* We should not have to update virtual SSA form here but some
+ transforms involve creating new virtual definitions which makes
+ updating difficult. */
+ gcc_assert (!need_ssa_update_p (cfun)
+ || loop_vinfo->any_known_not_updated_vssa);
+ update_ssa (TODO_update_ssa_only_virtuals);
create_lcssa_for_virtual_phi (loop);
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index d6a6fe3..72107af 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -8979,6 +8979,9 @@ vectorizable_load (vec_info *vinfo,
dump_printf_loc (MSG_NOTE, vect_location,
"Vectorizing an unaligned access.\n");
+ if (memory_access_type == VMAT_LOAD_STORE_LANES)
+ vinfo->any_known_not_updated_vssa = true;
+
STMT_VINFO_TYPE (stmt_info) = load_vec_info_type;
vect_model_load_cost (vinfo, stmt_info, ncopies, vf, memory_access_type,
alignment_support_scheme, misalignment,
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 642eb0a..e5fdc9e 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -444,6 +444,10 @@ public:
/* Whether the above mapping is complete. */
bool stmt_vec_info_ro;
+ /* Whether we've done a transform we think OK to not update virtual
+ SSA form. */
+ bool any_known_not_updated_vssa;
+
/* The SLP graph. */
auto_vec<slp_instance> slp_instances;