Commit 9d1e9f93 by Franz Sirl Committed by Franz Sirl

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
parent 0bdf7869
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> 2001-10-08 Alexandre Oliva <aoliva@redhat.com>
* langhooks.h: New file. * langhooks.h: New file.
......
...@@ -3519,6 +3519,27 @@ loop_iterations (loop) ...@@ -3519,6 +3519,27 @@ loop_iterations (loop)
return 0; 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 /* Find the iteration variable. If the last insn is a conditional
branch, and the insn before tests a register value, make that the branch, and the insn before tests a register value, make that the
iteration variable. */ iteration variable. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment