diff options
author | Richard Guenther <rguenther@suse.de> | 2008-02-29 14:01:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-02-29 14:01:09 +0000 |
commit | 5be891a43c47f0c8185ef65bdc9bc47f83297e2d (patch) | |
tree | da42da694c0bb4e404d6d58f8d105fa4104a0958 /gcc | |
parent | 0a5fe1104e1a3d5a582248a434777951c0199837 (diff) | |
download | gcc-5be891a43c47f0c8185ef65bdc9bc47f83297e2d.zip gcc-5be891a43c47f0c8185ef65bdc9bc47f83297e2d.tar.gz gcc-5be891a43c47f0c8185ef65bdc9bc47f83297e2d.tar.bz2 |
tree-ssa-pre.c (get_sccvn_value): Create missing VNs via vn_lookup_or_add.
2008-02-29 Richard Guenther <rguenther@suse.de>
* tree-ssa-pre.c (get_sccvn_value): Create missing VNs via
vn_lookup_or_add.
* tree-ssa-sccnv.c (visit_reference_op_store): Use the rhs
value for comparing for a store match.
(simplify_unary_expression): Do nothing for SSA_NAMEs.
(try_to_simplify): Do not do a full-blown reference lookup.
From-SVN: r132768
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 23 |
3 files changed, 22 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4563e52..5094c33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-02-29 Richard Guenther <rguenther@suse.de> + + * tree-ssa-pre.c (get_sccvn_value): Create missing VNs via + vn_lookup_or_add. + * tree-ssa-sccnv.c (visit_reference_op_store): Use the rhs + value for comparing for a store match. + (simplify_unary_expression): Do nothing for SSA_NAMEs. + (try_to_simplify): Do not do a full-blown reference lookup. + 2008-02-29 Kaz Kojima <kkojima@gcc.gnu.org> * config/sh/sh.c (sh_scalar_mode_supported_p): New function. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 6a06b2a..a488257 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3256,7 +3256,9 @@ get_sccvn_value (tree name) !ZERO_SSA_OPERANDS (defstmt2, SSA_OP_ALL_VIRTUALS)) gcc_assert (defstmt); } - valvh = vn_lookup_or_add_with_stmt (val, defstmt); + /* We lookup with the LHS, so do not use vn_lookup_or_add_with_stmt + here, as that will result in useless reference lookups. */ + valvh = vn_lookup_or_add (val); } if (dump_file && (dump_flags & TDF_DETAILS)) diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 2030a81..929354e 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1231,6 +1231,8 @@ visit_reference_op_store (tree lhs, tree op, tree stmt) { if (TREE_CODE (result) == SSA_NAME) result = SSA_VAL (result); + if (TREE_CODE (op) == SSA_NAME) + op = SSA_VAL (op); resultsame = expressions_equal_p (result, op); } @@ -1527,13 +1529,10 @@ simplify_unary_expression (tree rhs) static tree try_to_simplify (tree stmt, tree rhs) { + /* For stores we can end up simplifying a SSA_NAME rhs. Just return + in this case, there is no point in doing extra work. */ if (TREE_CODE (rhs) == SSA_NAME) - { - if (is_gimple_min_invariant (SSA_VAL (rhs))) - return SSA_VAL (rhs); - else if (VN_INFO (rhs)->has_constants) - return VN_INFO (rhs)->expr; - } + return rhs; else { switch (TREE_CODE_CLASS (TREE_CODE (rhs))) @@ -1550,13 +1549,11 @@ try_to_simplify (tree stmt, tree rhs) /* Fallthrough. */ case tcc_reference: - { - tree result = vn_reference_lookup (rhs, - shared_vuses_from_stmt (stmt)); - if (result) - return result; - } - /* Fallthrough for some codes. */ + /* Do not do full-blown reference lookup here. + ??? But like for tcc_declaration, we should simplify + from constant initializers. */ + + /* Fallthrough for some codes that can operate on registers. */ if (!(TREE_CODE (rhs) == REALPART_EXPR || TREE_CODE (rhs) == IMAGPART_EXPR)) break; |