bb-reorder.c (fixup_reorder_chain): Don't look up new block again.
authorRichard Henderson <rth@gcc.gnu.org>
Tue, 18 Apr 2000 01:32:43 +0000 (18:32 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 18 Apr 2000 01:32:43 +0000 (18:32 -0700)
        * bb-reorder.c (fixup_reorder_chain): Don't look up new block again.
        (reorder_basic_blocks): If no epilogue in rtl, force last block last.

From-SVN: r33221

gcc/ChangeLog
gcc/bb-reorder.c

index a3e285dba5f292a8bc139670f91936aaa90d76ff..326f168dc221f416345cc94d9b6f9baf19213f1e 100644 (file)
@@ -1,3 +1,8 @@
+2000-04-17  Richard Henderson  <rth@cygnus.com>
+
+       * bb-reorder.c (fixup_reorder_chain): Don't look up new block again.
+       (reorder_basic_blocks): If no epilogue in rtl, force last block last.
+
 2000-04-17  Mark Mitchell  <mark@codesourcery.com>
 
        * function.c (expand_function_start): Use hard_function_value to
@@ -123,7 +128,7 @@ Mon Apr 17 14:59:36 MET DST 2000  Jan Hubicka  <jh@suse.cz>
        (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Remove page check,
        since vector in in the data CSECT.
        (ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.
-        * i370.md (Many patterns): Put the length in the XL directives.
+       * i370.md (Many patterns): Put the length in the XL directives.
        (movdi): Put back STM and MVC in definition.
        (floatsidf2): Correct TARGET_ELF_ABI pattern and add back the LE370
        pattern using the TCA.
index e2f40f1657eee93d0dc937208eab0cb543bb3337..5f2e178c0325155a907e87e2dae61faf359bbede 100644 (file)
@@ -690,8 +690,7 @@ fixup_reorder_chain ()
              BASIC_BLOCK (nb->index)->local_set = 0;
 
              nb->aux = xcalloc (1, sizeof (struct reorder_block_def));
-             REORDER_BLOCK_INDEX (BASIC_BLOCK (n_basic_blocks - 1))
-               = REORDER_BLOCK_INDEX (bbi) + 1;
+             REORDER_BLOCK_INDEX (nb) = REORDER_BLOCK_INDEX (bbi) + 1;
              /* Relink to new block.  */
              nb->succ = bbi->succ;
              nb->succ->src = nb;
@@ -835,6 +834,22 @@ reorder_basic_blocks ()
          REORDER_BLOCK_EFF_HEAD (bbi) = NEXT_INSN (prev_eff_end);
        }
     }
+
+  /* If we've not got epilogue in RTL, we must fallthru to the exit.
+     Force the last block to be at the end.  */
+  /* ??? Some ABIs (e.g. MIPS) require the return insn to be at the
+     end of the function for stack unwinding purposes.  */
+
+#ifndef HAVE_epilogue
+#define HAVE_epilogue 0
+#endif
+
+  if (! HAVE_epilogue)
+    {
+      basic_block last = BASIC_BLOCK (n_basic_blocks - 1);
+      REORDER_BLOCK_INDEX (last) = n_basic_blocks - 1;
+      REORDER_BLOCK_FLAGS (last) |= REORDER_BLOCK_VISITED;
+    }
       
   make_reorder_chain (BASIC_BLOCK (0));