diff options
author | Richard Biener <rguenther@suse.de> | 2014-11-13 08:53:23 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-11-13 08:53:23 +0000 |
commit | 96994de0451510e3c9904668e79b554bd9163e89 (patch) | |
tree | 21bf9c86267ebd593557ecab873e1b2f984da374 /gcc/tree-ssa-forwprop.c | |
parent | 83633539b751a8ef90378ccd26b73df03c3fe40f (diff) | |
download | gcc-96994de0451510e3c9904668e79b554bd9163e89.zip gcc-96994de0451510e3c9904668e79b554bd9163e89.tar.gz gcc-96994de0451510e3c9904668e79b554bd9163e89.tar.bz2 |
match.pd: Implement conditional expression patterns.
2014-11-13 Richard Biener <rguenther@suse.de>
* match.pd: Implement conditional expression patterns.
* tree-ssa-forwprop.c (forward_propagate_into_cond): Remove
them here.
(combine_cond_exprs): Remove.
(pass_forwprop::execute): Do not call combine_cond_exprs.
* fold-const.c (fold_ternary_loc): Remove patterns here.
(pedantic_omit_one_operand_loc): Remove.
From-SVN: r217465
Diffstat (limited to 'gcc/tree-ssa-forwprop.c')
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 75 |
1 files changed, 2 insertions, 73 deletions
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index b47f7e2..feb8253 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -617,7 +617,6 @@ forward_propagate_into_cond (gimple_stmt_iterator *gsi_p) tree tmp = NULL_TREE; tree cond = gimple_assign_rhs1 (stmt); enum tree_code code = gimple_assign_rhs_code (stmt); - bool swap = false; /* We can do tree combining on SSA_NAME and comparison expressions. */ if (COMPARISON_CLASS_P (cond)) @@ -640,15 +639,6 @@ forward_propagate_into_cond (gimple_stmt_iterator *gsi_p) TREE_TYPE (cond), gimple_assign_rhs1 (def_stmt), gimple_assign_rhs2 (def_stmt)); - else if (code == COND_EXPR - && ((def_code == BIT_NOT_EXPR - && TYPE_PRECISION (TREE_TYPE (cond)) == 1) - || (def_code == BIT_XOR_EXPR - && integer_onep (gimple_assign_rhs2 (def_stmt))))) - { - tmp = gimple_assign_rhs1 (def_stmt); - swap = true; - } } if (tmp @@ -669,15 +659,7 @@ forward_propagate_into_cond (gimple_stmt_iterator *gsi_p) else if (integer_zerop (tmp)) gimple_assign_set_rhs_from_tree (gsi_p, gimple_assign_rhs3 (stmt)); else - { - gimple_assign_set_rhs1 (stmt, unshare_expr (tmp)); - if (swap) - { - tree t = gimple_assign_rhs2 (stmt); - gimple_assign_set_rhs2 (stmt, gimple_assign_rhs3 (stmt)); - gimple_assign_set_rhs3 (stmt, t); - } - } + gimple_assign_set_rhs1 (stmt, unshare_expr (tmp)); stmt = gsi_stmt (*gsi_p); update_stmt (stmt); @@ -687,58 +669,6 @@ forward_propagate_into_cond (gimple_stmt_iterator *gsi_p) return 0; } -/* Propagate from the ssa name definition statements of COND_EXPR - values in the rhs of statement STMT into the conditional arms - if that simplifies it. - Returns true if the stmt was changed. */ - -static bool -combine_cond_exprs (gimple_stmt_iterator *gsi_p) -{ - gimple stmt = gsi_stmt (*gsi_p); - tree cond, val1, val2; - bool changed = false; - - cond = gimple_assign_rhs1 (stmt); - val1 = gimple_assign_rhs2 (stmt); - if (TREE_CODE (val1) == SSA_NAME) - { - gimple def_stmt = SSA_NAME_DEF_STMT (val1); - if (is_gimple_assign (def_stmt) - && gimple_assign_rhs_code (def_stmt) == gimple_assign_rhs_code (stmt) - && operand_equal_p (gimple_assign_rhs1 (def_stmt), cond, 0)) - { - val1 = unshare_expr (gimple_assign_rhs2 (def_stmt)); - gimple_assign_set_rhs2 (stmt, val1); - changed = true; - } - } - val2 = gimple_assign_rhs3 (stmt); - if (TREE_CODE (val2) == SSA_NAME) - { - gimple def_stmt = SSA_NAME_DEF_STMT (val2); - if (is_gimple_assign (def_stmt) - && gimple_assign_rhs_code (def_stmt) == gimple_assign_rhs_code (stmt) - && operand_equal_p (gimple_assign_rhs1 (def_stmt), cond, 0)) - { - val2 = unshare_expr (gimple_assign_rhs3 (def_stmt)); - gimple_assign_set_rhs3 (stmt, val2); - changed = true; - } - } - if (operand_equal_p (val1, val2, 0)) - { - gimple_assign_set_rhs_from_tree (gsi_p, val1); - stmt = gsi_stmt (*gsi_p); - changed = true; - } - - if (changed) - update_stmt (stmt); - - return changed; -} - /* We've just substituted an ADDR_EXPR into stmt. Update all the relevant data structures to match. */ @@ -2432,8 +2362,7 @@ pass_forwprop::execute (function *fun) || code == VEC_COND_EXPR) { /* In this case the entire COND_EXPR is in rhs1. */ - if (forward_propagate_into_cond (&gsi) - || combine_cond_exprs (&gsi)) + if (forward_propagate_into_cond (&gsi)) { changed = true; stmt = gsi_stmt (gsi); |