diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-27 23:06:33 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-27 23:06:33 +0000 |
commit | bc5f266a5e18a1501f2ec65a355395edfe2f272e (patch) | |
tree | 8971e4e755934027002c5bc8895d3ab1088c2e5b | |
parent | 8c910840957eb221a38af5a2fb7459381a00fac7 (diff) | |
download | gcc-bc5f266a5e18a1501f2ec65a355395edfe2f272e.tar.gz |
* basic-block.h (basic_block_def): Kill rbi.
(reorder_block_def): Kill; Remove next field (replaced by aux);
move other fields to ...
(rtl_bb_info): ... here.
* bb-reorder.c (find_traces, rotate_loop, find_traces_1_round,
copy_bb, connect_traces, add_labels_and_missing_jumps
fix_up_fall_thru_edges, fix_crossing_conditional_branches,
duplicate_computed_gotos, partition_hot_cold_basic-blocks):
Update to new fields.
* cfg.c (initialize_bb_rbi): Kill.
* cfglayout.c (record_effective_endpoints, fixup_reorder_chain,
fixup_fallthru_exit_predecessor, cfg_layout_duplicate_bb): Update.
* cfgrtl.c (cfg_layout_create_basic_block): Do not initialize rbi.
(try_redirect_by_replacing_jump): Update rbi references.
(cfg_layout_split_block): Likewise.
(cfg_layout_delete_block): Likewise.
(cfg_layout_merge_blocks): Likewise.
* function.c (thread_prologue_and_epilogue_insns): Likewise.
* passes.c (rest_of_handle_sms): Likewise.
* tracer.c (seen, tail_duplicate, layout_superblocks): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101359 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 23 | ||||
-rw-r--r-- | gcc/basic-block.h | 20 | ||||
-rw-r--r-- | gcc/bb-reorder.c | 88 | ||||
-rw-r--r-- | gcc/cfg.c | 10 | ||||
-rw-r--r-- | gcc/cfglayout.c | 97 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 55 | ||||
-rw-r--r-- | gcc/function.c | 2 | ||||
-rw-r--r-- | gcc/passes.c | 4 | ||||
-rw-r--r-- | gcc/tracer.c | 22 |
9 files changed, 157 insertions, 164 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4919e3bfebe..748d3e925ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2005-06-28 Jan Hubicka <jh@suse.cz> + + * basic-block.h (basic_block_def): Kill rbi. + (reorder_block_def): Kill; Remove next field (replaced by aux); + move other fields to ... + (rtl_bb_info): ... here. + * bb-reorder.c (find_traces, rotate_loop, find_traces_1_round, + copy_bb, connect_traces, add_labels_and_missing_jumps + fix_up_fall_thru_edges, fix_crossing_conditional_branches, + duplicate_computed_gotos, partition_hot_cold_basic-blocks): + Update to new fields. + * cfg.c (initialize_bb_rbi): Kill. + * cfglayout.c (record_effective_endpoints, fixup_reorder_chain, + fixup_fallthru_exit_predecessor, cfg_layout_duplicate_bb): Update. + * cfgrtl.c (cfg_layout_create_basic_block): Do not initialize rbi. + (try_redirect_by_replacing_jump): Update rbi references. + (cfg_layout_split_block): Likewise. + (cfg_layout_delete_block): Likewise. + (cfg_layout_merge_blocks): Likewise. + * function.c (thread_prologue_and_epilogue_insns): Likewise. + * passes.c (rest_of_handle_sms): Likewise. + * tracer.c (seen, tail_duplicate, layout_superblocks): Likewise. + 2005-06-27 David Edelsohn <edelsohn@gnu.org> * config/rs6000/rs6000.c (rs6000_file_start): Note PPC405 erratum diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 28a7be6ae99..46bd83d4307 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -233,9 +233,6 @@ struct basic_block_def GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb") struct basic_block_def *prev_bb; struct basic_block_def *next_bb; - /* The data used by basic block copying and reordering functions. */ - struct reorder_block_def * rbi; - union basic_block_il_dependent { struct rtl_bb_info * GTY ((tag ("1"))) rtl; } GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il; @@ -273,25 +270,17 @@ struct rtl_bb_info GTY(()) /* The registers that are live on exit from this block. */ bitmap GTY ((skip (""))) global_live_at_end; -}; - -typedef struct basic_block_def *basic_block; - -/* Structure to hold information about the blocks during reordering and - copying. Needs to be put on a diet. */ -struct reorder_block_def GTY(()) -{ + /* In CFGlayout mode points to insn notes/jumptables to be placed just before + and after the block. */ rtx header; rtx footer; - basic_block next; - /* This field is used by the bb-reorder and tracer passes. */ int visited; }; -typedef struct reorder_block_def *reorder_block_def; +typedef struct basic_block_def *basic_block; #define BB_FREQ_MAX 10000 @@ -940,9 +929,6 @@ extern void reorder_basic_blocks (unsigned int); extern void duplicate_computed_gotos (void); extern void partition_hot_cold_basic_blocks (void); -/* In cfg.c */ -extern void initialize_bb_rbi (basic_block bb); - /* In dominance.c */ enum cdi_direction diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index d4f74dfd36b..e0865ac61dc 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -272,7 +272,7 @@ find_traces (int *n_traces, struct trace *traces) basic_block bb; fprintf (dump_file, "Trace %d (round %d): ", i + 1, traces[i].round + 1); - for (bb = traces[i].first; bb != traces[i].last; bb = bb->rbi->next) + for (bb = traces[i].first; bb != traces[i].last; bb = bb->aux) fprintf (dump_file, "%d [%d] ", bb->index, bb->frequency); fprintf (dump_file, "%d [%d]\n", bb->index, bb->frequency); } @@ -306,14 +306,14 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) FOR_EACH_EDGE (e, ei, bb->succs) if (e->dest != EXIT_BLOCK_PTR - && e->dest->rbi->visited != trace_n + && e->dest->il.rtl->visited != trace_n && (e->flags & EDGE_CAN_FALLTHRU) && !(e->flags & EDGE_COMPLEX)) { if (is_preferred) { /* The best edge is preferred. */ - if (!e->dest->rbi->visited + if (!e->dest->il.rtl->visited || bbd[e->dest->index].start_of_trace >= 0) { /* The current edge E is also preferred. */ @@ -329,7 +329,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) } else { - if (!e->dest->rbi->visited + if (!e->dest->il.rtl->visited || bbd[e->dest->index].start_of_trace >= 0) { /* The current edge E is preferred. */ @@ -352,7 +352,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) } } } - bb = bb->rbi->next; + bb = bb->aux; } while (bb != back_edge->dest); @@ -362,17 +362,17 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) the trace. */ if (back_edge->dest == trace->first) { - trace->first = best_bb->rbi->next; + trace->first = best_bb->aux; } else { basic_block prev_bb; for (prev_bb = trace->first; - prev_bb->rbi->next != back_edge->dest; - prev_bb = prev_bb->rbi->next) + prev_bb->aux != back_edge->dest; + prev_bb = prev_bb->aux) ; - prev_bb->rbi->next = best_bb->rbi->next; + prev_bb->aux = best_bb->aux; /* Try to get rid of uncond jump to cond jump. */ if (single_succ_p (prev_bb)) @@ -393,7 +393,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) /* We have not found suitable loop tail so do no rotation. */ best_bb = back_edge->src; } - best_bb->rbi->next = NULL; + best_bb->aux = NULL; return best_bb; } @@ -402,7 +402,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) static void mark_bb_visited (basic_block bb, int trace) { - bb->rbi->visited = trace; + bb->il.rtl->visited = trace; if (bbd[bb->index].heap) { fibheap_delete_node (bbd[bb->index].heap, bbd[bb->index].node); @@ -496,8 +496,8 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, if (e->dest == EXIT_BLOCK_PTR) continue; - if (e->dest->rbi->visited - && e->dest->rbi->visited != *n_traces) + if (e->dest->il.rtl->visited + && e->dest->il.rtl->visited != *n_traces) continue; if (BB_PARTITION (e->dest) != BB_PARTITION (bb)) @@ -550,7 +550,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, { if (e == best_edge || e->dest == EXIT_BLOCK_PTR - || e->dest->rbi->visited) + || e->dest->il.rtl->visited) continue; key = bb_to_key (e->dest); @@ -611,7 +611,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, if (best_edge) /* Suitable successor was found. */ { - if (best_edge->dest->rbi->visited == *n_traces) + if (best_edge->dest->il.rtl->visited == *n_traces) { /* We do nothing with one basic block loops. */ if (best_edge->dest != bb) @@ -631,7 +631,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, "Rotating loop %d - %d\n", best_edge->dest->index, bb->index); } - bb->rbi->next = best_edge->dest; + bb->aux = best_edge->dest; bbd[best_edge->dest->index].in_trace = (*n_traces) - 1; bb = rotate_loop (best_edge, trace, *n_traces); @@ -681,7 +681,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, if (e != best_edge && (e->flags & EDGE_CAN_FALLTHRU) && !(e->flags & EDGE_COMPLEX) - && !e->dest->rbi->visited + && !e->dest->il.rtl->visited && single_pred_p (e->dest) && !(e->flags & EDGE_CROSSING) && single_succ_p (e->dest) @@ -698,7 +698,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, break; } - bb->rbi->next = best_edge->dest; + bb->aux = best_edge->dest; bbd[best_edge->dest->index].in_trace = (*n_traces) - 1; bb = best_edge->dest; } @@ -715,7 +715,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, FOR_EACH_EDGE (e, ei, bb->succs) { if (e->dest == EXIT_BLOCK_PTR - || e->dest->rbi->visited) + || e->dest->il.rtl->visited) continue; if (bbd[e->dest->index].heap) @@ -757,15 +757,15 @@ copy_bb (basic_block old_bb, edge e, basic_block bb, int trace) BB_COPY_PARTITION (new_bb, old_bb); gcc_assert (e->dest == new_bb); - gcc_assert (!e->dest->rbi->visited); + gcc_assert (!e->dest->il.rtl->visited); if (dump_file) fprintf (dump_file, "Duplicated bb %d (created bb %d)\n", old_bb->index, new_bb->index); - new_bb->rbi->visited = trace; - new_bb->rbi->next = bb->rbi->next; - bb->rbi->next = new_bb; + new_bb->il.rtl->visited = trace; + new_bb->aux = bb->aux; + bb->aux = new_bb; if (new_bb->index >= array_size || last_basic_block > array_size) { @@ -973,7 +973,7 @@ connect_traces (int n_traces, struct trace *traces) } if (best) { - best->src->rbi->next = best->dest; + best->src->aux = best->dest; t2 = bbd[best->src->index].end_of_trace; connected[t2] = true; @@ -988,7 +988,7 @@ connect_traces (int n_traces, struct trace *traces) } if (last_trace >= 0) - traces[last_trace].last->rbi->next = traces[t2].first; + traces[last_trace].last->aux = traces[t2].first; last_trace = t; /* Find the successor traces. */ @@ -1026,7 +1026,7 @@ connect_traces (int n_traces, struct trace *traces) best->src->index, best->dest->index); } t = bbd[best->dest->index].start_of_trace; - traces[last_trace].last->rbi->next = traces[t].first; + traces[last_trace].last->aux = traces[t].first; connected[t] = true; last_trace = t; } @@ -1119,7 +1119,7 @@ connect_traces (int n_traces, struct trace *traces) if (next_bb && next_bb != EXIT_BLOCK_PTR) { t = bbd[next_bb->index].start_of_trace; - traces[last_trace].last->rbi->next = traces[t].first; + traces[last_trace].last->aux = traces[t].first; connected[t] = true; last_trace = t; } @@ -1137,7 +1137,7 @@ connect_traces (int n_traces, struct trace *traces) basic_block bb; fprintf (dump_file, "Final order:\n"); - for (bb = traces[0].first; bb; bb = bb->rbi->next) + for (bb = traces[0].first; bb; bb = bb->aux) fprintf (dump_file, "%d ", bb->index); fprintf (dump_file, "\n"); fflush (dump_file); @@ -1305,7 +1305,7 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges) barrier = emit_barrier_after (new_jump); JUMP_LABEL (new_jump) = label; LABEL_NUSES (label) += 1; - src->rbi->footer = unlink_insn_chain (barrier, barrier); + src->il.rtl->footer = unlink_insn_chain (barrier, barrier); /* Mark edge as non-fallthru. */ crossing_edges[i]->flags &= ~EDGE_FALLTHRU; } /* end: 'if (GET_CODE ... ' */ @@ -1395,7 +1395,7 @@ fix_up_fall_thru_edges (void) the cond jump does). */ if (!cond_jump_crosses - && cur_bb->rbi->next == cond_jump->dest) + && cur_bb->aux == cond_jump->dest) { /* Find label in fall_thru block. We've already added any missing labels, so there must be one. */ @@ -1430,8 +1430,8 @@ fix_up_fall_thru_edges (void) if (new_bb) { - new_bb->rbi->next = cur_bb->rbi->next; - cur_bb->rbi->next = new_bb; + new_bb->aux = cur_bb->aux; + cur_bb->aux = new_bb; /* Make sure new fall-through bb is in same partition as bb it's falling through from. */ @@ -1445,13 +1445,13 @@ fix_up_fall_thru_edges (void) if (new_bb) { barrier = emit_barrier_after (BB_END (new_bb)); - new_bb->rbi->footer = unlink_insn_chain (barrier, + new_bb->il.rtl->footer = unlink_insn_chain (barrier, barrier); } else { barrier = emit_barrier_after (BB_END (cur_bb)); - cur_bb->rbi->footer = unlink_insn_chain (barrier, + cur_bb->il.rtl->footer = unlink_insn_chain (barrier, barrier); } } @@ -1597,8 +1597,8 @@ fix_crossing_conditional_branches (void) conditional jump. */ new_bb = create_basic_block (NULL, NULL, last_bb); - new_bb->rbi->next = last_bb->rbi->next; - last_bb->rbi->next = new_bb; + new_bb->aux = last_bb->aux; + last_bb->aux = new_bb; prev_bb = last_bb; last_bb = new_bb; @@ -1634,7 +1634,7 @@ fix_crossing_conditional_branches (void) barrier = emit_barrier_after (new_jump); JUMP_LABEL (new_jump) = old_label; - new_bb->rbi->footer = unlink_insn_chain (barrier, + new_bb->il.rtl->footer = unlink_insn_chain (barrier, barrier); /* Make sure new bb is in same partition as source @@ -2008,7 +2008,7 @@ duplicate_computed_gotos (void) /* Build the reorder chain for the original order of blocks. */ if (bb->next_bb != EXIT_BLOCK_PTR) - bb->rbi->next = bb->next_bb; + bb->aux = bb->next_bb; /* Obviously the block has to end in a computed jump. */ if (!computed_jump_p (BB_END (bb))) @@ -2048,10 +2048,10 @@ duplicate_computed_gotos (void) /* Duplicate computed gotos. */ FOR_EACH_BB (bb) { - if (bb->rbi->visited) + if (bb->il.rtl->visited) continue; - bb->rbi->visited = 1; + bb->il.rtl->visited = 1; /* BB must have one outgoing edge. That edge must not lead to the exit block or the next block. @@ -2067,9 +2067,9 @@ duplicate_computed_gotos (void) continue; new_bb = duplicate_block (single_succ (bb), single_succ_edge (bb)); - new_bb->rbi->next = bb->rbi->next; - bb->rbi->next = new_bb; - new_bb->rbi->visited = 1; + new_bb->aux = bb->aux; + bb->aux = new_bb; + new_bb->il.rtl->visited = 1; } done: @@ -2156,7 +2156,7 @@ partition_hot_cold_basic_blocks (void) FOR_EACH_BB (cur_bb) if (cur_bb->index >= 0 && cur_bb->next_bb->index >= 0) - cur_bb->rbi->next = cur_bb->next_bb; + cur_bb->aux = cur_bb->next_bb; find_rarely_executed_basic_blocks_and_crossing_edges (crossing_edges, &n_crossing_edges, diff --git a/gcc/cfg.c b/gcc/cfg.c index af8a377b927..2d6a3ca5c33 100644 --- a/gcc/cfg.c +++ b/gcc/cfg.c @@ -136,16 +136,6 @@ alloc_block (void) return bb; } -/* Initialize rbi (the structure containing data used by basic block - duplication and reordering) for the given basic block. */ - -void -initialize_bb_rbi (basic_block bb) -{ - gcc_assert (!bb->rbi); - bb->rbi = ggc_alloc_cleared (sizeof (struct reorder_block_def)); -} - /* Link block B to chain after AFTER. */ void link_block (basic_block b, basic_block after) diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index 44f62914501..16438cce734 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -209,11 +209,11 @@ record_effective_endpoints (void) rtx end; if (PREV_INSN (BB_HEAD (bb)) && next_insn != BB_HEAD (bb)) - bb->rbi->header = unlink_insn_chain (next_insn, + bb->il.rtl->header = unlink_insn_chain (next_insn, PREV_INSN (BB_HEAD (bb))); end = skip_insns_after_block (bb); if (NEXT_INSN (BB_END (bb)) && BB_END (bb) != end) - bb->rbi->footer = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end); + bb->il.rtl->footer = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end); next_insn = NEXT_INSN (BB_END (bb)); } @@ -584,16 +584,16 @@ fixup_reorder_chain (void) for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0; bb != 0; - bb = bb->rbi->next, index++) + bb = bb->aux, index++) { - if (bb->rbi->header) + if (bb->il.rtl->header) { if (insn) - NEXT_INSN (insn) = bb->rbi->header; + NEXT_INSN (insn) = bb->il.rtl->header; else - set_first_insn (bb->rbi->header); - PREV_INSN (bb->rbi->header) = insn; - insn = bb->rbi->header; + set_first_insn (bb->il.rtl->header); + PREV_INSN (bb->il.rtl->header) = insn; + insn = bb->il.rtl->header; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); } @@ -603,10 +603,10 @@ fixup_reorder_chain (void) set_first_insn (BB_HEAD (bb)); PREV_INSN (BB_HEAD (bb)) = insn; insn = BB_END (bb); - if (bb->rbi->footer) + if (bb->il.rtl->footer) { - NEXT_INSN (insn) = bb->rbi->footer; - PREV_INSN (bb->rbi->footer) = insn; + NEXT_INSN (insn) = bb->il.rtl->footer; + PREV_INSN (bb->il.rtl->footer) = insn; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); } @@ -630,7 +630,7 @@ fixup_reorder_chain (void) /* Now add jumps and labels as needed to match the blocks new outgoing edges. */ - for (bb = ENTRY_BLOCK_PTR->next_bb; bb ; bb = bb->rbi->next) + for (bb = ENTRY_BLOCK_PTR->next_bb; bb ; bb = bb->aux) { edge e_fall, e_taken, e; rtx bb_end_insn; @@ -656,7 +656,7 @@ fixup_reorder_chain (void) if (any_condjump_p (bb_end_insn)) { /* If the old fallthru is still next, nothing to do. */ - if (bb->rbi->next == e_fall->dest + if (bb->aux == e_fall->dest || e_fall->dest == EXIT_BLOCK_PTR) continue; @@ -699,7 +699,7 @@ fixup_reorder_chain (void) such as happens at the very end of a function, then we'll need to add a new unconditional jump. Choose the taken edge based on known or assumed probability. */ - else if (bb->rbi->next != e_taken->dest) + else if (bb->aux != e_taken->dest) { rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0); @@ -762,7 +762,7 @@ fixup_reorder_chain (void) continue; /* If the fallthru block is still next, nothing to do. */ - if (bb->rbi->next == e_fall->dest) + if (bb->aux == e_fall->dest) continue; /* A fallthru to exit block. */ @@ -774,10 +774,9 @@ fixup_reorder_chain (void) nb = force_nonfallthru (e_fall); if (nb) { - initialize_bb_rbi (nb); - nb->rbi->visited = 1; - nb->rbi->next = bb->rbi->next; - bb->rbi->next = nb; + nb->il.rtl->visited = 1; + nb->aux = bb->aux; + bb->aux = nb; /* Don't process this new block. */ bb = nb; @@ -802,7 +801,7 @@ fixup_reorder_chain (void) fprintf (dump_file, "Reordered sequence:\n"); for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0; bb; - bb = bb->rbi->next, index++) + bb = bb->aux, index++) { fprintf (dump_file, " %i ", index); if (get_bb_original (bb)) @@ -821,7 +820,7 @@ fixup_reorder_chain (void) bb = ENTRY_BLOCK_PTR->next_bb; index = 0; - for (; bb; prev_bb = bb, bb = bb->rbi->next, index ++) + for (; bb; prev_bb = bb, bb = bb->aux, index ++) { bb->index = index; BASIC_BLOCK (index) = bb; @@ -893,7 +892,7 @@ fixup_fallthru_exit_predecessor (void) if (e->flags & EDGE_FALLTHRU) bb = e->src; - if (bb && bb->rbi->next) + if (bb && bb->aux) { basic_block c = ENTRY_BLOCK_PTR->next_bb; @@ -902,22 +901,21 @@ fixup_fallthru_exit_predecessor (void) if (c == bb) { bb = split_block (bb, NULL)->dest; - initialize_bb_rbi (bb); - bb->rbi->next = c->rbi->next; - c->rbi->next = bb; - bb->rbi->footer = c->rbi->footer; - c->rbi->footer = NULL; + bb->aux = c->aux; + c->aux = bb; + bb->il.rtl->footer = c->il.rtl->footer; + c->il.rtl->footer = NULL; } - while (c->rbi->next != bb) - c = c->rbi->next; + while (c->aux != bb) + c = c->aux; - c->rbi->next = bb->rbi->next; - while (c->rbi->next) - c = c->rbi->next; + c->aux = bb->aux; + while (c->aux) + c = c->aux; - c->rbi->next = bb; - bb->rbi->next = NULL; + c->aux = bb; + bb->aux = NULL; } } @@ -1057,24 +1055,24 @@ cfg_layout_duplicate_bb (basic_block bb) EXIT_BLOCK_PTR->prev_bb); BB_COPY_PARTITION (new_bb, bb); - if (bb->rbi->header) + if (bb->il.rtl->header) { - insn = bb->rbi->header; + insn = bb->il.rtl->header; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); - insn = duplicate_insn_chain (bb->rbi->header, insn); + insn = duplicate_insn_chain (bb->il.rtl->header, insn); if (insn) - new_bb->rbi->header = unlink_insn_chain (insn, get_last_insn ()); + new_bb->il.rtl->header = unlink_insn_chain (insn, get_last_insn ()); } - if (bb->rbi->footer) + if (bb->il.rtl->footer) { - insn = bb->rbi->footer; + insn = bb->il.rtl->footer; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); - insn = duplicate_insn_chain (bb->rbi->footer, insn); + insn = duplicate_insn_chain (bb->il.rtl->footer, insn); if (insn) - new_bb->rbi->footer = unlink_insn_chain (insn, get_last_insn ()); + new_bb->il.rtl->footer = unlink_insn_chain (insn, get_last_insn ()); } if (bb->il.rtl->global_live_at_start) @@ -1100,11 +1098,6 @@ cfg_layout_duplicate_bb (basic_block bb) void cfg_layout_initialize (unsigned int flags) { - basic_block bb; - - FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb) - initialize_bb_rbi (bb); - initialize_original_copy_tables (); cfg_layout_rtl_register_cfg_hooks (); @@ -1142,8 +1135,8 @@ break_superblocks (void) free (superblocks); } -/* Finalize the changes: reorder insn list according to the sequence, enter - compensation code, rebuild scope forest. */ +/* Finalize the changes: reorder insn list according to the sequence specified + by aux pointers, enter compensation code, rebuild scope forest. */ void cfg_layout_finalize (void) @@ -1166,7 +1159,11 @@ cfg_layout_finalize (void) verify_insn_chain (); #endif FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb) - bb->rbi = NULL; + { + bb->il.rtl->header = bb->il.rtl->footer = NULL; + bb->aux = NULL; + bb->il.rtl->visited = 0; + } break_superblocks (); diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 432efa5bcc7..b269ba44b23 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -345,7 +345,6 @@ cfg_layout_create_basic_block (void *head, void *end, basic_block after) { basic_block newbb = rtl_create_basic_block (head, end, after); - initialize_bb_rbi (newbb); return newbb; } @@ -713,7 +712,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout) /* Selectively unlink whole insn chain. */ if (in_cfglayout) { - rtx insn = src->rbi->footer; + rtx insn = src->il.rtl->footer; delete_insn_chain (kill_from, BB_END (src)); @@ -725,7 +724,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout) if (PREV_INSN (insn)) NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); else - src->rbi->footer = NEXT_INSN (insn); + src->il.rtl->footer = NEXT_INSN (insn); if (NEXT_INSN (insn)) PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); } @@ -2490,8 +2489,8 @@ cfg_layout_split_block (basic_block bb, void *insnp) rtx insn = insnp; basic_block new_bb = rtl_split_block (bb, insn); - new_bb->rbi->footer = bb->rbi->footer; - bb->rbi->footer = NULL; + new_bb->il.rtl->footer = bb->il.rtl->footer; + bb->il.rtl->footer = NULL; return new_bb; } @@ -2597,24 +2596,24 @@ cfg_layout_delete_block (basic_block bb) { rtx insn, next, prev = PREV_INSN (BB_HEAD (bb)), *to, remaints; - if (bb->rbi->header) + if (bb->il.rtl->header) { next = BB_HEAD (bb); if (prev) - NEXT_INSN (prev) = bb->rbi->header; + NEXT_INSN (prev) = bb->il.rtl->header; else - set_first_insn (bb->rbi->header); - PREV_INSN (bb->rbi->header) = prev; - insn = bb->rbi->header; + set_first_insn (bb->il.rtl->header); + PREV_INSN (bb->il.rtl->header) = prev; + insn = bb->il.rtl->header; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); NEXT_INSN (insn) = next; PREV_INSN (next) = insn; } next = NEXT_INSN (BB_END (bb)); - if (bb->rbi->footer) + if (bb->il.rtl->footer) { - insn = bb->rbi->footer; + insn = bb->il.rtl->footer; while (insn) { if (BARRIER_P (insn)) @@ -2622,7 +2621,7 @@ cfg_layout_delete_block (basic_block bb) if (PREV_INSN (insn)) NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); else - bb->rbi->footer = NEXT_INSN (insn); + bb->il.rtl->footer = NEXT_INSN (insn); if (NEXT_INSN (insn)) PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); } @@ -2630,11 +2629,11 @@ cfg_layout_delete_block (basic_block bb) break; insn = NEXT_INSN (insn); } - if (bb->rbi->footer) + if (bb->il.rtl->footer) { insn = BB_END (bb); - NEXT_INSN (insn) = bb->rbi->footer; - PREV_INSN (bb->rbi->footer) = insn; + NEXT_INSN (insn) = bb->il.rtl->footer; + PREV_INSN (bb->il.rtl->footer) = insn; while (NEXT_INSN (insn)) insn = NEXT_INSN (insn); NEXT_INSN (insn) = next; @@ -2645,12 +2644,10 @@ cfg_layout_delete_block (basic_block bb) } } if (bb->next_bb != EXIT_BLOCK_PTR) - to = &bb->next_bb->rbi->header; + to = &bb->next_bb->il.rtl->header; else to = &cfg_layout_function_footer; - bb->rbi = NULL; - rtl_delete_block (bb); if (prev) @@ -2727,13 +2724,13 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) gcc_assert (!JUMP_P (BB_END (a))); /* Possible line number notes should appear in between. */ - if (b->rbi->header) + if (b->il.rtl->header) { rtx first = BB_END (a), last; - last = emit_insn_after_noloc (b->rbi->header, BB_END (a)); + last = emit_insn_after_noloc (b->il.rtl->header, BB_END (a)); delete_insn_chain (NEXT_INSN (first), last); - b->rbi->header = NULL; + b->il.rtl->header = NULL; } /* In the case basic blocks are not adjacent, move them around. */ @@ -2769,20 +2766,20 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) } /* Possible tablejumps and barriers should appear after the block. */ - if (b->rbi->footer) + if (b->il.rtl->footer) { - if (!a->rbi->footer) - a->rbi->footer = b->rbi->footer; + if (!a->il.rtl->footer) + a->il.rtl->footer = b->il.rtl->footer; else { - rtx last = a->rbi->footer; + rtx last = a->il.rtl->footer; while (NEXT_INSN (last)) last = NEXT_INSN (last); - NEXT_INSN (last) = b->rbi->footer; - PREV_INSN (b->rbi->footer) = last; + NEXT_INSN (last) = b->il.rtl->footer; + PREV_INSN (b->il.rtl->footer) = last; } - b->rbi->footer = NULL; + b->il.rtl->footer = NULL; } a->il.rtl->global_live_at_end = b->il.rtl->global_live_at_end; diff --git a/gcc/function.c b/gcc/function.c index 7ab698bd985..d5145606ce1 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5233,7 +5233,7 @@ thread_prologue_and_epilogue_insns (rtx f ATTRIBUTE_UNUSED) cfg_layout_initialize (0); FOR_EACH_BB (cur_bb) if (cur_bb->index >= 0 && cur_bb->next_bb->index >= 0) - cur_bb->rbi->next = cur_bb->next_bb; + cur_bb->aux = cur_bb->next_bb; cfg_layout_finalize (); } epilogue_done: diff --git a/gcc/passes.c b/gcc/passes.c index 126427f6cf4..6910f333ea3 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -600,7 +600,7 @@ rest_of_handle_sms (void) /* Finalize layout changes. */ FOR_EACH_BB (bb) if (bb->next_bb != EXIT_BLOCK_PTR) - bb->rbi->next = bb->next_bb; + bb->aux = bb->next_bb; cfg_layout_finalize (); free_dominance_info (CDI_DOMINATORS); ggc_collect (); @@ -1187,7 +1187,7 @@ rest_of_handle_loop2 (void) /* Finalize layout changes. */ FOR_EACH_BB (bb) if (bb->next_bb != EXIT_BLOCK_PTR) - bb->rbi->next = bb->next_bb; + bb->aux = bb->next_bb; cfg_layout_finalize (); cleanup_cfg (CLEANUP_EXPENSIVE); diff --git a/gcc/tracer.c b/gcc/tracer.c index cddc5b90a44..5d3aaf4bbbe 100644 --- a/gcc/tracer.c +++ b/gcc/tracer.c @@ -65,7 +65,7 @@ static int branch_ratio_cutoff; /* Return true if BB has been seen - it is connected to some trace already. */ -#define seen(bb) (bb->rbi->visited || bb->rbi->next) +#define seen(bb) (bb->il.rtl->visited || bb->aux) /* Return true if we should ignore the basic block for purposes of tracing. */ static bool @@ -292,8 +292,8 @@ tail_duplicate (void) fprintf (dump_file, "Duplicated %i as %i [%i]\n", old->index, bb2->index, bb2->frequency); } - bb->rbi->next = bb2; - bb2->rbi->visited = 1; + bb->aux = bb2; + bb2->il.rtl->visited = 1; bb = bb2; /* In case the trace became infrequent, stop duplicating. */ if (ignore_bb_p (bb)) @@ -328,28 +328,28 @@ layout_superblocks (void) { edge_iterator ei; edge e, best = NULL; - while (end->rbi->next) - end = end->rbi->next; + while (end->aux) + end = end->aux; FOR_EACH_EDGE (e, ei, end->succs) if (e->dest != EXIT_BLOCK_PTR && e->dest != single_succ (ENTRY_BLOCK_PTR) - && !e->dest->rbi->visited + && !e->dest->il.rtl->visited && (!best || EDGE_FREQUENCY (e) > EDGE_FREQUENCY (best))) best = e; if (best) { - end->rbi->next = best->dest; - best->dest->rbi->visited = 1; + end->aux = best->dest; + best->dest->il.rtl->visited = 1; } else for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb) { - if (!bb->rbi->visited) + if (!bb->il.rtl->visited) { - end->rbi->next = bb; - bb->rbi->visited = 1; + end->aux = bb; + bb->il.rtl->visited = 1; break; } } |