]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-threadedge.c (thread_through_normal_block): Only push the EDGE_START_JUMP_TH...
authorJeff Law <law@redhat.com>
Thu, 14 Nov 2013 18:05:55 +0000 (11:05 -0700)
committerJeff Law <law@gcc.gnu.org>
Thu, 14 Nov 2013 18:05:55 +0000 (11:05 -0700)
* tree-ssa-threadedge.c (thread_through_normal_block): Only push
the EDGE_START_JUMP_THREAD marker if the jump threading path is
empty.

From-SVN: r204793

gcc/ChangeLog
gcc/tree-ssa-threadedge.c

index 51bef23162631793577b74a8da4500190ce51dbc..76215c106227037ede2cfb8a56d4e8ca4303a24c 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-14  Jeff Law  <law@redhat.com>
+
+       * tree-ssa-threadedge.c (thread_through_normal_block): Only push
+       the EDGE_START_JUMP_THREAD marker if the jump threading path is
+       empty.
+
 2013-11-14  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * doc/invoke.texi: Update documentation for AArch64's -mcpu
index c9b2c697d889f31eb03defc34ffd62eb1ade93f2..cabfc824c628540c55154bc4cc9399f21eb8a213 100644 (file)
@@ -940,12 +940,18 @@ thread_through_normal_block (edge e,
              || bitmap_bit_p (visited, dest->index))
            return false;
 
-          jump_thread_edge *x
-           = new jump_thread_edge (e, EDGE_START_JUMP_THREAD);
-         path->safe_push (x);
-         *backedge_seen_p |= ((e->flags & EDGE_DFS_BACK) != 0);
+         /* Only push the EDGE_START_JUMP_THREAD marker if this is
+            first edge on the path.  */
+         if (path->length () == 0)
+           {
+              jump_thread_edge *x
+               = new jump_thread_edge (e, EDGE_START_JUMP_THREAD);
+             path->safe_push (x);
+             *backedge_seen_p |= ((e->flags & EDGE_DFS_BACK) != 0);
+           }
 
-         x = new jump_thread_edge (taken_edge, EDGE_COPY_SRC_BLOCK);
+         jump_thread_edge *x
+           = new jump_thread_edge (taken_edge, EDGE_COPY_SRC_BLOCK);
          path->safe_push (x);
          *backedge_seen_p |= ((taken_edge->flags & EDGE_DFS_BACK) != 0);
 
@@ -953,7 +959,7 @@ thread_through_normal_block (edge e,
             secondary effects of threading without having to re-run DOM or
             VRP.  */
          if (!*backedge_seen_p
-              || ! cond_arg_set_in_bb (taken_edge, e->dest))
+             || ! cond_arg_set_in_bb (taken_edge, e->dest))
            {
              /* We don't want to thread back to a block we have already
                 visited.  This may be overly conservative.  */