unroll.c (loop_iterations): Extend check for multiple back edges.

2001-10-08  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* unroll.c (loop_iterations): Extend check for multiple back edges.

From-SVN: r46099
This commit is contained in:
Franz Sirl 2001-10-08 21:20:43 +00:00 committed by Franz Sirl
parent 0bdf7869bf
commit 9d1e9f93a9
2 changed files with 25 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2001-10-08 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* unroll.c (loop_iterations): Extend check for multiple back edges.
2001-10-08 Alexandre Oliva <aoliva@redhat.com>
* langhooks.h: New file.

View File

@ -3519,6 +3519,27 @@ loop_iterations (loop)
return 0;
}
/* If there are multiple conditionalized loop exit tests, they may jump
back to differing CODE_LABELs. */
if (loop->top && loop->cont)
{
rtx temp = PREV_INSN (last_loop_insn);
do
{
if (GET_CODE (temp) == JUMP_INSN
&& INSN_LUID (JUMP_LABEL (temp)) > INSN_LUID (loop->top)
&& INSN_LUID (JUMP_LABEL (temp)) < INSN_LUID (loop->cont))
{
if (loop_dump_stream)
fprintf (loop_dump_stream,
"Loop iterations: Loop has multiple back edges.\n");
return 0;
}
}
while ((temp = PREV_INSN (temp)) != loop->cont);
}
/* Find the iteration variable. If the last insn is a conditional
branch, and the insn before tests a register value, make that the
iteration variable. */