aboutsummaryrefslogtreecommitdiff
path: root/gcc/unroll.c
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@act-europe.fr>2001-12-01 13:04:16 +0100
committerFranz Sirl <sirl@gcc.gnu.org>2001-12-01 12:04:16 +0000
commita22455dfa1b41a8be2dd496a997ac13426f2f00f (patch)
tree4ba91b53f21ba59b9d363a851eb062923b73296e /gcc/unroll.c
parent8a155ecc2aff1c9ae5ebccaf6dd116e064442fb2 (diff)
downloadgcc-a22455dfa1b41a8be2dd496a997ac13426f2f00f.zip
gcc-a22455dfa1b41a8be2dd496a997ac13426f2f00f.tar.gz
gcc-a22455dfa1b41a8be2dd496a997ac13426f2f00f.tar.bz2
unroll.c (loop_iterations): Give up on jumps with null JUMP_LABEL while scanning for multiple back edges.
2001-12-01 Olivier Hainque <hainque@act-europe.fr> * unroll.c (loop_iterations): Give up on jumps with null JUMP_LABEL while scanning for multiple back edges. From-SVN: r47510
Diffstat (limited to 'gcc/unroll.c')
-rw-r--r--gcc/unroll.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c
index b66916e..6502614d 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -3551,18 +3551,31 @@ loop_iterations (loop)
do
{
- if (GET_CODE (temp) == JUMP_INSN
- /* Previous unrolling may have generated new insns not covered
- by the uid_luid array. */
- && INSN_UID (JUMP_LABEL (temp)) < max_uid_for_loop
- /* Check if we jump back into the loop body. */
- && INSN_LUID (JUMP_LABEL (temp)) > INSN_LUID (loop->top)
- && INSN_LUID (JUMP_LABEL (temp)) < INSN_LUID (loop->cont))
+ if (GET_CODE (temp) == JUMP_INSN)
{
- if (loop_dump_stream)
- fprintf (loop_dump_stream,
- "Loop iterations: Loop has multiple back edges.\n");
- return 0;
+ /* There are some kinds of jumps we can't deal with easily. */
+ if (JUMP_LABEL (temp) == 0)
+ {
+ if (loop_dump_stream)
+ fprintf
+ (loop_dump_stream,
+ "Loop iterations: Jump insn has null JUMP_LABEL.\n");
+ return 0;
+ }
+
+ if (/* Previous unrolling may have generated new insns not
+ covered by the uid_luid array. */
+ INSN_UID (JUMP_LABEL (temp)) < max_uid_for_loop
+ /* Check if we jump back into the loop body. */
+ && 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);