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
This commit is contained in:
Jeffrey A Law 1998-01-17 21:50:05 +00:00 committed by Jeff Law
parent d9a3317a68
commit 72ec635f5a
2 changed files with 25 additions and 0 deletions

View File

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

View File

@ -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));