From 6d9cc15b64b2a3f2520f73df963fae2c1ea34abe Mon Sep 17 00:00:00 2001 From: Josef Zlomek Date: Wed, 19 Feb 2003 19:12:54 +0100 Subject: [PATCH] bb-reorder.c (find_traces_1_round): Fixed condition for small destination block with multiple predecessors. * bb-reorder.c (find_traces_1_round): Fixed condition for small destination block with multiple predecessors. (connect_traces): Check whether the block is a start of trace. From-SVN: r63127 --- gcc/ChangeLog | 6 ++++++ gcc/bb-reorder.c | 31 +++++++++++++++++-------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9585c69c212..d083a31cf0c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-02-19 Josef Zlomek + + * bb-reorder.c (find_traces_1_round): Fixed condition for small + destination block with multiple predecessors. + (connect_traces): Check whether the block is a start of trace. + Wed Feb 19 19:00:24 CET 2003 Jan Hubicka * calls.c (expand_call): Update call of INIT_CUMULATIVE_ARGS diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 49889ee2ba3..f89900d470b 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -448,12 +448,6 @@ find_traces_1_round (branch_th, exec_th, count_th, traces, n_traces, round, || prob < branch_th || freq < exec_th || e->count < count_th) continue; - /* If the destination has multiple precessesors, and can be - duplicated cheaper than a jump, don't allow it to be added - to a trace. We'll duplicate it when connecting traces. */ - if (e->dest->pred->pred_next && copy_bb_p (e->dest, 0)) - continue; - if (better_edge_p (bb, e, prob, freq, best_prob, best_freq)) { best_edge = e; @@ -462,6 +456,13 @@ find_traces_1_round (branch_th, exec_th, count_th, traces, n_traces, round, } } + /* If the best destination has multiple precessesors, and can be + duplicated cheaper than a jump, don't allow it to be added + to a trace. We'll duplicate it when connecting traces. */ + if (best_edge && best_edge->dest->pred->pred_next + && copy_bb_p (best_edge->dest, 0)) + best_edge = NULL; + /* Add all non-selected successors to the heaps. */ for (e = bb->succ; e; e = e->succ_next) { @@ -922,15 +923,17 @@ connect_traces (n_traces, traces) edge best2 = NULL; int best2_len = 0; - /* If the destination trace is only one block - long, then no need to search the successor + /* If the destination is a start of a trace which is only + one block long, then no need to search the successor blocks of the trace. Accept it. */ - if (traces[bbd[e->dest->index].start_of_trace].length == 1) - { - best = e; - try_copy = true; - continue; - } + if (bbd[e->dest->index].start_of_trace >= 0 + && traces[bbd[e->dest->index].start_of_trace].length + == 1) + { + best = e; + try_copy = true; + continue; + } for (e2 = e->dest->succ; e2; e2 = e2->succ_next) { -- 2.30.2