aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reload1.c23
2 files changed, 18 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d493884..dc901da 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-06-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR bootstrap/71435
+ * reload1.c (reload): Pass 0 to finish_spills when called because
+ update_eliminables_and_spill returns true and remove did_spill.
+ (finish_spills): Adjust comment and document GLOBAL parameter.
+
2016-06-17 DJ Delorie <dj@redhat.com>
PR target/71338
diff --git a/gcc/reload1.c b/gcc/reload1.c
index d6fcece..5622e89 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -897,7 +897,6 @@ reload (rtx_insn *first, int global)
for (;;)
{
int something_changed;
- int did_spill;
HOST_WIDE_INT starting_frame_size;
starting_frame_size = get_frame_size ();
@@ -982,7 +981,7 @@ reload (rtx_insn *first, int global)
if (something_was_spilled || starting_frame_size != get_frame_size ())
{
if (update_eliminables_and_spill ())
- finish_spills (global);
+ finish_spills (0);
continue;
}
@@ -1001,8 +1000,6 @@ reload (rtx_insn *first, int global)
is used. */
CLEAR_REG_SET (&spilled_pseudos);
- did_spill = 0;
-
something_changed = 0;
/* If we allocated any new memory locations, make another pass
@@ -1019,7 +1016,7 @@ reload (rtx_insn *first, int global)
if (update_eliminables_and_spill ())
{
- did_spill = 1;
+ finish_spills (0);
something_changed = 1;
}
else
@@ -1027,11 +1024,10 @@ reload (rtx_insn *first, int global)
select_reload_regs ();
if (failure)
goto failed;
+ if (insns_need_reload)
+ something_changed |= finish_spills (global);
}
- if (insns_need_reload != 0 || did_spill)
- something_changed |= finish_spills (global);
-
if (! something_changed)
break;
@@ -4281,10 +4277,13 @@ spill_hard_reg (unsigned int regno, int cant_eliminate)
SET_REGNO_REG_SET (&spilled_pseudos, i);
}
-/* After find_reload_regs has been run for all insn that need reloads,
- and/or spill_hard_regs was called, this function is used to actually
- spill pseudo registers and try to reallocate them. It also sets up the
- spill_regs array for use by choose_reload_regs. */
+/* After spill_hard_reg was called and/or find_reload_regs was run for all
+ insns that need reloads, this function is used to actually spill pseudo
+ registers and try to reallocate them. It also sets up the spill_regs
+ array for use by choose_reload_regs.
+
+ GLOBAL nonzero means we should attempt to reallocate any pseudo registers
+ that we displace from hard registers. */
static int
finish_spills (int global)