From ca188f167980504318441867688990b3cdec76fb Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 6 Feb 1995 16:29:31 -0800 Subject: (jump_optimize): When searching for a LOOP_END note to move, stop if we find a LOOP_BEG note first. From-SVN: r8885 --- gcc/jump.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'gcc') diff --git a/gcc/jump.c b/gcc/jump.c index 9cabf41..ff26729 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -1878,24 +1878,31 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan) 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. */ + optimization. Stop if we find a LOOP_BEG note + first, since we don't want to move the LOOP_END + note in that case. */ for (;range2after != label2; range2after = rangenext) { rangenext = NEXT_INSN (range2after); - if (GET_CODE (range2after) == NOTE - && (NOTE_LINE_NUMBER (range2after) - == NOTE_INSN_LOOP_END)) + if (GET_CODE (range2after) == NOTE) { - NEXT_INSN (PREV_INSN (range2after)) - = rangenext; - PREV_INSN (rangenext) - = PREV_INSN (range2after); - PREV_INSN (range2after) - = PREV_INSN (range1beg); - NEXT_INSN (range2after) = range1beg; - NEXT_INSN (PREV_INSN (range1beg)) - = range2after; - PREV_INSN (range1beg) = range2after; + if (NOTE_LINE_NUMBER (range2after) + == NOTE_INSN_LOOP_END) + { + NEXT_INSN (PREV_INSN (range2after)) + = rangenext; + PREV_INSN (rangenext) + = PREV_INSN (range2after); + PREV_INSN (range2after) + = PREV_INSN (range1beg); + NEXT_INSN (range2after) = range1beg; + NEXT_INSN (PREV_INSN (range1beg)) + = range2after; + PREV_INSN (range1beg) = range2after; + } + else if (NOTE_LINE_NUMBER (range2after) + == NOTE_INSN_LOOP_BEG) + break; } } changed = 1; -- cgit v1.1