forked from OSchip/llvm-project
SystemZ really does mean "has calls" and not just "adjusts stack." Go ahead and
replace the check with the appropriate predicate. Modify the testcase to reflect the correct code. (It should be saving callee-saved registers on the stack allocated by the calling fuction.) llvm-svn: 103829
This commit is contained in:
parent
b16013936b
commit
0160e55893
|
@ -102,7 +102,7 @@ int SystemZRegisterInfo::getFrameIndexOffset(const MachineFunction &MF,
|
|||
Offset += StackSize - TFI.getOffsetOfLocalArea();
|
||||
|
||||
// Skip the register save area if we generated the stack frame.
|
||||
if (StackSize || MFI->adjustsStack())
|
||||
if (StackSize || MFI->hasCalls())
|
||||
Offset -= TFI.getOffsetOfLocalArea();
|
||||
|
||||
return Offset;
|
||||
|
@ -163,14 +163,14 @@ SystemZRegisterInfo::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
|||
for (unsigned i = 0, e = array_lengthof(HighFPRs); i != e; ++i)
|
||||
HighFPRsUsed |= MRI.isPhysRegUsed(HighFPRs[i]);
|
||||
|
||||
if (FFI->adjustsStack())
|
||||
if (FFI->hasCalls())
|
||||
/* FIXME: function is varargs */
|
||||
/* FIXME: function grabs RA */
|
||||
/* FIXME: function calls eh_return */
|
||||
MRI.setPhysRegUsed(SystemZ::R14D);
|
||||
|
||||
if (HighFPRsUsed ||
|
||||
FFI->adjustsStack() ||
|
||||
FFI->hasCalls() ||
|
||||
FFI->getObjectIndexEnd() != 0 || // Contains automatic variables
|
||||
FFI->hasVarSizedObjects() // Function calls dynamic alloca's
|
||||
/* FIXME: function is varargs */)
|
||||
|
@ -234,7 +234,7 @@ void SystemZRegisterInfo::emitPrologue(MachineFunction &MF) const {
|
|||
DL = MBBI->getDebugLoc();
|
||||
|
||||
// adjust stack pointer: R15 -= numbytes
|
||||
if (StackSize || MFI->adjustsStack()) {
|
||||
if (StackSize || MFI->hasCalls()) {
|
||||
assert(MF.getRegInfo().isPhysRegUsed(SystemZ::R15D) &&
|
||||
"Invalid stack frame calculation!");
|
||||
emitSPUpdate(MBB, MBBI, -(int64_t)NumBytes, TII);
|
||||
|
@ -286,7 +286,7 @@ void SystemZRegisterInfo::emitEpilogue(MachineFunction &MF,
|
|||
// During callee-saved restores emission stack frame was not yet finialized
|
||||
// (and thus - the stack size was unknown). Tune the offset having full stack
|
||||
// size in hands.
|
||||
if (StackSize || MFI->adjustsStack()) {
|
||||
if (StackSize || MFI->hasCalls()) {
|
||||
assert((MBBI->getOpcode() == SystemZ::MOV64rmm ||
|
||||
MBBI->getOpcode() == SystemZ::MOV64rm) &&
|
||||
"Expected to see callee-save register restore code");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: llc < %s | grep 168
|
||||
; RUN: llc < %s | FileCheck %s
|
||||
|
||||
target datalayout = "E-p:64:64:64-i8:8:16-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-a0:16:16"
|
||||
target triple = "s390x-linux"
|
||||
|
@ -8,6 +8,8 @@ declare void @rdft(i32 signext, i32 signext, double*, i32* nocapture, double*) n
|
|||
declare double @mp_mul_d2i_test(i32 signext, i32 signext, double* nocapture) nounwind
|
||||
|
||||
define void @mp_mul_radix_test_bb3(i32 %radix, i32 %nfft, double* %tmpfft, i32* %ip, double* %w, double* %arrayidx44.reload, double* %call.out) nounwind {
|
||||
; CHECK: lg %r11, 328(%r15)
|
||||
|
||||
newFuncRoot:
|
||||
br label %bb3
|
||||
|
||||
|
|
Loading…
Reference in New Issue