public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-1981] Update virtual SSA form manually where easily possible in phiprop
@ 2023-06-20 10:51 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2023-06-20 10:51 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:85107abeb71bbf6edc7dfb7691527be104c11735

commit r14-1981-g85107abeb71bbf6edc7dfb7691527be104c11735
Author: Richard Biener <rguenther@suse.de>
Date:   Tue Jun 20 09:51:40 2023 +0200

    Update virtual SSA form manually where easily possible in phiprop
    
    This keeps virtual SSA form up-to-date in phiprop when easily possible.
    Only when we deal with aggregate copies the work would be too
    heavy-handed in general.
    
            * tree-ssa-phiprop.cc (phiprop_insert_phi): For simple loads
            keep the virtual SSA form up-to-date.

Diff:
---
 gcc/tree-ssa-phiprop.cc | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc
index 5dc505df420..21a349a25e2 100644
--- a/gcc/tree-ssa-phiprop.cc
+++ b/gcc/tree-ssa-phiprop.cc
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-iterator.h"
 #include "stor-layout.h"
 #include "tree-ssa-loop.h"
+#include "tree-cfg.h"
 
 /* This pass propagates indirect loads through the PHI node for its
    address to make the load source possibly non-addressable and to
@@ -153,6 +154,8 @@ phiprop_insert_phi (basic_block bb, gphi *phi, gimple *use_stmt,
       print_gimple_stmt (dump_file, use_stmt, 0);
     }
 
+  gphi *vphi = get_virtual_phi (bb);
+
   /* Add PHI arguments for each edge inserting loads of the
      addressable operands.  */
   FOR_EACH_EDGE (e, ei, bb->preds)
@@ -190,9 +193,20 @@ phiprop_insert_phi (basic_block bb, gphi *phi, gimple *use_stmt,
 	{
 	  tree rhs = gimple_assign_rhs1 (use_stmt);
 	  gcc_assert (TREE_CODE (old_arg) == ADDR_EXPR);
+	  tree vuse = NULL_TREE;
 	  if (TREE_CODE (res) == SSA_NAME)
-	    new_var = make_ssa_name (TREE_TYPE (rhs));
+	    {
+	      new_var = make_ssa_name (TREE_TYPE (rhs));
+	      if (vphi)
+		vuse = PHI_ARG_DEF_FROM_EDGE (vphi, e);
+	      else
+		vuse = gimple_vuse (use_stmt);
+	    }
 	  else
+	    /* For the aggregate copy case updating virtual operands
+	       we'd have to possibly insert a virtual PHI and we have
+	       to split the existing VUSE lifetime.  Leave that to
+	       the generic SSA updating.  */
 	    new_var = unshare_expr (res);
 	  if (!is_gimple_min_invariant (old_arg))
 	    old_arg = PHI_ARG_DEF_FROM_EDGE (phi, e);
@@ -203,6 +217,8 @@ phiprop_insert_phi (basic_block bb, gphi *phi, gimple *use_stmt,
 						  old_arg,
 						  TREE_OPERAND (rhs, 1)));
 	  gimple_set_location (tmp, locus);
+	  if (vuse)
+	    gimple_set_vuse (tmp, vuse);
 
 	  gsi_insert_on_edge (e, tmp);
 	  update_stmt (tmp);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-06-20 10:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-20 10:51 [gcc r14-1981] Update virtual SSA form manually where easily possible in phiprop Richard Biener

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).