Fix for 5.5 Parameter Passing --> Stage C:
authorStepan Dyatkovskiy <stpworld@narod.ru>
Mon, 22 Apr 2013 13:06:52 +0000 (13:06 +0000)
committerStepan Dyatkovskiy <stpworld@narod.ru>
Mon, 22 Apr 2013 13:06:52 +0000 (13:06 +0000)
commit78e3c90419ffbe969bd38c7a198300af42fb66fc
treee6213d5f44860103482884cb5fcd940ba4bbaf5a
parent4f40fa324c16fd9a03f1b916dfc4c0c4bab228fa
Fix for 5.5 Parameter Passing --> Stage C:
 -- C.4 and C.5 statements, when NSAA is not equal to SP.
 -- C.1.cp statement for VA functions. Note: There are no VFP CPRCs in a
    variadic procedure.

Before this patch "NSAA != 0" means "don't use GPRs anymore ". But there are
some exceptions in AAPCS.
1. For non VA function: allocate all VFP regs for CPRC. When all VFPs are allocated
   CPRCs would be sent to stack, while non CPRCs may be still allocated in GRPs.
2. Check that for VA functions all params uses GPRs and then stack.
   No exceptions, no CPRCs here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180011 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMCallingConv.h
lib/Target/ARM/ARMCallingConv.td
lib/Target/ARM/ARMISelLowering.cpp
test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll [new file with mode: 0644]
test/CodeGen/ARM/2013-04-16-AAPCS-C5-vs-VFP.ll [new file with mode: 0644]
test/CodeGen/ARM/2013-04-21-AAPCS-VA-C.1.cp.ll [new file with mode: 0644]