diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-01-17 21:50:05 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-01-17 14:50:05 -0700 |
commit | 72ec635f5a09e342acee7752e305be4b49023fee (patch) | |
tree | 1f2c3ee528dc36eff6e8def1f98e791d86d5fa08 | |
parent | d9a3317a6806010861b6f640ca1cc76e2044fefc (diff) | |
download | gcc-72ec635f5a09e342acee7752e305be4b49023fee.zip gcc-72ec635f5a09e342acee7752e305be4b49023fee.tar.gz gcc-72ec635f5a09e342acee7752e305be4b49023fee.tar.bz2 |
loop.c (find_and_verify_loops): When attempting to move insns from inside the loop outside the loop...
* loop.c (find_and_verify_loops): When attempting to move insns from
inside the loop outside the loop, create a BARRIER if no suitable
one was found.
From-SVN: r17399
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/loop.c | 21 |
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7a660ff..299297d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -23,6 +23,10 @@ Sat Jan 17 21:24:16 1998 David T. McWherter <dtm@waterw.com> Sat Jan 17 21:16:19 1998 Jeffrey A Law (law@cygnus.com) + * loop.c (find_and_verify_loops): When attempting to move insns from + inside the loop outside the loop, create a BARRIER if no suitable + one was found. + * jump.c (jump_optimize): Remove Dec 17, 1997 chance in favor of an equivalent change from gcc-2.8. @@ -2531,6 +2531,27 @@ find_and_verify_loops (f) { rtx q, r; + /* If no suitable BARRIER was found, create a suitable + one before TARGET. Since TARGET is a fall through + path, we'll need to insert an jump around our block + and a add a BARRIER before TARGET. + + This creates an extra unconditional jump outside + the loop. However, the benefits of removing rarely + executed instructions from inside the loop usually + outweighs the cost of the extra unconditional jump + outside the loop. */ + if (loc == 0) + { + rtx temp; + + temp = gen_jump (JUMP_LABEL (insn)); + temp = emit_jump_insn_before (temp, target); + JUMP_LABEL (temp) = JUMP_LABEL (insn); + LABEL_NUSES (JUMP_LABEL (insn))++; + loc = emit_barrier_before (target); + } + /* Include the BARRIER after INSN and copy the block after LOC. */ new_label = squeeze_notes (new_label, NEXT_INSN (insn)); |