https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77687

--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Author: segher
Date: Tue Nov 29 05:29:47 2016
New Revision: 242949

URL: https://gcc.gnu.org/viewcvs?rev=242949&root=gcc&view=rev
Log:
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.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/rs6000.c
    trunk/gcc/config/rs6000/rs6000.md

Reply via email to