https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102844

--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> ---
The following removes the premature optimization(?) using
EDGE_NO_COPY_SRC_BLOCK
in case the block contained a condition we could thread through.  That fixes
the testcase.

diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index c3ea2d680d8..2005e30322b 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -989,8 +989,11 @@ thread_around_empty_blocks (edge taken_edge,
        return false;
       bitmap_set_bit (visited, taken_edge->dest->index);

+      /* We may not use EDGE_NO_COPY_SRC_BLOCK since the condition
+        might later be simplified to something needing a temporary
+        SSA definition.  See PR102844.  */
       jump_thread_edge *x
-       = new jump_thread_edge (taken_edge, EDGE_NO_COPY_SRC_BLOCK);
+       = new jump_thread_edge (taken_edge, EDGE_COPY_SRC_BLOCK);
       path->safe_push (x);

       thread_around_empty_blocks (taken_edge,

Reply via email to