aboutsummaryrefslogtreecommitdiff
path: root/gcc/stmt.c
diff options
context:
space:
mode:
authorEaswaran Raman <eraman@google.com>2012-10-31 23:28:45 +0000
committerEaswaran Raman <eraman@gcc.gnu.org>2012-10-31 23:28:45 +0000
commit0f379f762d2f3e7f84c038368b9e32c50c8deaab (patch)
tree00353207588e4eea26cb41263c8d1cd8745f0aa1 /gcc/stmt.c
parent5d59b5e18a878c2201471e529c40f15d49905fc8 (diff)
downloadgcc-0f379f762d2f3e7f84c038368b9e32c50c8deaab.zip
gcc-0f379f762d2f3e7f84c038368b9e32c50c8deaab.tar.gz
gcc-0f379f762d2f3e7f84c038368b9e32c50c8deaab.tar.bz2
re PR target/54938 (sh libgcc_unpack_df.o fails to build: ../../../srcw/libgcc/fp-bit.h:221:19: internal compiler error: in emit_cmp_and_jump_insn_1, at optabs.c:4273)
2012-10-31 Easwaran Raman <eraman@google.com> PR target/54938 PR middle-end/54957 * optabs.c (emit_cmp_and_jump_insn_1): Add REG_BR_PROB note only if it doesn't already exist. * stmt.c (get_outgoing_edge_probs): Return 0 if BB is NULL. (emit_case_dispatch_table): Handle the case where STMT_BB is NULL. (expand_sjlj_dispatch_table): Pass BB containing before_case to emit_case_dispatch_table. From-SVN: r193052
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r--gcc/stmt.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 14a28ab..b84fa67 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1867,6 +1867,8 @@ get_outgoing_edge_probs (basic_block bb)
edge e;
edge_iterator ei;
int prob_sum = 0;
+ if (!bb)
+ return 0;
FOR_EACH_EDGE(e, ei, bb->succs)
prob_sum += e->probability;
return prob_sum;
@@ -1916,8 +1918,8 @@ emit_case_dispatch_table (tree index_expr, tree index_type,
rtx fallback_label = label_rtx (case_list->code_label);
rtx table_label = gen_label_rtx ();
bool has_gaps = false;
- edge default_edge = EDGE_SUCC(stmt_bb, 0);
- int default_prob = default_edge->probability;
+ edge default_edge = stmt_bb ? EDGE_SUCC(stmt_bb, 0) : NULL;
+ int default_prob = default_edge ? default_edge->probability : 0;
int base = get_outgoing_edge_probs (stmt_bb);
bool try_with_tablejump = false;
@@ -1997,7 +1999,8 @@ emit_case_dispatch_table (tree index_expr, tree index_type,
default_prob = 0;
}
- default_edge->probability = default_prob;
+ if (default_edge)
+ default_edge->probability = default_prob;
/* We have altered the probability of the default edge. So the probabilities
of all other edges need to be adjusted so that it sums up to
@@ -2289,7 +2292,8 @@ expand_sjlj_dispatch_table (rtx dispatch_index,
emit_case_dispatch_table (index_expr, index_type,
case_list, default_label,
- minval, maxval, range, NULL);
+ minval, maxval, range,
+ BLOCK_FOR_INSN (before_case));
emit_label (default_label);
free_alloc_pool (case_node_pool);
}