bb-reorder: Remove a misfiring micro-optimization (PR96475)
When the compgotos pass copies the tail of blocks ending in an indirect jump, there is a micro-optimization to not copy the last one, since the original block will then just be deleted. This does not work properly if cleanup_cfg does not merge all pairs of blocks we expect it to. It also does not work if that last block can be merged into multiple predecessors. 2020-09-09 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/96475 * bb-reorder.c (maybe_duplicate_computed_goto): Remove single_pred_p micro-optimization.
This commit is contained in:
parent
ad2a37157d
commit
69ca5f3a98
1 changed files with 3 additions and 7 deletions
|
@ -2680,9 +2680,6 @@ make_pass_reorder_blocks (gcc::context *ctxt)
|
||||||
static bool
|
static bool
|
||||||
maybe_duplicate_computed_goto (basic_block bb, int max_size)
|
maybe_duplicate_computed_goto (basic_block bb, int max_size)
|
||||||
{
|
{
|
||||||
if (single_pred_p (bb))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/* Make sure that the block is small enough. */
|
/* Make sure that the block is small enough. */
|
||||||
rtx_insn *insn;
|
rtx_insn *insn;
|
||||||
FOR_BB_INSNS (bb, insn)
|
FOR_BB_INSNS (bb, insn)
|
||||||
|
@ -2700,10 +2697,9 @@ maybe_duplicate_computed_goto (basic_block bb, int max_size)
|
||||||
{
|
{
|
||||||
basic_block pred = e->src;
|
basic_block pred = e->src;
|
||||||
|
|
||||||
/* Do not duplicate BB into PRED if that is the last predecessor, or if
|
/* Do not duplicate BB into PRED if we cannot merge a copy of BB
|
||||||
we cannot merge a copy of BB with PRED. */
|
with PRED. */
|
||||||
if (single_pred_p (bb)
|
if (!single_succ_p (pred)
|
||||||
|| !single_succ_p (pred)
|
|
||||||
|| e->flags & EDGE_COMPLEX
|
|| e->flags & EDGE_COMPLEX
|
||||||
|| pred->index < NUM_FIXED_BLOCKS
|
|| pred->index < NUM_FIXED_BLOCKS
|
||||||
|| (JUMP_P (BB_END (pred)) && !simplejump_p (BB_END (pred)))
|
|| (JUMP_P (BB_END (pred)) && !simplejump_p (BB_END (pred)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue