diff options
author | Richard Guenther <rguenther@suse.de> | 2010-11-16 12:57:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-11-16 12:57:34 +0000 |
commit | 2262707f736b97903782f843e28965f313b60c44 (patch) | |
tree | da69715b8434eb8b7e1d475123a31e7af3ad34de /gcc | |
parent | 05613877bda9a29d72c092b33a92d062f1f9ece4 (diff) | |
download | gcc-2262707f736b97903782f843e28965f313b60c44.zip gcc-2262707f736b97903782f843e28965f313b60c44.tar.gz gcc-2262707f736b97903782f843e28965f313b60c44.tar.bz2 |
tree-ssa-sccvn.c (visit_unary_op): Rename to ...
2010-11-16 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (visit_unary_op): Rename to ...
(visit_nary_op): ... this.
(visit_binary_op): Remove.
(visit_use): Adjust and handle GIMPLE_TERNARY_RHS.
* gcc.dg/tree-ssa/ssa-fre-30.c: New testcase.
From-SVN: r166795
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c | 12 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 41 |
4 files changed, 31 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f68583..3329ae3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2010-11-16 Richard Guenther <rguenther@suse.de> + * tree-ssa-sccvn.c (visit_unary_op): Rename to ... + (visit_nary_op): ... this. + (visit_binary_op): Remove. + (visit_use): Adjust and handle GIMPLE_TERNARY_RHS. + +2010-11-16 Richard Guenther <rguenther@suse.de> + PR middle-end/45172 * tree-eh.c (cleanup_empty_eh_unsplit): Avoid creating duplicate edges. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b2ee19c..3ef9ee0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2010-11-16 Richard Guenther <rguenther@suse.de> + * gcc.dg/tree-ssa/ssa-fre-30.c: New testcase. + +2010-11-16 Richard Guenther <rguenther@suse.de> + PR middle-end/45172 * gfortran.dg/gomp/pr45172.f90: New testcase. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c new file mode 100644 index 0000000..bfbef80 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ffinite-math-only -fdump-tree-optimized" } */ + +float foo(float x, float y, float z) +{ + float a = __builtin_fmaf (x, y, z); + float b = __builtin_fmaf (x, y, z); + return a - b; +} + +/* { dg-final { scan-tree-dump "return 0" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 994e945..01b66ae 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2167,41 +2167,17 @@ visit_copy (tree lhs, tree rhs) return set_ssa_val_to (lhs, rhs); } -/* Visit a unary operator RHS, value number it, and return true if the +/* Visit a nary operator RHS, value number it, and return true if the value number of LHS has changed as a result. */ static bool -visit_unary_op (tree lhs, gimple stmt) +visit_nary_op (tree lhs, gimple stmt) { bool changed = false; tree result = vn_nary_op_lookup_stmt (stmt, NULL); if (result) - { - changed = set_ssa_val_to (lhs, result); - } - else - { - changed = set_ssa_val_to (lhs, lhs); - vn_nary_op_insert_stmt (stmt, lhs); - } - - return changed; -} - -/* Visit a binary operator RHS, value number it, and return true if the - value number of LHS has changed as a result. */ - -static bool -visit_binary_op (tree lhs, gimple stmt) -{ - bool changed = false; - tree result = vn_nary_op_lookup_stmt (stmt, NULL); - - if (result) - { - changed = set_ssa_val_to (lhs, result); - } + changed = set_ssa_val_to (lhs, result); else { changed = set_ssa_val_to (lhs, lhs); @@ -2909,10 +2885,9 @@ visit_use (tree use) switch (get_gimple_rhs_class (gimple_assign_rhs_code (stmt))) { case GIMPLE_UNARY_RHS: - changed = visit_unary_op (lhs, stmt); - break; case GIMPLE_BINARY_RHS: - changed = visit_binary_op (lhs, stmt); + case GIMPLE_TERNARY_RHS: + changed = visit_nary_op (lhs, stmt); break; case GIMPLE_SINGLE_RHS: switch (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt))) @@ -2921,10 +2896,10 @@ visit_use (tree use) /* VOP-less references can go through unary case. */ if ((gimple_assign_rhs_code (stmt) == REALPART_EXPR || gimple_assign_rhs_code (stmt) == IMAGPART_EXPR - || gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR ) + || gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR) && TREE_CODE (TREE_OPERAND (gimple_assign_rhs1 (stmt), 0)) == SSA_NAME) { - changed = visit_unary_op (lhs, stmt); + changed = visit_nary_op (lhs, stmt); break; } /* Fallthrough. */ @@ -2935,7 +2910,7 @@ visit_use (tree use) case tcc_expression: if (gimple_assign_rhs_code (stmt) == ADDR_EXPR) { - changed = visit_unary_op (lhs, stmt); + changed = visit_nary_op (lhs, stmt); break; } /* Fallthrough. */ |