aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-ssa-sccvn.c19
2 files changed, 16 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91a06ed..dcec935 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2018-08-29 Richard Biener <rguenther@suse.de>
+ * tree-ssa-sccvn.c (vuse_ssa_val): Return NULL for unvisited
+ virtual operands that are not default defs to honor region
+ boundaries.
+ (rpo_vn_valueize): Remove ineffective code here.
+
+2018-08-29 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/87132
* tree-ssa-alias.c (get_continuation_for_phi): Do not translate
when skipping defs reachable over backedges.
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index e3b9f1c..39ab4b2 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -474,12 +474,16 @@ vuse_ssa_val (tree x)
do
{
- tree tem = SSA_VAL (x);
- /* stmt walking can walk over a backedge and reach code we didn't
- value-number yet. */
- if (tem == VN_TOP)
+ if (SSA_NAME_IS_DEFAULT_DEF (x))
return x;
- x = tem;
+ vn_ssa_aux_t tem
+ = vn_ssa_aux_hash->find_with_hash (x, SSA_NAME_VERSION (x));
+ /* For region-based VN this makes walk_non_aliased_vuses stop walking
+ when we are about to look at a def outside of the region. */
+ if (!tem || !tem->visited)
+ return NULL_TREE;
+ gcc_assert (tem->valnum != VN_TOP);
+ x = tem->valnum;
}
while (SSA_NAME_IN_FREE_LIST (x));
@@ -5751,11 +5755,6 @@ rpo_vn_valueize (tree name)
if (TREE_CODE (name) == SSA_NAME)
{
vn_ssa_aux_t val = VN_INFO (name);
- /* For region-based VN this makes walk_non_aliased_vuses stop walking
- when we are about to look at a def outside of the region. */
- if (SSA_NAME_IS_VIRTUAL_OPERAND (name)
- && !val->visited)
- return NULL_TREE;
if (val)
{
tree tem = val->valnum;