diff options
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index b0ae0fe..c6465c7 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4644,7 +4644,6 @@ lra_constraints (bool first_p) unsigned int min_len, new_min_len, uid; rtx set, x, reg, dest_reg; basic_block last_bb; - bitmap_head equiv_insn_bitmap; bitmap_iterator bi; lra_constraint_iter++; @@ -4676,7 +4675,7 @@ lra_constraints (bool first_p) /* Do elimination before the equivalence processing as we can spill some pseudos during elimination. */ lra_eliminate (false, first_p); - bitmap_initialize (&equiv_insn_bitmap, ®_obstack); + auto_bitmap equiv_insn_bitmap (®_obstack); for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++) if (lra_reg_info[i].nrefs != 0) { @@ -4737,14 +4736,14 @@ lra_constraints (bool first_p) if (contains_reg_p (x, false, true)) ira_reg_equiv[i].profitable_p = false; if (get_equiv (reg) != reg) - bitmap_ior_into (&equiv_insn_bitmap, &lra_reg_info[i].insn_bitmap); + bitmap_ior_into (equiv_insn_bitmap, &lra_reg_info[i].insn_bitmap); } } for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++) update_equiv (i); /* We should add all insns containing pseudos which should be substituted by their equivalences. */ - EXECUTE_IF_SET_IN_BITMAP (&equiv_insn_bitmap, 0, uid, bi) + EXECUTE_IF_SET_IN_BITMAP (equiv_insn_bitmap, 0, uid, bi) lra_push_insn_by_uid (uid); min_len = lra_insn_stack_length (); new_insns_num = 0; @@ -4775,7 +4774,7 @@ lra_constraints (bool first_p) /* We need to check equivalence in debug insn and change pseudo to the equivalent value if necessary. */ curr_id = lra_get_insn_recog_data (curr_insn); - if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn))) + if (bitmap_bit_p (equiv_insn_bitmap, INSN_UID (curr_insn))) { rtx old = *curr_id->operand_loc[0]; *curr_id->operand_loc[0] @@ -4849,7 +4848,7 @@ lra_constraints (bool first_p) /* Check non-transformed insns too for equiv change as USE or CLOBBER don't need reloads but can contain pseudos being changed on their equivalences. */ - else if (bitmap_bit_p (&equiv_insn_bitmap, INSN_UID (curr_insn)) + else if (bitmap_bit_p (equiv_insn_bitmap, INSN_UID (curr_insn)) && loc_equivalence_change_p (&PATTERN (curr_insn))) { lra_update_insn_regno_info (curr_insn); @@ -4857,7 +4856,7 @@ lra_constraints (bool first_p) } } } - bitmap_clear (&equiv_insn_bitmap); + /* If we used a new hard regno, changed_p should be true because the hard reg is assigned to a new pseudo. */ if (flag_checking && !changed_p) @@ -6791,10 +6790,9 @@ undo_optional_reloads (void) bitmap_iterator bi, bi2; rtx_insn *insn; rtx set, src, dest; - bitmap_head removed_optional_reload_pseudos, insn_bitmap; + auto_bitmap removed_optional_reload_pseudos (®_obstack); - bitmap_initialize (&removed_optional_reload_pseudos, ®_obstack); - bitmap_copy (&removed_optional_reload_pseudos, &lra_optional_reload_pseudos); + bitmap_copy (removed_optional_reload_pseudos, &lra_optional_reload_pseudos); EXECUTE_IF_SET_IN_BITMAP (&lra_optional_reload_pseudos, 0, regno, bi) { keep_p = false; @@ -6829,19 +6827,19 @@ undo_optional_reloads (void) } if (keep_p) { - bitmap_clear_bit (&removed_optional_reload_pseudos, regno); + bitmap_clear_bit (removed_optional_reload_pseudos, regno); if (lra_dump_file != NULL) fprintf (lra_dump_file, "Keep optional reload reg %d\n", regno); } } - change_p = ! bitmap_empty_p (&removed_optional_reload_pseudos); - bitmap_initialize (&insn_bitmap, ®_obstack); - EXECUTE_IF_SET_IN_BITMAP (&removed_optional_reload_pseudos, 0, regno, bi) + change_p = ! bitmap_empty_p (removed_optional_reload_pseudos); + auto_bitmap insn_bitmap (®_obstack); + EXECUTE_IF_SET_IN_BITMAP (removed_optional_reload_pseudos, 0, regno, bi) { if (lra_dump_file != NULL) fprintf (lra_dump_file, "Remove optional reload reg %d\n", regno); - bitmap_copy (&insn_bitmap, &lra_reg_info[regno].insn_bitmap); - EXECUTE_IF_SET_IN_BITMAP (&insn_bitmap, 0, uid, bi2) + bitmap_copy (insn_bitmap, &lra_reg_info[regno].insn_bitmap); + EXECUTE_IF_SET_IN_BITMAP (insn_bitmap, 0, uid, bi2) { insn = lra_insn_recog_data[uid]->insn; if ((set = single_set (insn)) != NULL_RTX) @@ -6885,8 +6883,6 @@ undo_optional_reloads (void) /* Clear restore_regnos. */ EXECUTE_IF_SET_IN_BITMAP (&lra_optional_reload_pseudos, 0, regno, bi) lra_reg_info[regno].restore_rtx = NULL_RTX; - bitmap_clear (&insn_bitmap); - bitmap_clear (&removed_optional_reload_pseudos); return change_p; } @@ -6899,7 +6895,6 @@ lra_undo_inheritance (void) int hard_regno; int n_all_inherit, n_inherit, n_all_split, n_split; rtx restore_rtx; - bitmap_head remove_pseudos; bitmap_iterator bi; bool change_p; @@ -6910,7 +6905,7 @@ lra_undo_inheritance (void) fprintf (lra_dump_file, "\n********** Undoing inheritance #%d: **********\n\n", lra_undo_inheritance_iter); - bitmap_initialize (&remove_pseudos, ®_obstack); + auto_bitmap remove_pseudos (®_obstack); n_inherit = n_all_inherit = 0; EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi) if (lra_reg_info[regno].restore_rtx != NULL_RTX) @@ -6922,7 +6917,7 @@ lra_undo_inheritance (void) allocation we used shorter live-ranges. */ && (! REG_P (lra_reg_info[regno].restore_rtx) || reg_renumber[REGNO (lra_reg_info[regno].restore_rtx)] < 0)) - bitmap_set_bit (&remove_pseudos, regno); + bitmap_set_bit (remove_pseudos, regno); else n_inherit++; } @@ -6940,7 +6935,7 @@ lra_undo_inheritance (void) hard_regno = (restore_regno >= FIRST_PSEUDO_REGISTER ? reg_renumber[restore_regno] : restore_regno); if (hard_regno < 0 || reg_renumber[regno] == hard_regno) - bitmap_set_bit (&remove_pseudos, regno); + bitmap_set_bit (remove_pseudos, regno); else { n_split++; @@ -6953,8 +6948,7 @@ lra_undo_inheritance (void) fprintf (lra_dump_file, "Split %d out of %d (%.2f%%)\n", n_split, n_all_split, (double) n_split / n_all_split * 100); - change_p = remove_inheritance_pseudos (&remove_pseudos); - bitmap_clear (&remove_pseudos); + change_p = remove_inheritance_pseudos (remove_pseudos); /* Clear restore_regnos. */ EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi) lra_reg_info[regno].restore_rtx = NULL_RTX; |