aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-tail-merge.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2012-07-06 11:07:32 +0000
committerTom de Vries <vries@gcc.gnu.org>2012-07-06 11:07:32 +0000
commit4ec0a1988872cd6c9912ca941733f4df49cb2020 (patch)
tree59363a6bdd234708373380456b551c1ba94f47c8 /gcc/tree-ssa-tail-merge.c
parente81941b70ea127c83c7c5ac1754bb15925fea2b9 (diff)
downloadgcc-4ec0a1988872cd6c9912ca941733f4df49cb2020.zip
gcc-4ec0a1988872cd6c9912ca941733f4df49cb2020.tar.gz
gcc-4ec0a1988872cd6c9912ca941733f4df49cb2020.tar.bz2
re PR tree-optimization/52009 (Another missed tail merging opportunity)
2012-07-06 Tom de Vries <tom@codesourcery.com> PR tree-optimization/52009 * tree-ssa-tail-merge.c (gimple_equal_p): For GIMPLE_ASSIGN, compare value numbers of gimple_vdef. * tree-ssa-sccvn.h (vn_reference_insert): Add vdef parameter to prototype. * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle MODIFY_EXPR. (vn_reference_insert): Add and handle vdef parameter. (visit_reference_op_load): Add argument to vn_reference_insert call. (visit_reference_op_store): Find value number of vdef of store. Insert value number of vdef of store. From-SVN: r189321
Diffstat (limited to 'gcc/tree-ssa-tail-merge.c')
-rw-r--r--gcc/tree-ssa-tail-merge.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index da5878a..9ec3b8a 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -1119,6 +1119,14 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
case GIMPLE_ASSIGN:
lhs1 = gimple_get_lhs (s1);
lhs2 = gimple_get_lhs (s2);
+ if (gimple_vdef (s1))
+ {
+ if (vn_valueize (gimple_vdef (s1)) != vn_valueize (gimple_vdef (s2)))
+ return false;
+ if (TREE_CODE (lhs1) != SSA_NAME
+ && TREE_CODE (lhs2) != SSA_NAME)
+ return true;
+ }
return (TREE_CODE (lhs1) == SSA_NAME
&& TREE_CODE (lhs2) == SSA_NAME
&& vn_valueize (lhs1) == vn_valueize (lhs2));