+2011-06-16 Jeff Law <law@redhat.com>
+
+ PR middle-end/49465
+ * tree-ssa-threadupate.c (fix_duplicate_block_edges): Fix condition
+ to detect threading through joiner block. If there was already
+ an edge to the new target, then do not change the PHI nodes.
+
2011-06-23 Jakub Jelinek <jakub@redhat.com>
* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Use
to keep its control statement and redirect an outgoing edge.
Else we want to remove the control statement & edges, then create
a new outgoing edge. In both cases we may need to update PHIs. */
- if (THREAD_TARGET2 (rd->incoming_edges->e) == rd->outgoing_edge)
+ if (THREAD_TARGET2 (rd->incoming_edges->e))
{
edge victim;
edge e2;
victim = find_edge (rd->dup_block, THREAD_TARGET (e)->dest);
e2 = redirect_edge_and_branch (victim, THREAD_TARGET2 (e)->dest);
- /* This updates the PHI at the target of the threaded edge. */
- copy_phi_args (e2->dest, THREAD_TARGET2 (e), e2);
+ /* If we redirected the edge, then we need to copy PHI arguments
+ at the target. If the edge already existed (e2 != victim case),
+ then the PHIs in the target already have the correct arguments. */
+ if (e2 == victim)
+ copy_phi_args (e2->dest, THREAD_TARGET2 (e), e2);
}
else
{