reorg.c (optimize_skip): Do not thread a jump to a new target if doing so would inval...
authorJeff Law <law@gcc.gnu.org>
Fri, 1 Oct 1993 03:23:10 +0000 (21:23 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 1 Oct 1993 03:23:10 +0000 (21:23 -0600)
        * reorg.c (optimize_skip): Do not thread a jump to a new
        target if doing so would invalidate the insn in the jump's
        delay slot.

From-SVN: r5540

gcc/reorg.c

index 341383dfd92d7020c4ec751a6a7885a5bbcdf7d5..547cba989837300e8edea8b1ed80c1dee75c510c 100644 (file)
@@ -1157,7 +1157,14 @@ optimize_skip (insn)
          target_label = JUMP_LABEL (next_trial);
          if (target_label == 0)
            target_label = find_end_label ();
-         reorg_redirect_jump (insn, target_label);
+
+         /* Recompute the flags based on TARGET_LABEL since threading
+            the jump to TARGET_LABEL may change the direction of the
+            jump (which may change the circumstances in which the
+            delay slot is nullified).  */
+         flags = get_jump_flags (insn, target_label);
+         if (eligible_for_annul_true (insn, 0, trial, flags))
+           reorg_redirect_jump (insn, target_label);
        }
 
       INSN_ANNULLED_BRANCH_P (insn) = 1;