aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/unroll.c35
2 files changed, 29 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 666edaf..45aea6a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+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.
+
2001-12-01 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* ginclude/ppc-asm.h (JUMP_TARGET): New macro.
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);