mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
ac0412b387
The PPCFrameLowering::determineFrameLayout routine currently ensures that every function that allocates a stack frame provides space for the parameter save area (via PPCFrameLowering::getMinCallFrameSize). This is actually not necessary. There may be functions that never call another routine but still allocate a frame; those do not require the parameter save area. In the future, with the ELFv2 ABI, even some routines that do call other functions do not need to allocate the parameter save area. While it is not a bug to allocate the parameter area when it is not needed, it is better to avoid it to save stack space. Note that when any particular function call requires the parameter save area, this space will already have been included by ABI code in the size the CALLSEQ_START insn is annotated with, and therefore included in the size returned by MFI->getMaxCallFrameSize(). This means that determineFrameLayout simply does not need to care about the parameter save area. (It still needs to ensure that every frame provides the linkage area.) This is implemented by this patch. Note that this exposed a bug in the new fast-isel code where the parameter area was *not* included in the CALLSEQ_START size; this is also fixed. A couple of test cases needed to be adapted for the new (smaller) stack frame size those tests now see. llvm-svn: 211495
31 lines
1.4 KiB
LLVM
31 lines
1.4 KiB
LLVM
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin8 | FileCheck %s -check-prefix=CHECK-PPC32
|
|
; RUN: llc < %s -march=ppc64 -mtriple=powerpc-apple-darwin8 | FileCheck %s -check-prefix=CHECK-PPC64
|
|
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin8 -disable-fp-elim | FileCheck %s -check-prefix=CHECK-PPC32-NOFP
|
|
; RUN: llc < %s -march=ppc64 -mtriple=powerpc-apple-darwin8 -disable-fp-elim | FileCheck %s -check-prefix=CHECK-PPC64-NOFP
|
|
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin8 | FileCheck %s -check-prefix=CHECK-PPC32
|
|
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin8 | FileCheck %s -check-prefix=CHECK-PPC32-RS
|
|
; RUN: llc < %s -march=ppc32 -mtriple=powerpc-apple-darwin8 -disable-fp-elim | FileCheck %s -check-prefix=CHECK-PPC32-RS-NOFP
|
|
|
|
; CHECK-PPC32: stw r31, -4(r1)
|
|
; CHECK-PPC32: lwz r1, 0(r1)
|
|
; CHECK-PPC32: lwz r31, -4(r1)
|
|
; CHECK-PPC32-NOFP: stw r31, -4(r1)
|
|
; CHECK-PPC32-NOFP: lwz r1, 0(r1)
|
|
; CHECK-PPC32-NOFP: lwz r31, -4(r1)
|
|
; CHECK-PPC32-RS: stwu r1, -48(r1)
|
|
; CHECK-PPC32-RS-NOFP: stwu r1, -48(r1)
|
|
|
|
; CHECK-PPC64: std r31, -8(r1)
|
|
; CHECK-PPC64: stdu r1, -64(r1)
|
|
; CHECK-PPC64: ld r1, 0(r1)
|
|
; CHECK-PPC64: ld r31, -8(r1)
|
|
; CHECK-PPC64-NOFP: std r31, -8(r1)
|
|
; CHECK-PPC64-NOFP: stdu r1, -64(r1)
|
|
; CHECK-PPC64-NOFP: ld r1, 0(r1)
|
|
; CHECK-PPC64-NOFP: ld r31, -8(r1)
|
|
|
|
define i32* @f1(i32 %n) nounwind {
|
|
%tmp = alloca i32, i32 %n ; <i32*> [#uses=1]
|
|
ret i32* %tmp
|
|
}
|