From d4c8d5ede1f35643163942af46bcb51d3c03c8d7 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Mon, 9 Nov 2015 04:57:19 +0100 Subject: 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 --- gcc/bb-reorder.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'gcc/bb-reorder.c') diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 5f1c2cc..950b1a1 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -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 -- cgit v1.1