+2017-12-18 Jeff Law <law@redhat.com>
+
+ Revert
+ 2017-11-19 Jeff Law <law@redhat.com>
+
+ * tree-ssa-dom.c (record_equivalences_from_phis): Fix handling
+ of degenerates resulting from ignoring an edge.
+
2017-12-18 Martin Sebor <msebor@redhat.com>
PR middle-end/83373
tree rhs = NULL;
size_t i;
- bool ignored_phi_arg = false;
for (i = 0; i < gimple_phi_num_args (phi); i++)
{
tree t = gimple_phi_arg_def (phi, i);
if (lhs == t)
continue;
- /* We want to track if we ignored any PHI arguments because
- their associated edges were not executable. This impacts
- whether or not we can use any equivalence we might discover. */
+ /* If the associated edge is not marked as executable, then it
+ can be ignored. */
if ((gimple_phi_arg_edge (phi, i)->flags & EDGE_EXECUTABLE) == 0)
- {
- ignored_phi_arg = true;
- continue;
- }
+ continue;
t = dom_valueize (t);
a useful equivalence. We do not need to record unwind data for
this, since this is a true assignment and not an equivalence
inferred from a comparison. All uses of this ssa name are dominated
- by this assignment, so unwinding just costs time and space.
-
- Note that if we ignored a PHI argument and the resulting equivalence
- is SSA_NAME = SSA_NAME. Then we can not use the equivalence as the
- uses of the LHS SSA_NAME are not necessarily dominated by the
- assignment of the RHS SSA_NAME. */
+ by this assignment, so unwinding just costs time and space. */
if (i == gimple_phi_num_args (phi)
- && may_propagate_copy (lhs, rhs)
- && (!ignored_phi_arg || TREE_CODE (rhs) != SSA_NAME))
+ && may_propagate_copy (lhs, rhs))
set_ssa_name_value (lhs, rhs);
}
}