[ARM] prologue instructions emitted for naked function with >64 byte argument
authorSimon Wallis <simon.wallis2@arm.com>
Tue, 9 Jun 2020 10:30:10 +0000 (11:30 +0100)
committerSimon Wallis <simon.wallis2@arm.com>
Tue, 9 Jun 2020 10:33:03 +0000 (11:33 +0100)
commit4dba59689d008df7be37733de4bb537b2911d3ad
treefe31a1d1e5554f295645dd145e6412d0065ac0ab
parent3b6196c9b3283b3a9e57c899616ac2089ea4c8b7
[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
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/test/CodeGen/ARM/naked-no-prolog.ll [new file with mode: 0644]