Fix bb-reorder problem with degenerate cond_jump (PR68182)
The code mistakenly thinks any cond_jump has two successors. This is not true if both destinations are the same, as can happen with weird patterns as in the PR. PR rtl-optimization/68182 * gcc/bb-reorder.c (reorder_basic_blocks_simple): Treat a conditional branch with only one successor just like unconditional branches. From-SVN: r229983
This commit is contained in:
parent
4f70cb39c0
commit
d4c8d5ede1
2 changed files with 10 additions and 4 deletions
|
@ -1,4 +1,10 @@
|
|||
2015-11-08 Jeff Law <jeff@redhat.com>
|
||||
2015-11-09 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR rtl-optimization/68182
|
||||
* gcc/bb-reorder.c (reorder_basic_blocks_simple): Treat a conditional
|
||||
branch with only one successor just like unconditional branches.
|
||||
|
||||
2015-11-08 Jeff Law <jeff@redhat.com>
|
||||
|
||||
* tree-ssa-threadupdate.c (register_jump_thraed): Assert that a
|
||||
non-FSM path has no edges marked with EDGE_DFS_BACK.
|
||||
|
|
|
@ -2304,7 +2304,9 @@ reorder_basic_blocks_simple (void)
|
|||
if (JUMP_P (end) && extract_asm_operands (end))
|
||||
continue;
|
||||
|
||||
if (any_condjump_p (end))
|
||||
if (single_succ_p (bb))
|
||||
edges[n++] = EDGE_SUCC (bb, 0);
|
||||
else if (any_condjump_p (end))
|
||||
{
|
||||
edge e0 = EDGE_SUCC (bb, 0);
|
||||
edge e1 = EDGE_SUCC (bb, 1);
|
||||
|
@ -2315,8 +2317,6 @@ reorder_basic_blocks_simple (void)
|
|||
edges[n++] = e0;
|
||||
edges[n++] = e1;
|
||||
}
|
||||
else if (single_succ_p (bb))
|
||||
edges[n++] = EDGE_SUCC (bb, 0);
|
||||
}
|
||||
|
||||
/* Sort the edges, the most desirable first. When optimizing for size
|
||||
|
|
Loading…
Add table
Reference in a new issue