================ @@ -7095,6 +7096,40 @@ class APValueToBufferConverter { return true; } + bool visitVector(const APValue &Val, QualType Ty, CharUnits Offset) { + const auto *VT = Ty->castAs<VectorType>(); + unsigned VectorLength = Val.getVectorLength(); + + if (VT->isExtVectorBoolType()) { + // Special handling for OpenCL bool vectors: we need to pack the vector + // of 1-bit unsigned integers into a single integer with the corresponding + // bits set, then write out the resulting integer. + + CharUnits VecWidthBits = Info.Ctx.getTypeSizeInChars(VT) * 8; + + APSInt Bits(VecWidthBits.getQuantity()); + for (unsigned I = 0; I != VectorLength; ++I) { + const APValue &SubObj = Val.getVectorElt(I); + assert(SubObj.isInt() && "Bool vector element isn't an int?"); + Bits.setBitVal(I, !SubObj.getInt().isZero()); ---------------- DaMatrix wrote:
Okay, the latest revision will now fail to evaluate vectors which aren't a multiple of the byte size. https://github.com/llvm/llvm-project/pull/66894 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits