https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77687
--- Comment #8 from Segher Boessenkool <segher at gcc dot gnu.org> --- Author: segher Date: Mon Nov 20 20:10:28 2017 New Revision: 254968 URL: https://gcc.gnu.org/viewcvs?rev=254968&root=gcc&view=rev Log: rs6000: Don't touch below the stack pointer (PR77687) With the 32-bit SVR4 ABI we don't have a red zone, so we have to restore the callee-saved registers before we restore the stack pointer. The previous fix for this PR failed in two ways, for huge frames: first, we use a negative offset from r11 in that case, so the (mem:BLK 11) access does no good; second, sched does not handle accesses to mem:BLK correctly in this case (does not make dependencies). This patch fixes it by doing a store to (mem:BLK (scratch)) instead. This means no unrelated (not to stack) loads/stores can be moved over the stack restore either, but so be it. PR target/77687 * config/rs6000/rs6000.md (stack_restore_tie): Store to a scratch address instead of to r1 and r11. gcc/testsuite/ PR target/77687 * gcc.target/powerpc/pr77687.c: New testcase. Added: branches/gcc-7-branch/gcc/testsuite/gcc.target/powerpc/pr77687.c Modified: branches/gcc-7-branch/gcc/ChangeLog branches/gcc-7-branch/gcc/config/rs6000/rs6000.md branches/gcc-7-branch/gcc/testsuite/ChangeLog