diff options
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r-- | gcc/regrename.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c index 4297da7..5161a4b 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -201,7 +201,7 @@ regrename_optimize () { int tick[FIRST_PSEUDO_REGISTER]; int this_tick = 0; - int b; + basic_block bb; char *first_obj; memset (tick, 0, sizeof tick); @@ -209,9 +209,8 @@ regrename_optimize () gcc_obstack_init (&rename_obstack); first_obj = (char *) obstack_alloc (&rename_obstack, 0); - for (b = 0; b < n_basic_blocks; b++) + FOR_EACH_BB (bb) { - basic_block bb = BASIC_BLOCK (b); struct du_chain *all_chains = 0; HARD_REG_SET unavailable; HARD_REG_SET regs_seen; @@ -219,7 +218,7 @@ regrename_optimize () CLEAR_HARD_REG_SET (unavailable); if (rtl_dump_file) - fprintf (rtl_dump_file, "\nBasic block %d:\n", b); + fprintf (rtl_dump_file, "\nBasic block %d:\n", bb->index); all_chains = build_def_use (bb); @@ -1726,30 +1725,30 @@ copyprop_hardreg_forward () { struct value_data *all_vd; bool need_refresh; - int b; + basic_block bb, bbp; need_refresh = false; all_vd = xmalloc (sizeof (struct value_data) * n_basic_blocks); - for (b = 0; b < n_basic_blocks; b++) + FOR_EACH_BB (bb) { - basic_block bb = BASIC_BLOCK (b); - /* If a block has a single predecessor, that we've already processed, begin with the value data that was live at the end of the predecessor block. */ /* ??? Ought to use more intelligent queueing of blocks. */ + if (bb->pred) + for (bbp = bb; bbp && bbp != bb->pred->src; bbp = bbp->prev_bb); if (bb->pred && ! bb->pred->pred_next && ! (bb->pred->flags & (EDGE_ABNORMAL_CALL | EDGE_EH)) - && bb->pred->src->index != ENTRY_BLOCK - && bb->pred->src->index < b) - all_vd[b] = all_vd[bb->pred->src->index]; + && bb->pred->src != ENTRY_BLOCK_PTR + && bbp) + all_vd[bb->index] = all_vd[bb->pred->src->index]; else - init_value_data (all_vd + b); + init_value_data (all_vd + bb->index); - if (copyprop_hardreg_forward_1 (bb, all_vd + b)) + if (copyprop_hardreg_forward_1 (bb, all_vd + bb->index)) need_refresh = true; } |