OSDN Git Service

(loop_optimize): Verify that max_uid_for_loop is still
authorwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Oct 1992 18:45:45 +0000 (18:45 +0000)
committerwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Oct 1992 18:45:45 +0000 (18:45 +0000)
larger than the uid of any insn.  Increase the number of exit
blocks from 4 to 32 per loop.
(find_and_verify_loops): Stop trying to relocate exit blocks when
allocating a new label would exceed max_uid_for_loop.

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

gcc/loop.c

index 87509be..232b882 100644 (file)
@@ -361,7 +361,7 @@ loop_optimize (f, dumpfile)
 
   /* Get size to use for tables indexed by uids.
      Leave some space for labels allocated by find_and_verify_loops.  */
-  max_uid_for_loop = get_max_uid () + 1 + max_loop_num * 4;
+  max_uid_for_loop = get_max_uid () + 1 + max_loop_num * 32;
 
   uid_luid = (int *) alloca (max_uid_for_loop * sizeof (int));
   uid_loop_num = (int *) alloca (max_uid_for_loop * sizeof (int));
@@ -386,6 +386,10 @@ loop_optimize (f, dumpfile)
      function.  */
   reg_scan (f, max_reg_num (), 1);
 
+  /* See if we went too far.  */
+  if (get_max_uid () > max_uid_for_loop)
+    abort ();
+
   /* Compute the mapping from uids to luids.
      LUIDs are numbers assigned to insns, like uids,
      except that luids increase monotonically through the code.
@@ -2240,7 +2244,8 @@ find_and_verify_loops (f)
            && (GET_CODE (PATTERN (insn)) == RETURN
                || (simplejump_p (insn)
                    && (uid_loop_num[INSN_UID (JUMP_LABEL (insn))]
-                       != this_loop_num))))
+                       != this_loop_num)))
+           && get_max_uid () < max_uid_for_loop)
          {
            rtx p;
            rtx our_next = next_real_insn (insn);
@@ -2299,8 +2304,7 @@ find_and_verify_loops (f)
 
                    /* Verify that uid_loop_num is large enough and that
                       we can invert P. */
-                  if (INSN_UID (new_label) < max_uid_for_loop
-                      && invert_jump (p, new_label))
+                  if (invert_jump (p, new_label))
                     {
                       rtx q, r;