jump.c (jump_optimize_1): Also move LOOP_VTOP and LOOP_CONT notes when presented with "if (foo) break...

* 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
This commit is contained in:
Jeffrey A Law 1999-11-02 07:22:47 +00:00 committed by Jeff Law
parent d269eb53b1
commit a5a06a788d
2 changed files with 14 additions and 8 deletions

View 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.

View 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;