OSDN Git Service

2001-12-01 Olivier Hainque <hainque@act-europe.fr>
authorsirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 1 Dec 2001 12:04:16 +0000 (12:04 +0000)
committersirl <sirl@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 1 Dec 2001 12:04:16 +0000 (12:04 +0000)
* unroll.c (loop_iterations): Give up on jumps with null JUMP_LABEL
while scanning for multiple back edges.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47510 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/unroll.c

index 666edaf..45aea6a 100644 (file)
@@ -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.
index b66916e..6502614 100644 (file)
@@ -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);