]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/15296 ([3.4 only] Delayed branch scheduling causing invalid...
authorHans-Peter Nilsson <hp@axis.com>
Wed, 26 May 2004 13:19:21 +0000 (13:19 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Wed, 26 May 2004 13:19:21 +0000 (13:19 +0000)
PR optimization/15296
* reorg.c (fill_simple_delay_slots): Use next_real_insn when
getting last consecutive label at a branch.
(relax_delay_slots): Similar, near top of loop.

From-SVN: r82287

gcc/ChangeLog
gcc/reorg.c

index f26e43ee8ec87ddb77c8c172a25002b5b200a5ca..8c477a2149f284d642f9fb80dcf00de0a256179b 100644 (file)
@@ -1,3 +1,10 @@
+2004-05-26  Hans-Peter Nilsson  <hp@axis.com>
+
+       PR optimization/15296
+       * reorg.c (fill_simple_delay_slots): Use next_real_insn when
+       getting last consecutive label at a branch.
+       (relax_delay_slots): Similar, near top of loop.
+
 2004-05-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from mainline
index 3fdf941ad7931bdee347f58de34f1fbbfb328351..d11e35d83c7346d1d028892d2fa0412fc74ddbfc 100644 (file)
@@ -2403,7 +2403,9 @@ fill_simple_delay_slots (non_jumps_p)
              && eligible_for_delay (insn, slots_filled, next_trial, flags)
              && ! can_throw_internal (trial))
            {
-             rtx new_label = next_active_insn (next_trial);
+             /* See comment in relax_delay_slots about necessity of using
+                next_real_insn here.  */
+             rtx new_label = next_real_insn (next_trial);
 
              if (new_label != 0)
                new_label = get_label_before (new_label);
@@ -3136,7 +3138,9 @@ relax_delay_slots (first)
          && (target_label = JUMP_LABEL (insn)) != 0)
        {
          target_label = follow_jumps (target_label);
-         target_label = prev_label (next_active_insn (target_label));
+         /* See comment further down why we must use next_real_insn here,
+            instead of next_active_insn.  */
+         target_label = prev_label (next_real_insn (target_label));
 
          if (target_label == 0)
            target_label = find_end_label ();