diff options
author | Olivier Hainque <hainque@act-europe.fr> | 2001-12-01 13:04:16 +0100 |
---|---|---|
committer | Franz Sirl <sirl@gcc.gnu.org> | 2001-12-01 12:04:16 +0000 |
commit | a22455dfa1b41a8be2dd496a997ac13426f2f00f (patch) | |
tree | 4ba91b53f21ba59b9d363a851eb062923b73296e /gcc/unroll.c | |
parent | 8a155ecc2aff1c9ae5ebccaf6dd116e064442fb2 (diff) | |
download | gcc-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.c | 35 |
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); |