summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC
diff options
context:
space:
mode:
authorRoman Divacky <rdivacky@freebsd.org>2012-04-02 15:49:30 +0000
committerRoman Divacky <rdivacky@freebsd.org>2012-04-02 15:49:30 +0000
commitb9663ccd6b844ac35c64278eda781598034c79e3 (patch)
treee07efef3d04ad694fd637943b39519f9314fd56c /llvm/lib/Target/PowerPC
parent98144e9e1aeba0d56a1b4309e2b285648f0bd5a1 (diff)
downloadbcm5719-llvm-b9663ccd6b844ac35c64278eda781598034c79e3.tar.gz
bcm5719-llvm-b9663ccd6b844ac35c64278eda781598034c79e3.zip
Implement the SVR4 byval alignment for aggregates. Fixing a FIXME.
llvm-svn: 153876
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelLowering.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 96b7074aa02..746fc23c211 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -446,7 +446,16 @@ unsigned PPCTargetLowering::getByValTypeAlignment(Type *Ty) const {
// Darwin passes everything on 4 byte boundary.
if (TM.getSubtarget<PPCSubtarget>().isDarwin())
return 4;
- // FIXME SVR4 TBD
+
+ // 16byte and wider vectors are passed on 16byte boundary.
+ if (VectorType *VTy = dyn_cast<VectorType>(Ty))
+ if (VTy->getBitWidth() >= 128)
+ return 16;
+
+ // The rest is 8 on PPC64 and 4 on PPC32 boundary.
+ if (PPCSubTarget.isPPC64())
+ return 8;
+
return 4;
}
OpenPOWER on IntegriCloud