1 From 10a4fc6c56a4ca26b225bf912948f96e9f55c81a Mon Sep 17 00:00:00 2001 2 From: Tim Murray <timmurray (a] google.com> 3 Date: Thu, 3 Apr 2014 13:27:16 -0700 4 Subject: [PATCH 2/4] Revert to old vector passing ABI for backwards 5 compatibility. 6 7 Change-Id: I6d0e6db454de7090ef49001e9318eae5a1112e09 8 --- 9 lib/CodeGen/TargetInfo.cpp | 6 +++--- 10 1 file changed, 3 insertions(+), 3 deletions(-) 11 12 diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp 13 index d2e57ac..d3ab43a 100644 14 --- a/lib/CodeGen/TargetInfo.cpp 15 +++ b/lib/CodeGen/TargetInfo.cpp 16 @@ -4403,7 +4403,7 @@ bool ARMABIInfo::isIllegalVectorType(QualType Ty) const { 17 unsigned NumElements = VT->getNumElements(); 18 uint64_t Size = getContext().getTypeSize(VT); 19 // NumElements should be power of 2. 20 - if ((NumElements & (NumElements - 1)) != 0) 21 + if (((NumElements & (NumElements - 1)) != 0) && NumElements != 3) 22 return true; 23 // Size should be greater than 32 bits. 24 return Size <= 32; 25 @@ -4437,8 +4437,8 @@ llvm::Value *ARMABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, 26 TyAlign = std::min(std::max(TyAlign, (uint64_t)4), (uint64_t)8); 27 else 28 TyAlign = 4; 29 - // Use indirect if size of the illegal vector is bigger than 16 bytes. 30 - if (isIllegalVectorType(Ty) && Size > 16) { 31 + // Use indirect if size of the illegal vector is bigger than 32 bytes. 32 + if (isIllegalVectorType(Ty) && Size > 32) { 33 IsIndirect = true; 34 Size = 4; 35 TyAlign = 4; 36 -- 37 1.9.1.423.g4596e3a 38 39