aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@gcc.gnu.org>2016-04-29 08:59:09 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2016-04-29 08:59:09 +0000
commit849b265de120169d2171806568ae1b977ec96193 (patch)
tree60f090609b425a9db96f82080a5d8874885d6a81 /gcc/reload1.c
parent1390536b5144f4bfc41d17eb4644276090bbd546 (diff)
downloadgcc-849b265de120169d2171806568ae1b977ec96193.zip
gcc-849b265de120169d2171806568ae1b977ec96193.tar.gz
gcc-849b265de120169d2171806568ae1b977ec96193.tar.bz2
avr-related reload fix from Senthil Kumar Selvaraj
PR target/60040 * reload1.c (reload): Call finish_spills before restarting reload loop. Skip select_reload_regs if update_eliminables_and_spill returns true. testsuite/ PR target/60040 * gcc.target/avr/pr60040-1.c: New. * gcc.target/avr/pr60040-2.c: New. From-SVN: r235625
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c2800f8..d6fcece 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -981,7 +981,8 @@ reload (rtx_insn *first, int global)
/* If we allocated another stack slot, redo elimination bookkeeping. */
if (something_was_spilled || starting_frame_size != get_frame_size ())
{
- update_eliminables_and_spill ();
+ if (update_eliminables_and_spill ())
+ finish_spills (global);
continue;
}
@@ -1021,10 +1022,12 @@ reload (rtx_insn *first, int global)
did_spill = 1;
something_changed = 1;
}
-
- select_reload_regs ();
- if (failure)
- goto failed;
+ else
+ {
+ select_reload_regs ();
+ if (failure)
+ goto failed;
+ }
if (insns_need_reload != 0 || did_spill)
something_changed |= finish_spills (global);