From ea0b381f6e6b7a7261f028007453a8fe99587aa0 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 28 May 2014 21:50:28 +0000 Subject: [PATCH] revert: lra-int.h (struct lra_reg): Add field actual_call_used_reg_set. 2014-05-28 Tom de Vries Revert: 2014-05-28 Tom de Vries * lra-int.h (struct lra_reg): Add field actual_call_used_reg_set. * lra.c (initialize_lra_reg_info_element): Add init of actual_call_used_reg_set field. (lra): Call lra_create_live_ranges before lra_inheritance for -fuse-caller-save. * lra-assigns.c (lra_assign): Allow call_used_regs to cross calls for -fuse-caller-save. * lra-constraints.c (need_for_call_save_p): Use actual_call_used_reg_set instead of call_used_reg_set for -fuse-caller-save. * lra-lives.c (process_bb_lives): Calculate actual_call_used_reg_set. From-SVN: r211033 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/lra-assigns.c | 15 +++------------ gcc/lra-constraints.c | 5 +---- gcc/lra-int.h | 4 ---- gcc/lra-lives.c | 11 ----------- gcc/lra.c | 14 +------------- 6 files changed, 21 insertions(+), 44 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 034d9b051c0..024e8d6ea6a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2014-05-28 Tom de Vries + + Revert: + 2014-05-28 Tom de Vries + + * lra-int.h (struct lra_reg): Add field actual_call_used_reg_set. + * lra.c (initialize_lra_reg_info_element): Add init of + actual_call_used_reg_set field. + (lra): Call lra_create_live_ranges before lra_inheritance for + -fuse-caller-save. + * lra-assigns.c (lra_assign): Allow call_used_regs to cross calls for + -fuse-caller-save. + * lra-constraints.c (need_for_call_save_p): Use actual_call_used_reg_set + instead of call_used_reg_set for -fuse-caller-save. + * lra-lives.c (process_bb_lives): Calculate actual_call_used_reg_set. + 2014-05-28 Richard Sandiford * doc/md.texi: Document that the % constraint character must diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c index 34b4a119667..f7bb86b2160 100644 --- a/gcc/lra-assigns.c +++ b/gcc/lra-assigns.c @@ -1447,7 +1447,6 @@ lra_assign (void) bitmap_head insns_to_process; bool no_spills_p; int max_regno = max_reg_num (); - unsigned int call_used_reg_crosses_call = 0; timevar_push (TV_LRA_ASSIGN); init_lives (); @@ -1460,22 +1459,14 @@ lra_assign (void) bitmap_initialize (&all_spilled_pseudos, ®_obstack); create_live_range_start_chains (); setup_live_pseudos_and_spill_after_risky_transforms (&all_spilled_pseudos); +#ifdef ENABLE_CHECKING for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0 && lra_reg_info[i].call_p && overlaps_hard_reg_set_p (call_used_reg_set, PSEUDO_REGNO_MODE (i), reg_renumber[i])) - { - if (!flag_use_caller_save) - gcc_unreachable (); - call_used_reg_crosses_call++; - } - if (lra_dump_file - && call_used_reg_crosses_call > 0) - fprintf (lra_dump_file, - "Found %u pseudo(s) with a call used reg crossing a call.\n" - "Allowing due to -fuse-caller-save\n", - call_used_reg_crosses_call); + gcc_unreachable (); +#endif /* Setup insns to process on the next constraint pass. */ bitmap_initialize (&changed_pseudo_bitmap, ®_obstack); init_live_reload_and_inheritance_pseudos (); diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 7eb9dbc08b1..2df841a9750 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4605,10 +4605,7 @@ need_for_call_save_p (int regno) lra_assert (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0); return (usage_insns[regno].calls_num < calls_num && (overlaps_hard_reg_set_p - ((flag_use_caller_save && - ! hard_reg_set_empty_p (lra_reg_info[regno].actual_call_used_reg_set)) - ? lra_reg_info[regno].actual_call_used_reg_set - : call_used_reg_set, + (call_used_reg_set, PSEUDO_REGNO_MODE (regno), reg_renumber[regno]) || HARD_REGNO_CALL_PART_CLOBBERED (reg_renumber[regno], PSEUDO_REGNO_MODE (regno)))); diff --git a/gcc/lra-int.h b/gcc/lra-int.h index 98a30183caa..41c98492973 100644 --- a/gcc/lra-int.h +++ b/gcc/lra-int.h @@ -77,10 +77,6 @@ struct lra_reg /* The following fields are defined only for pseudos. */ /* Hard registers with which the pseudo conflicts. */ HARD_REG_SET conflict_hard_regs; - /* Call used registers with which the pseudo conflicts, taking into account - the registers used by functions called from calls which cross the - pseudo. */ - HARD_REG_SET actual_call_used_reg_set; /* We assign hard registers to reload pseudos which can occur in few places. So two hard register preferences are enough for them. The following fields define the preferred hard registers. If diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c index d0072158c03..8444adee6d8 100644 --- a/gcc/lra-lives.c +++ b/gcc/lra-lives.c @@ -624,17 +624,6 @@ process_bb_lives (basic_block bb, int &curr_point) if (call_p) { - if (flag_use_caller_save) - { - HARD_REG_SET this_call_used_reg_set; - get_call_reg_set_usage (curr_insn, &this_call_used_reg_set, - call_used_reg_set); - - EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, j) - IOR_HARD_REG_SET (lra_reg_info[j].actual_call_used_reg_set, - this_call_used_reg_set); - } - sparseset_ior (pseudos_live_through_calls, pseudos_live_through_calls, pseudos_live); if (cfun->has_nonlocal_label diff --git a/gcc/lra.c b/gcc/lra.c index d199a813fbe..ecec8908ca9 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -1427,7 +1427,6 @@ initialize_lra_reg_info_element (int i) lra_reg_info[i].no_stack_p = false; #endif CLEAR_HARD_REG_SET (lra_reg_info[i].conflict_hard_regs); - CLEAR_HARD_REG_SET (lra_reg_info[i].actual_call_used_reg_set); lra_reg_info[i].preferred_hard_regno1 = -1; lra_reg_info[i].preferred_hard_regno2 = -1; lra_reg_info[i].preferred_hard_regno_profit1 = 0; @@ -2345,18 +2344,7 @@ lra (FILE *f) lra_eliminate (false, false); /* Do inheritance only for regular algorithms. */ if (! lra_simple_p) - { - if (flag_use_caller_save) - { - if (live_p) - lra_clear_live_ranges (); - /* As a side-effect of lra_create_live_ranges, we calculate - actual_call_used_reg_set, which is needed during - lra_inheritance. */ - lra_create_live_ranges (true); - } - lra_inheritance (); - } + lra_inheritance (); if (live_p) lra_clear_live_ranges (); /* We need live ranges for lra_assign -- so build them. */