llvm-6502/test/CodeGen
Bill Schmidt 42d43351b2 This patch addresses an ABI compatibility issue with empty aggregate
parameters.  Examples of these are:

  struct { } a;
  union { } b[256];
  int a[0];

An empty aggregate has an address, although dereferencing that address is
pointless.  When passed as a parameter, an empty aggregate does not consume
a protocol register, nor does it consume a doubleword in the parameter save
area.  Passing an empty aggregate by reference passes an address just as
for any other aggregate.  Returning an empty aggregate uses GPR3 as a hidden
address of the return value location, just as for any other aggregate.

The patch modifies PPCTargetLowering::LowerFormalArguments_64SVR4 and
PPCTargetLowering::LowerCall_64SVR4 to properly skip empty aggregate
parameters passed by value.  The handling of return values and by-reference
parameters was already correct.

Built on powerpc64-unknown-linux-gnu and tested with no new regressions.
A test case is included to test proper handling of empty aggregate
parameters on both sides of the function call protocol.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167090 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-31 01:15:05 +00:00
..
ARM
CellSPU
CPP
Generic
Hexagon
MBlaze
Mips [mips] Allow tail-call optimization for vararg functions and functions which 2012-10-30 20:16:31 +00:00
MSP430
NVPTX
PowerPC This patch addresses an ABI compatibility issue with empty aggregate 2012-10-31 01:15:05 +00:00
SPARC
Thumb
Thumb2
X86 X86 SSE: update rsqrtss and rcpss to use two source operands and 2012-10-30 23:53:59 +00:00
XCore