diff options
author | Bernd Schmidt <bernds@gcc.gnu.org> | 2016-04-29 08:59:09 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2016-04-29 08:59:09 +0000 |
commit | 849b265de120169d2171806568ae1b977ec96193 (patch) | |
tree | 60f090609b425a9db96f82080a5d8874885d6a81 /gcc/reload1.c | |
parent | 1390536b5144f4bfc41d17eb4644276090bbd546 (diff) | |
download | gcc-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.c | 13 |
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); |