mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[ARM] prologue instructions emitted for naked function with >64 byte argument
Summary: The naked function attribute is meant to suppress all function prologue/epilogue instructions. On ARM, some are still emitted if an argument greater than 64 bytes in size (the threshold for using the byval attribute in IR) is passed partially in registers. Perform the check for Attribute::Naked and early exit in SelectionDAGISel::LowerArguments(). Checking in ARMFrameLowering::determineCalleeSaves() is too late. A test case is included. Reviewers: llvm-commits, olista01, danielkiss Reviewed By: danielkiss Subscribers: kristof.beyls, hiraditya, danielkiss Tags: #llvm Differential Revision: https://reviews.llvm.org/D80715 Change-Id: Icedecf2a4ad31bc3c35ab0df7489a9d346e1f7cc
This commit is contained in:
parent
a5cbfdd90d
commit
031a325c42
@ -9607,6 +9607,10 @@ void SelectionDAGISel::LowerArguments(const Function &F) {
|
||||
const DataLayout &DL = DAG.getDataLayout();
|
||||
SmallVector<ISD::InputArg, 16> Ins;
|
||||
|
||||
// In Naked functions we aren't going to save any registers.
|
||||
if (F.hasFnAttribute(Attribute::Naked))
|
||||
return;
|
||||
|
||||
if (!FuncInfo->CanLowerReturn) {
|
||||
// Put in an sret pointer parameter before all the other parameters.
|
||||
SmallVector<EVT, 1> ValueVTs;
|
||||
|
13
test/CodeGen/ARM/naked-no-prolog.ll
Normal file
13
test/CodeGen/ARM/naked-no-prolog.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a7 -verify-machineinstrs %s -o - | FileCheck %s
|
||||
|
||||
%struct.S = type { [65 x i8] }
|
||||
|
||||
define void @naked_no_prologue(%struct.S* byval(%struct.S) align 4 %0) naked noinline nounwind optnone {
|
||||
; CHECK-NOT: stm
|
||||
; CHECK-NOT: str
|
||||
|
||||
entry:
|
||||
ret void
|
||||
unreachable
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user