aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/SPARC/2009-08-28-PIC.ll
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2012-10-31 01:15:05 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2012-10-31 01:15:05 +0000
commit42d43351b274603ed0ac28128498a35b8987ce15 (patch)
treec809e8246706401be73d51ae7d7953af60b58b62 /test/CodeGen/SPARC/2009-08-28-PIC.ll
parentbab24216cc77477d475e9d2ae18e275c5b2054a3 (diff)
downloadexternal_llvm-42d43351b274603ed0ac28128498a35b8987ce15.zip
external_llvm-42d43351b274603ed0ac28128498a35b8987ce15.tar.gz
external_llvm-42d43351b274603ed0ac28128498a35b8987ce15.tar.bz2
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
Diffstat (limited to 'test/CodeGen/SPARC/2009-08-28-PIC.ll')
0 files changed, 0 insertions, 0 deletions