diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 88e54139554..8e8895d566b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/jump.c b/gcc/jump.c index 1867de17969..23156896b91 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -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;