> From: Alan Modra <amo...@gmail.com> > 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