PPC32: Fix stack collision between FP and CR save areas.
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 14 May 2013 16:08:32 +0000 (16:08 +0000)
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 14 May 2013 16:08:32 +0000 (16:08 +0000)
commitded53bf4dd499f213334400fa870d0c7896d1d0d
tree7e5d7acb5b4b6ecd94e595e0a701568206e373f2
parent21e6ea54ff815b345fa2116f156653caaa809e0b
PPC32: Fix stack collision between FP and CR save areas.

The changes to CR spill handling missed a case for 32-bit PowerPC.
The code in PPCFrameLowering::processFunctionBeforeFrameFinalized()
checks whether CR spill has occurred using a flag in the function
info.  This flag is only set by storeRegToStackSlot and
loadRegFromStackSlot.  spillCalleeSavedRegisters does not call
storeRegToStackSlot, but instead produces MI directly.  Thus we don't
see the CR is spilled when assigning frame offsets, and the CR spill
ends up colliding with some other location (generally the FP slot).

This patch sets the flag in spillCalleeSavedRegisters for PPC32 so
that the CR spill is properly detected and gets its own slot in the
stack frame.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181800 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCFrameLowering.cpp
test/CodeGen/PowerPC/crsave.ll