On Fri, Nov 13, 2015 at 2:00 AM, Aidan Dodds via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> ADodds created this revision. > ADodds added reviewers: asl, rsmith. > ADodds added subscribers: pirama, cfe-commits. > ADodds set the repository for this revision to rL LLVM. > Herald added subscribers: srhines, danalbert, tberghammer, aemerson. > > Looking into some recent issues with LLDBs expression parser highlighted > that upstream clang passes vectors types differently to Android Open Source > Project's clang for Arm Android targets. > This patch reflects the changes present in the AOSP and allows LLDB's JIT > expression evaluation to work correctly for Arm Android targets when > passing vectors. > > This is submitted with consent of the original author Stephen Hines. > I forget how much it matters (I know Chandler's spoken about it previously), but usually better to have the original author submit it, I think. (perhaps having them chime in on the thread is as good, not sure) > > Repository: > rL LLVM > > http://reviews.llvm.org/D14639 > > Files: > lib/CodeGen/TargetInfo.cpp > Test case? > > Index: lib/CodeGen/TargetInfo.cpp > =================================================================== > --- lib/CodeGen/TargetInfo.cpp > +++ lib/CodeGen/TargetInfo.cpp > @@ -4724,6 +4724,11 @@ > } > } > > + bool isAndroid() const { > + return (getTarget().getTriple().getEnvironment() == > + llvm::Triple::Android); > No need for the extra parens around the return expression. > + } > + > ABIKind getABIKind() const { return Kind; } > > private: > @@ -5227,15 +5232,23 @@ > > /// isIllegalVector - check whether Ty is an illegal vector type. > bool ARMABIInfo::isIllegalVectorType(QualType Ty) const { > - if (const VectorType *VT = Ty->getAs<VectorType>()) { > - // Check whether VT is legal. > - unsigned NumElements = VT->getNumElements(); > - uint64_t Size = getContext().getTypeSize(VT); > - // NumElements should be power of 2. > - if ((NumElements & (NumElements - 1)) != 0) > - return true; > - // Size should be greater than 32 bits. > - return Size <= 32; > + if (const VectorType *VT = Ty->getAs<VectorType> ()) { > + if (isAndroid()) { > + // Check whether VT is legal. > + unsigned NumElements = VT->getNumElements(); > + // NumElements should be power of 2 or equal to 3. > + if ((NumElements & (NumElements - 1)) != 0 && NumElements != 3) > + return true; > + } else { > + // Check whether VT is legal. > + unsigned NumElements = VT->getNumElements(); > + uint64_t Size = getContext().getTypeSize(VT); > + // NumElements should be power of 2. > + if ((NumElements & (NumElements - 1)) != 0) > + return true; > + // Size should be greater than 32 bits. > + return Size <= 32; > + } > } > return false; > } > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits