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:
parent
d9a3317a68
commit
72ec635f5a
@ -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.
|
||||
|
||||
|
21
gcc/loop.c
21
gcc/loop.c
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user