diff options
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 84 |
1 files changed, 28 insertions, 56 deletions
@@ -3635,16 +3635,15 @@ update_equiv_regs (void) static void add_store_equivs (void) { - bitmap_head seen_insns; + auto_bitmap seen_insns; - bitmap_initialize (&seen_insns, NULL); for (rtx_insn *insn = get_insns (); insn; insn = NEXT_INSN (insn)) { rtx set, src, dest; unsigned regno; rtx_insn *init_insn; - bitmap_set_bit (&seen_insns, INSN_UID (insn)); + bitmap_set_bit (seen_insns, INSN_UID (insn)); if (! INSN_P (insn)) continue; @@ -3665,7 +3664,7 @@ add_store_equivs (void) && ! reg_equiv[regno].pdx_subregs && reg_equiv[regno].init_insns != NULL && (init_insn = reg_equiv[regno].init_insns->insn ()) != 0 - && bitmap_bit_p (&seen_insns, INSN_UID (init_insn)) + && bitmap_bit_p (seen_insns, INSN_UID (init_insn)) && ! find_reg_note (init_insn, REG_EQUIV, NULL_RTX) && validate_equiv_mem (init_insn, src, dest) == valid_reload && ! memref_used_between_p (dest, init_insn, insn) @@ -3685,7 +3684,6 @@ add_store_equivs (void) INSN_UID (insn)); } } - bitmap_clear (&seen_insns); } /* Scan all regs killed in an insn to see if any of them are registers @@ -4485,9 +4483,8 @@ find_moveable_pseudos (void) moved freely downwards, but are otherwise transparent to a block. */ bitmap_head *bb_moveable_reg_sets = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun)); - bitmap_head live, used, set, interesting, unusable_as_input; + auto_bitmap live, used, set, interesting, unusable_as_input; bitmap_iterator bi; - bitmap_initialize (&interesting, 0); first_moveable_pseudo = max_regs; pseudo_replaced_reg.release (); @@ -4497,10 +4494,6 @@ find_moveable_pseudos (void) calculate_dominance_info (CDI_DOMINATORS); i = 0; - bitmap_initialize (&live, 0); - bitmap_initialize (&used, 0); - bitmap_initialize (&set, 0); - bitmap_initialize (&unusable_as_input, 0); FOR_EACH_BB_FN (bb, cfun) { rtx_insn *insn; @@ -4511,13 +4504,13 @@ find_moveable_pseudos (void) bitmap_initialize (local, 0); bitmap_initialize (transp, 0); bitmap_initialize (moveable, 0); - bitmap_copy (&live, df_get_live_out (bb)); - bitmap_and_into (&live, df_get_live_in (bb)); - bitmap_copy (transp, &live); + bitmap_copy (live, df_get_live_out (bb)); + bitmap_and_into (live, df_get_live_in (bb)); + bitmap_copy (transp, live); bitmap_clear (moveable); - bitmap_clear (&live); - bitmap_clear (&used); - bitmap_clear (&set); + bitmap_clear (live); + bitmap_clear (used); + bitmap_clear (set); FOR_BB_INSNS (bb, insn) if (NONDEBUG_INSN_P (insn)) { @@ -4531,20 +4524,20 @@ find_moveable_pseudos (void) if (use && def && DF_REF_REGNO (use) == DF_REF_REGNO (def) - && !bitmap_bit_p (&set, DF_REF_REGNO (use)) + && !bitmap_bit_p (set, DF_REF_REGNO (use)) && rtx_moveable_p (&PATTERN (insn), OP_IN)) { unsigned regno = DF_REF_REGNO (use); bitmap_set_bit (moveable, regno); - bitmap_set_bit (&set, regno); - bitmap_set_bit (&used, regno); + bitmap_set_bit (set, regno); + bitmap_set_bit (used, regno); bitmap_clear_bit (transp, regno); continue; } FOR_EACH_INSN_INFO_USE (use, insn_info) { unsigned regno = DF_REF_REGNO (use); - bitmap_set_bit (&used, regno); + bitmap_set_bit (used, regno); if (bitmap_clear_bit (moveable, regno)) bitmap_clear_bit (transp, regno); } @@ -4552,17 +4545,13 @@ find_moveable_pseudos (void) FOR_EACH_INSN_INFO_DEF (def, insn_info) { unsigned regno = DF_REF_REGNO (def); - bitmap_set_bit (&set, regno); + bitmap_set_bit (set, regno); bitmap_clear_bit (transp, regno); bitmap_clear_bit (moveable, regno); } } } - bitmap_clear (&live); - bitmap_clear (&used); - bitmap_clear (&set); - FOR_EACH_BB_FN (bb, cfun) { bitmap local = bb_local + bb->index; @@ -4605,7 +4594,7 @@ find_moveable_pseudos (void) if (dump_file) fprintf (dump_file, "Ignoring reg %d, has equiv memory\n", regno); - bitmap_set_bit (&unusable_as_input, regno); + bitmap_set_bit (unusable_as_input, regno); continue; } @@ -4665,7 +4654,7 @@ find_moveable_pseudos (void) continue; } - bitmap_set_bit (&interesting, regno); + bitmap_set_bit (interesting, regno); /* If we get here, we know closest_use is a non-NULL insn (as opposed to const_0_rtx). */ closest_uses[regno] = as_a <rtx_insn *> (closest_use); @@ -4684,7 +4673,7 @@ find_moveable_pseudos (void) } } - EXECUTE_IF_SET_IN_BITMAP (&interesting, 0, i, bi) + EXECUTE_IF_SET_IN_BITMAP (interesting, 0, i, bi) { df_ref def = DF_REG_DEF_CHAIN (i); rtx_insn *def_insn = DF_REF_INSN (def); @@ -4728,7 +4717,7 @@ find_moveable_pseudos (void) FOR_EACH_INSN_USE (use, def_insn) { unsigned regno = DF_REF_REGNO (use); - if (bitmap_bit_p (&unusable_as_input, regno)) + if (bitmap_bit_p (unusable_as_input, regno)) { all_ok = false; if (dump_file) @@ -4794,8 +4783,6 @@ find_moveable_pseudos (void) bitmap_clear (bb_transp_live + bb->index); bitmap_clear (bb_moveable_reg_sets + bb->index); } - bitmap_clear (&interesting); - bitmap_clear (&unusable_as_input); free (uid_luid); free (closest_uses); free (bb_local); @@ -4875,14 +4862,12 @@ split_live_ranges_for_shrink_wrap (void) basic_block bb, call_dom = NULL; basic_block first = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); rtx_insn *insn, *last_interesting_insn = NULL; - bitmap_head need_new, reachable; + auto_bitmap need_new, reachable; vec<basic_block> queue; if (!SHRINK_WRAPPING_ENABLED) return false; - bitmap_initialize (&need_new, 0); - bitmap_initialize (&reachable, 0); queue.create (n_basic_blocks_for_fn (cfun)); FOR_EACH_BB_FN (bb, cfun) @@ -4891,22 +4876,18 @@ split_live_ranges_for_shrink_wrap (void) { if (bb == first) { - bitmap_clear (&need_new); - bitmap_clear (&reachable); queue.release (); return false; } - bitmap_set_bit (&need_new, bb->index); - bitmap_set_bit (&reachable, bb->index); + bitmap_set_bit (need_new, bb->index); + bitmap_set_bit (reachable, bb->index); queue.quick_push (bb); break; } if (queue.is_empty ()) { - bitmap_clear (&need_new); - bitmap_clear (&reachable); queue.release (); return false; } @@ -4919,7 +4900,7 @@ split_live_ranges_for_shrink_wrap (void) bb = queue.pop (); FOR_EACH_EDGE (e, ei, bb->succs) if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) - && bitmap_set_bit (&reachable, e->dest->index)) + && bitmap_set_bit (reachable, e->dest->index)) queue.quick_push (e->dest); } queue.release (); @@ -4931,32 +4912,23 @@ split_live_ranges_for_shrink_wrap (void) continue; if (DF_REG_DEF_COUNT (REGNO (dest)) > 1) - { - bitmap_clear (&need_new); - bitmap_clear (&reachable); - return false; - } + return false; for (df_ref use = DF_REG_USE_CHAIN (REGNO(dest)); use; use = DF_REF_NEXT_REG (use)) { int ubbi = DF_REF_BB (use)->index; - if (bitmap_bit_p (&reachable, ubbi)) - bitmap_set_bit (&need_new, ubbi); + if (bitmap_bit_p (reachable, ubbi)) + bitmap_set_bit (need_new, ubbi); } last_interesting_insn = insn; } - bitmap_clear (&reachable); if (!last_interesting_insn) - { - bitmap_clear (&need_new); - return false; - } + return false; - call_dom = nearest_common_dominator_for_set (CDI_DOMINATORS, &need_new); - bitmap_clear (&need_new); + call_dom = nearest_common_dominator_for_set (CDI_DOMINATORS, need_new); if (call_dom == first) return false; |