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