> From: Alan Modra <[email protected]>
> Date: Tue, 1 Nov 2011 16:33:40 +0100
> On Tue, Nov 01, 2011 at 12:57:22AM +1030, Alan Modra wrote:
> * function.c (bb_active_p): Delete.
> (dup_block_and_redirect, active_insn_between): New functions.
> (convert_jumps_to_returns, emit_return_for_exit): New functions,
> split out from..
> (thread_prologue_and_epilogue_insns): ..here. Delete
> shadowing variables. Don't do prologue register clobber tests
> when shrink wrapping already failed. Delete all last_bb_active
> code. Instead compute tail block candidates for duplicating
> exit path. Remove these from antic set. Duplicate tails when
> reached from both blocks needing a prologue/epilogue and
> blocks not needing such.
> * ifcvt.c (dead_or_predicable): Test both flag_shrink_wrap and
> HAVE_simple_return.
> * bb-reorder.c (get_uncond_jump_length): Make global.
> * bb-reorder.h (get_uncond_jump_length): Declare.
> * cfgrtl.c (rtl_create_basic_block): Comment typo fix.
> (rtl_split_edge): Likewise. Warning fix.
> (rtl_duplicate_bb): New function.
> (rtl_cfg_hooks): Enable can_duplicate_block_p and duplicate_block.
This (a revision in the range 181187:181189) broke build for
cris-elf like so:
libtool: compile: /tmp/hpautotest-gcc1/cris-elf/gccobj/./gcc/xgcc
-shared-libgcc -B/tmp/hpautotest-gcc1/cris-elf/gccobj/./gcc -nostdinc++
-L/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libstdc++-v3/src
-L/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libstdc++-v3/src/.libs
-nostdinc -B/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/newlib/ -isystem
/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/newlib/targ-include -isystem
/tmp/hpautotest-gcc1/gcc/newlib/libc/include
-B/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libgloss/cris
-L/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libgloss/libnosys
-L/tmp/hpautotest-gcc1/gcc/libgloss/cris
-B/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/bin/
-B/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/lib/ -isystem
/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/include -isystem
/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/sys-include
-I/tmp/hpautotest-gcc1/gcc/libstdc++-v3/../libgcc
-I/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libstdc++-v3/include/cris-elf
-I/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/libstdc++-v3/include
-I/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall
-Wextra -Wwrite-strings -Wcast-qual -fdiagnostics-show-location=once
-ffunction-sections -fdata-sections -frandom-seed=new_opv.lo -g -O2 -c
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc -o new_opv.o
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc: In function 'void*
operator new [](std::size_t)':
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:34:1: error: missing
REG_EH_REGION note in the end of bb 2
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:34:1: error: call
edges for non-call insn in bb 2
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:34:1: error: in
basic block 2:
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:34:1: error: flow
control insn inside a basic block
(call_insn 8 6 50 2 (parallel [
(set (reg:SI 10 r10)
(call (mem:QI (symbol_ref:SI ("_Znwm") [flags 0x41]
<function_decl 0x7f94a90bf300 operator new>) [0 operator new S1 A8])
(const_int 0 [0])))
(clobber (reg:SI 16 srp))
]) /tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:33 222
{*expanded_call_value_non_v32}
(expr_list:REG_EH_REGION (const_int 1 [0x1])
(nil))
(expr_list:REG_UNUSED (use (reg:SI 10 r10))
(nil)))
/tmp/hpautotest-gcc1/gcc/libstdc++-v3/libsupc++/new_opv.cc:34:1: internal
compiler error: in rtl_verify_flow_info_1, at cfgrtl.c:2001
See PR51051.
brgds, H-P