diff options
author | eraman <eraman@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-31 23:28:45 +0000 |
---|---|---|
committer | eraman <eraman@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-31 23:28:45 +0000 |
commit | e065d0bc401f9798d48e7866ec7ca75f7ebafc4a (patch) | |
tree | 00353207588e4eea26cb41263c8d1cd8745f0aa1 /gcc/stmt.c | |
parent | 2dc9831fc1c17840efc629788027aeededa44d2f (diff) | |
download | gcc-e065d0bc401f9798d48e7866ec7ca75f7ebafc4a.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193052 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r-- | gcc/stmt.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c index 14a28abcc58..b84fa670e70 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); } |