]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
jump.c (jump_optimize_1): Also move LOOP_VTOP and LOOP_CONT notes when presented...
authorJeffrey A Law <law@cygnus.com>
Tue, 2 Nov 1999 07:22:47 +0000 (07:22 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 2 Nov 1999 07:22:47 +0000 (00:22 -0700)
        * jump.c (jump_optimize_1): Also move LOOP_VTOP and LOOP_CONT
        notes when presented with "if (foo) break; end_of_loop" and
        the break sequence gets moved out of the loop.

From-SVN: r30338

gcc/ChangeLog
gcc/jump.c

index 88e54139554b74930b1502665b4cf08658c92761..8e8895d566b717ecbc11ffc855e0aa0beb98ebd3 100644 (file)
@@ -1,5 +1,9 @@
 Mon Nov  1 23:37:38 1999  Jeffrey A Law  (law@cygnus.com)
 
+       * jump.c (jump_optimize_1): Also move LOOP_VTOP and LOOP_CONT
+       notes when presented with "if (foo) break; end_of_loop" and
+       the break sequence gets moved out of the loop.
+
        * unroll.c (unroll_loop): Allocate memory for MAP using xcalloc.
        Remove explicit zero initializations of entries within MAP.
 
index 1867de17969f62bd97f5f47729d36f17c17da1c4..23156896b917a1a18e9bc138b5be86afa1155152 100644 (file)
@@ -2084,23 +2084,25 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
                        NEXT_INSN (range1end) = range2after;
                        PREV_INSN (range2after) = range1end;
 
-                       /* Check for a loop end note between the end of
+                       /* Check for loop notes between the end of
                           range2, and the next code label.  If there is one,
                           then what we have really seen is
                           if (foo) break; end_of_loop;
                           and moved the break sequence outside the loop.
-                          We must move the LOOP_END note to where the
-                          loop really ends now, or we will confuse loop
-                          optimization.  Stop if we find a LOOP_BEG note
-                          first, since we don't want to move the LOOP_END
-                          note in that case.  */
+                          We must move LOOP_END, LOOP_VTOP and LOOP_CONT
+                          notes (in order) to where the loop really ends now,
+                          or we will confuse loop optimization.  Stop if we
+                          find a LOOP_BEG note first, since we don't want to
+                          move the notes in that case.  */
                        for (;range2after != label2; range2after = rangenext)
                          {
                            rangenext = NEXT_INSN (range2after);
                            if (GET_CODE (range2after) == NOTE)
                              {
-                               if (NOTE_LINE_NUMBER (range2after)
-                                   == NOTE_INSN_LOOP_END)
+                               int kind = NOTE_LINE_NUMBER (range2after);
+                               if (kind == NOTE_INSN_LOOP_END
+                                   || kind == NOTE_INSN_LOOP_VTOP
+                                   || kind == NOTE_INSN_LOOP_CONT)
                                  {
                                    NEXT_INSN (PREV_INSN (range2after))
                                      = rangenext;