From: Richard Henderson Date: Tue, 18 Apr 2000 01:32:43 +0000 (-0700) Subject: bb-reorder.c (fixup_reorder_chain): Don't look up new block again. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d1bfc5ad4635db1d58d8233f7803b26ba2378647;p=gcc.git bb-reorder.c (fixup_reorder_chain): Don't look up new block again. * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3e285dba5f..326f168dc22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-04-17 Richard Henderson + + * 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 * 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 (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. diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index e2f40f1657e..5f2e178c032 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -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));