public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Richard Biener <rguenth@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc r13-1459] Revert update-ssa assert in vectorizer
Date: Mon,  4 Jul 2022 12:58:02 +0000 (GMT)	[thread overview]
Message-ID: <20220704125802.76B8E38582A7@sourceware.org> (raw)

https://gcc.gnu.org/g:3769ad4ccea9589b3f7edaef901cb542aa10f49a

commit r13-1459-g3769ad4ccea9589b3f7edaef901cb542aa10f49a
Author: Richard Biener <rguenther@suse.de>
Date:   Mon Jul 4 13:53:24 2022 +0200

    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.

Diff:
---
 gcc/tree-vect-loop-manip.cc | 11 ++++++-----
 gcc/tree-vect-stmts.cc      |  3 +++
 gcc/tree-vectorizer.h       |  4 ++++
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index 7b7af944dba..5c31f0a8091 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 d6a6fe3fb38..72107afc883 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 642eb0aeb21..e5fdc9e0a14 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;


                 reply	other threads:[~2022-07-04 12:58 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220704125802.76B8E38582A7@sourceware.org \
    --to=rguenth@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).