diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1995-02-06 16:29:31 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1995-02-06 16:29:31 -0800 |
commit | ca188f167980504318441867688990b3cdec76fb (patch) | |
tree | 252290a972873b5e3f00f1a607d1a01b5de9c135 /gcc | |
parent | 4f2d36749024d35dd0119be7af2123b935f92241 (diff) | |
download | gcc-ca188f167980504318441867688990b3cdec76fb.zip gcc-ca188f167980504318441867688990b3cdec76fb.tar.gz gcc-ca188f167980504318441867688990b3cdec76fb.tar.bz2 |
(jump_optimize): When searching for a LOOP_END note to move,
stop if we find a LOOP_BEG note first.
From-SVN: r8885
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/jump.c | 35 |
1 files changed, 21 insertions, 14 deletions
@@ -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; |