cfgrtl.c (try_redirect_by_replacing_jump): Move jump immediatelly before BARRIER.
authorJosef Zlomek <zlomekj@suse.cz>
Fri, 31 Oct 2003 14:09:34 +0000 (15:09 +0100)
committerJosef Zlomek <zlomek@gcc.gnu.org>
Fri, 31 Oct 2003 14:09:34 +0000 (14:09 +0000)
PR/11640
* cfgrtl.c (try_redirect_by_replacing_jump): Move jump
immediatelly before BARRIER.

From-SVN: r73142

gcc/ChangeLog
gcc/cfgrtl.c

index 2fc1859b5c017ef8938a962a3d9ed4bedb9906a4..1613d2f35ecda1c49441076ecf4971cb973892e0 100644 (file)
@@ -1,3 +1,9 @@
+2003-10-31  Josef Zlomek  <zlomekj@suse.cz>
+
+       PR/11640
+       * cfgrtl.c (try_redirect_by_replacing_jump): Move jump
+       immediatelly before BARRIER.
+
 2003-10-31  Kelley Cook  <kcook@gcc.gnu.org>
 
        * Makefile.in (STRICT2_WARN): Add -Wold-style-definition.
index f383438e26b6ee3e6b57641336569156fb8d7506..7354c73c7fb31790034891ad94d1c320a453ce98 100644 (file)
@@ -793,6 +793,30 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
       barrier = next_nonnote_insn (src->end);
       if (!barrier || GET_CODE (barrier) != BARRIER)
        emit_barrier_after (src->end);
+      else
+       {
+         if (barrier != NEXT_INSN (src->end))
+           {
+             /* Move the jump before barrier so that the notes
+                which originally were or were created before jump table are
+                inside the basic block.  */
+             rtx new_insn = src->end;
+             rtx tmp;
+
+             for (tmp = NEXT_INSN (src->end); tmp != barrier;
+                  tmp = NEXT_INSN (tmp))
+               set_block_for_insn (tmp, src);
+
+             NEXT_INSN (PREV_INSN (new_insn)) = NEXT_INSN (new_insn);
+             PREV_INSN (NEXT_INSN (new_insn)) = PREV_INSN (new_insn);
+
+             NEXT_INSN (new_insn) = barrier;
+             NEXT_INSN (PREV_INSN (barrier)) = new_insn;
+
+             PREV_INSN (new_insn) = PREV_INSN (barrier);
+             PREV_INSN (barrier) = new_insn;
+           }
+       }
     }
 
   /* Keep only one edge out and set proper flags.  */