X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fbt-load.c;h=abfe8cd3dde285e39179debecddd2425806fdf28;hb=e899394fb23ac27aa81b27136052a13e7f2b840d;hp=a3974293d6c945a34f3bcb594aad4e1661843b1f;hpb=67900a4f263f802b9aa076b2ae90954046835da3;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/bt-load.c b/gcc/bt-load.c index a3974293d6c..abfe8cd3dde 100644 --- a/gcc/bt-load.c +++ b/gcc/bt-load.c @@ -237,8 +237,8 @@ insn_sets_btr_p (rtx insn, int check_const, int *regno) if (REG_P (dest) && TEST_HARD_REG_BIT (all_btrs, REGNO (dest))) { - if (btr_referenced_p (src, NULL)) - abort(); + gcc_assert (!btr_referenced_p (src, NULL)); + if (!check_const || CONSTANT_P (src)) { if (regno) @@ -821,21 +821,21 @@ block_at_edge_of_live_range_p (int bb, btr_def def) static void clear_btr_from_live_range (btr_def def) { - int bb; - - EXECUTE_IF_SET_IN_BITMAP - (def->live_range, 0, bb, - { - if ((!def->other_btr_uses_before_def - && !def->other_btr_uses_after_use) - || !block_at_edge_of_live_range_p (bb, def)) - { - CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr); - CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr); - if (dump_file) - dump_btrs_live (bb); - } - }); + unsigned bb; + bitmap_iterator bi; + + EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi) + { + if ((!def->other_btr_uses_before_def + && !def->other_btr_uses_after_use) + || !block_at_edge_of_live_range_p (bb, def)) + { + CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr); + CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr); + if (dump_file) + dump_btrs_live (bb); + } + } } @@ -845,15 +845,16 @@ clear_btr_from_live_range (btr_def def) static void add_btr_to_live_range (btr_def def) { - int bb; - EXECUTE_IF_SET_IN_BITMAP - (def->live_range, 0, bb, - { - SET_HARD_REG_BIT (btrs_live[bb], def->btr); - SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr); - if (dump_file) - dump_btrs_live (bb); - }); + unsigned bb; + bitmap_iterator bi; + + EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi) + { + SET_HARD_REG_BIT (btrs_live[bb], def->btr); + SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr); + if (dump_file) + dump_btrs_live (bb); + } } /* Update a live range to contain the basic block NEW_BLOCK, and all @@ -875,11 +876,14 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range, if (dominated_by_p (CDI_DOMINATORS, new_bb, head_bb)) *tos++ = new_bb; - else if (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb)) + else { edge e; + edge_iterator ei; int new_block = new_bb->index; + gcc_assert (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb)); + bitmap_set_bit (live_range, new_block); if (flag_btr_bb_exclusive) IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[new_block]); @@ -897,11 +901,9 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range, dump_hard_reg_set (*btrs_live_in_range); fprintf (dump_file, "\n"); } - for (e = head_bb->pred; e; e = e->pred_next) + FOR_EACH_EDGE (e, ei, head_bb->preds) *tos++ = e->src; } - else - abort(); while (tos != worklist) { @@ -909,6 +911,7 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range, if (!bitmap_bit_p (live_range, bb->index)) { edge e; + edge_iterator ei; bitmap_set_bit (live_range, bb->index); IOR_HARD_REG_SET (*btrs_live_in_range, @@ -922,7 +925,7 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range, fprintf (dump_file, "\n"); } - for (e = bb->pred; e != NULL; e = e->pred_next) + FOR_EACH_EDGE (e, ei, bb->preds) { basic_block pred = e->src; if (!bitmap_bit_p (live_range, pred->index)) @@ -972,11 +975,9 @@ btr_def_live_range (btr_def def, HARD_REG_SET *btrs_live_in_range) def->live_range = BITMAP_XMALLOC (); bitmap_set_bit (def->live_range, def->bb->index); - if (flag_btr_bb_exclusive) - COPY_HARD_REG_SET (*btrs_live_in_range, btrs_live[def->bb->index]); - else - COPY_HARD_REG_SET (*btrs_live_in_range, - btrs_live_at_end[def->bb->index]); + COPY_HARD_REG_SET (*btrs_live_in_range, + (flag_btr_bb_exclusive + ? btrs_live : btrs_live_at_end)[def->bb->index]); for (user = def->uses; user != NULL; user = user->next) augment_live_range (def->live_range, btrs_live_in_range, @@ -988,24 +989,17 @@ btr_def_live_range (btr_def def, HARD_REG_SET *btrs_live_in_range) the set of target registers live over it, because migration of other PT instructions may have affected it. */ - int bb; - int def_bb = def->bb->index; + unsigned bb; + unsigned def_bb = flag_btr_bb_exclusive ? -1 : def->bb->index; + bitmap_iterator bi; CLEAR_HARD_REG_SET (*btrs_live_in_range); - if (flag_btr_bb_exclusive) - EXECUTE_IF_SET_IN_BITMAP - (def->live_range, 0, bb, - { - IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[bb]); - }); - else - EXECUTE_IF_SET_IN_BITMAP - (def->live_range, 0, bb, - { - IOR_HARD_REG_SET (*btrs_live_in_range, - (def_bb == bb - ? btrs_live_at_end : btrs_live) [bb]); - }); + EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi) + { + IOR_HARD_REG_SET (*btrs_live_in_range, + (def_bb == bb + ? btrs_live_at_end : btrs_live) [bb]); + } } if (!def->other_btr_uses_before_def && !def->other_btr_uses_after_use) @@ -1146,8 +1140,8 @@ move_btr_def (basic_block new_def_bb, int btr, btr_def def, bitmap live_range, { insp = BB_END (b); for (insp = BB_END (b); ! INSN_P (insp); insp = PREV_INSN (insp)) - if (insp == BB_HEAD (b)) - abort (); + gcc_assert (insp != BB_HEAD (b)); + if (JUMP_P (insp) || can_throw_internal (insp)) insp = PREV_INSN (insp); }