From 649caaad399d6f4865a4d0015a1ac76c3cce7eb0 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Tue, 15 Apr 2008 13:28:08 +0000 Subject: [PATCH] tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype. 2008-04-15 Richard Guenther * tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype. * tree-ssa-sccvn.c (vn_reference_lookup): New parameter maywalk. (visit_reference_op_load): Do walk vuse-vdef chains on vn_reference_lookup. (visit_reference_op_store): But do not here. * tree-vn.c (vn_lookup): Do not walk vuse-vdef chains on vn_reference_lookup. (vn_lookup_with_vuses): But do so here. From-SVN: r134314 --- gcc/ChangeLog | 11 +++++++++++ gcc/tree-ssa-sccvn.c | 7 ++++--- gcc/tree-ssa-sccvn.h | 2 +- gcc/tree-vn.c | 6 +++--- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 90a088f25fc..b00f53d6085 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2008-04-15 Richard Guenther + + * tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype. + * tree-ssa-sccvn.c (vn_reference_lookup): New parameter maywalk. + (visit_reference_op_load): Do walk vuse-vdef chains on + vn_reference_lookup. + (visit_reference_op_store): But do not here. + * tree-vn.c (vn_lookup): Do not walk vuse-vdef chains on + vn_reference_lookup. + (vn_lookup_with_vuses): But do so here. + 2008-04-14 Ian Lance Taylor * fold-const.c (fold_overflow_warning): Remove assertion. diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index b613b2ba21f..849eade1d21 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -735,7 +735,7 @@ vn_reference_lookup_1 (vn_reference_t vr) it does not exist in the hash table. */ tree -vn_reference_lookup (tree op, VEC (tree, gc) *vuses) +vn_reference_lookup (tree op, VEC (tree, gc) *vuses, bool maywalk) { struct vn_reference_s vr1; tree result, def_stmt; @@ -748,6 +748,7 @@ vn_reference_lookup (tree op, VEC (tree, gc) *vuses) /* If there is a single defining statement for all virtual uses, we can use that, following virtual use-def chains. */ if (!result + && maywalk && vr1.vuses && VEC_length (tree, vr1.vuses) >= 1 && !get_call_expr_in (op) @@ -1188,7 +1189,7 @@ static bool visit_reference_op_load (tree lhs, tree op, tree stmt) { bool changed = false; - tree result = vn_reference_lookup (op, shared_vuses_from_stmt (stmt)); + tree result = vn_reference_lookup (op, shared_vuses_from_stmt (stmt), true); /* We handle type-punning through unions by value-numbering based on offset and size of the access. Be prepared to handle a @@ -1294,7 +1295,7 @@ visit_reference_op_store (tree lhs, tree op, tree stmt) Otherwise, the vdefs for the store are used when inserting into the table, since the store generates a new memory state. */ - result = vn_reference_lookup (lhs, shared_vuses_from_stmt (stmt)); + result = vn_reference_lookup (lhs, shared_vuses_from_stmt (stmt), false); if (result) { diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h index 55d9831f504..ecc3297af42 100644 --- a/gcc/tree-ssa-sccvn.h +++ b/gcc/tree-ssa-sccvn.h @@ -59,7 +59,7 @@ void free_scc_vn (void); void switch_to_PRE_table (void); tree vn_nary_op_lookup (tree); void vn_nary_op_insert (tree, tree); -tree vn_reference_lookup (tree, VEC (tree, gc) *); +tree vn_reference_lookup (tree, VEC (tree, gc) *, bool); void vn_reference_insert (tree, tree, VEC (tree, gc) *); VEC (tree, gc) *shared_vuses_from_stmt (tree); VEC (tree, gc) *copy_vuses_from_stmt (tree); diff --git a/gcc/tree-vn.c b/gcc/tree-vn.c index 2122a7e432e..c09dfb76284 100644 --- a/gcc/tree-vn.c +++ b/gcc/tree-vn.c @@ -255,7 +255,7 @@ vn_lookup (tree expr) /* In the case of array-refs of constants, for example, we can end up with no vuses. */ case tcc_reference: - return vn_reference_lookup (expr, NULL); + return vn_reference_lookup (expr, NULL, false); break; /* It is possible to have CALL_EXPR with no vuses for things like "cos", and these will fall into vn_lookup. */ @@ -264,7 +264,7 @@ vn_lookup (tree expr) case tcc_expression: case tcc_declaration: if (TREE_CODE (expr) == CALL_EXPR || DECL_P (expr)) - return vn_reference_lookup (expr, NULL); + return vn_reference_lookup (expr, NULL, false); else if (TREE_CODE (expr) == SSA_NAME) return SSA_NAME_VALUE (expr); else if (TREE_CODE (expr) == ADDR_EXPR) @@ -308,7 +308,7 @@ vn_lookup_with_vuses (tree expr, VEC (tree, gc) *vuses) if (is_gimple_min_invariant (expr) || TREE_CODE (expr) == FIELD_DECL) return expr; - return vn_reference_lookup (expr, vuses); + return vn_reference_lookup (expr, vuses, true); } static tree -- 2.30.2