rs6000: Make deallocation of a large frame work (PR77687)
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 29 Nov 2016 05:29:47 +0000 (06:29 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 29 Nov 2016 05:29:47 +0000 (06:29 +0100)
commitdfed7971fb42cbd5196ee92e27e8292f46fa72e9
tree0b1ed8816a840b84d110cc33df30aca22480a93b
parent08dd2b683f98c6a721329f02f16a9a815a143f48
rs6000: Make deallocation of a large frame work (PR77687)

If we use ABI_V4 and we have a big stack frame, we end the epilogue
with a "mr 1,11" (or similar) instruction.  This instruction however
has no dependencies on the earlier restores from stack (done via r11),
so sched2 can end up reordering the insns, which is bad because we
have no red zone so that you then restore from stack that is already
deallocated.

This fixes it by making that restore depend on the memory accesses.

PR target/77687
* config/rs6000/rs6000.c (rs6000_emit_stack_reset): Emit the
stack_restore_tie insn instead of stack_tie, for the SVR4 and
SPE ABIs.
* config/rs6000/rs6000.md (stack_restore_tie): New define_insn.

From-SVN: r242949
gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md