re PR rtl-optimization/51051 (build fails on cris-elf building libstdc++-v3)
PR rtl-optimization/51051 * cfgrtl.c (cfg_layout_can_merge_blocks_p): Return FALSE if the move would cause fallthrough into the exit block. From-SVN: r181371
This commit is contained in:
parent
2747a04662
commit
894a84b5ed
@ -1,3 +1,9 @@
|
||||
2011-11-15 Bernd Schmidt <bernds@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/51051
|
||||
* cfgrtl.c (cfg_layout_can_merge_blocks_p): Return FALSE if the
|
||||
move would cause fallthrough into the exit block.
|
||||
|
||||
2011-11-14 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (emit_load_locked): Assert the mode is handled.
|
||||
|
10
gcc/cfgrtl.c
10
gcc/cfgrtl.c
@ -2735,6 +2735,16 @@ cfg_layout_can_merge_blocks_p (basic_block a, basic_block b)
|
||||
if (BB_PARTITION (a) != BB_PARTITION (b))
|
||||
return false;
|
||||
|
||||
/* If we would end up moving B's instructions, make sure it doesn't fall
|
||||
through into the exit block, since we cannot recover from a fallthrough
|
||||
edge into the exit block occurring in the middle of a function. */
|
||||
if (NEXT_INSN (BB_END (a)) != BB_HEAD (b))
|
||||
{
|
||||
edge e = find_fallthru_edge (b->succs);
|
||||
if (e && e->dest == EXIT_BLOCK_PTR)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* There must be exactly one edge in between the blocks. */
|
||||
return (single_succ_p (a)
|
||||
&& single_succ (a) == b
|
||||
|
Loading…
Reference in New Issue
Block a user