diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-11-27 17:26:17 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-11-27 17:26:17 +0000 |
commit | cdef8bc6d1ad756c5b7508168a95351270347b45 (patch) | |
tree | a81bbbb8510ca92a7b1d6e2ce2d7db16c619315c /gcc | |
parent | 31f16dff98752d15c0f430b8e1e1daa7b682a8f0 (diff) | |
download | gcc-cdef8bc6d1ad756c5b7508168a95351270347b45.zip gcc-cdef8bc6d1ad756c5b7508168a95351270347b45.tar.gz gcc-cdef8bc6d1ad756c5b7508168a95351270347b45.tar.bz2 |
tree.c (operand_equal_for_phi_arg_p): New.
* tree.c (operand_equal_for_phi_arg_p): New.
* tree.h: Add a prototype for operand_equal_for_phi_arg_p.
* tree-cfg.c, tree-ssa-dom.c, tree-ssa-phiopt.c, tree-ssa.c:
Replace operand_equal_p with operand_for_phi_arg_p
appropriately.
From-SVN: r91385
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-dom.c | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 8 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 2 | ||||
-rw-r--r-- | gcc/tree.c | 16 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
7 files changed, 33 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c249c02..95ae7a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-11-27 Kazu Hirata <kazu@cs.umass.edu> + + * tree.c (operand_equal_for_phi_arg_p): New. + * tree.h: Add a prototype for operand_equal_for_phi_arg_p. + * tree-cfg.c, tree-ssa-dom.c, tree-ssa-phiopt.c, tree-ssa.c: + Replace operand_equal_p with operand_for_phi_arg_p + appropriately. + 2004-11-27 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR pch/14940 diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index bcf3d3e..37a6920 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2278,7 +2278,7 @@ phi_alternatives_equal (basic_block dest, edge e1, edge e2) val1 = PHI_ARG_DEF (phi, n1); val2 = PHI_ARG_DEF (phi, n2); - if (!operand_equal_p (val1, val2, 0)) + if (!operand_equal_for_phi_arg_p (val1, val2)) return false; } diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 5af8489..a2d1459 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -1180,7 +1180,7 @@ record_equivalences_from_phis (basic_block bb) if (TREE_CODE (t) == SSA_NAME || is_gimple_min_invariant (t)) { /* Ignore alternatives which are the same as our LHS. */ - if (operand_equal_p (lhs, t, 0)) + if (operand_equal_for_phi_arg_p (lhs, t)) continue; /* If we have not processed an alternative yet, then set @@ -1190,7 +1190,7 @@ record_equivalences_from_phis (basic_block bb) /* If we have processed an alternative (stored in RHS), then see if it is equal to this one. If it isn't, then stop the search. */ - else if (! operand_equal_p (rhs, t, 0)) + else if (! operand_equal_for_phi_arg_p (rhs, t)) break; } else diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index 3c241e4..b6cfa7a 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -450,10 +450,10 @@ value_replacement (basic_block bb, tree phi, tree arg0, tree arg1) We now need to verify that the two arguments in the PHI node match the two arguments to the equality comparison. */ - if ((operand_equal_p (arg0, TREE_OPERAND (cond, 0), 0) - && operand_equal_p (arg1, TREE_OPERAND (cond, 1), 0)) - || (operand_equal_p (arg1, TREE_OPERAND (cond, 0), 0) - && operand_equal_p (arg0, TREE_OPERAND (cond, 1), 0))) + if ((operand_equal_for_phi_arg_p (arg0, TREE_OPERAND (cond, 0)) + && operand_equal_for_phi_arg_p (arg1, TREE_OPERAND (cond, 1))) + || (operand_equal_for_phi_arg_p (arg1, TREE_OPERAND (cond, 0)) + && operand_equal_for_phi_arg_p (arg0, TREE_OPERAND (cond, 1)))) { edge e; tree arg; diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 4aa8b26..adb6a51 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1138,7 +1138,7 @@ check_phi_redundancy (tree phi, tree *eq_to) } if (val - && !operand_equal_p (val, def, 0)) + && !operand_equal_for_phi_arg_p (val, def)) return; val = def; @@ -6150,4 +6150,20 @@ lower_bound_in_type (tree outer, tree inner) build_int_cst_wide (inner, lo, hi)); } +/* Return nonzero if two operands that are suitable for PHI nodes are + necessarily equal. Specifically, both ARG0 and ARG1 must be either + SSA_NAME or invariant. Note that this is strictly an optimization. + That is, callers of this function can directly call operand_equal_p + and get the same result, only slower. */ + +int +operand_equal_for_phi_arg_p (tree arg0, tree arg1) +{ + if (arg0 == arg1) + return 1; + if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME) + return 0; + return operand_equal_p (arg0, arg1, 0); +} + #include "gt-tree.h" @@ -3442,6 +3442,7 @@ extern bool commutative_tree_code (enum tree_code); extern tree get_case_label (tree); extern tree upper_bound_in_type (tree, tree); extern tree lower_bound_in_type (tree, tree); +extern int operand_equal_for_phi_arg_p (tree, tree); /* In stmt.c */ |