================ @@ -2146,21 +2145,21 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, Address Addr, Addr = Addr.withPointer(Builder.CreateThreadLocalAddress(GV), NotKnownNonNull); + // Handles vectors of sizes that are likely to be expanded to a larger size + // to optimize performance. llvm::Type *SrcTy = Value->getType(); if (const auto *ClangVecTy = Ty->getAs<VectorType>()) { - auto *VecTy = dyn_cast<llvm::FixedVectorType>(SrcTy); - if (!CGM.getCodeGenOpts().PreserveVec3Type) { - // Handle vec3 special. - if (VecTy && !ClangVecTy->isExtVectorBoolType() && - cast<llvm::FixedVectorType>(VecTy)->getNumElements() == 3) { - // Our source is a vec3, do a shuffle vector to make it a vec4. - Value = Builder.CreateShuffleVector(Value, ArrayRef<int>{0, 1, 2, -1}, - "extractVec"); - SrcTy = llvm::FixedVectorType::get(VecTy->getElementType(), 4); + if (auto *VecTy = dyn_cast<llvm::FixedVectorType>(SrcTy)) { + auto *NewVecTy = getTarget().getOptimalVectorType(VecTy, getLangOpts()); + if (!ClangVecTy->isExtVectorBoolType() && VecTy != NewVecTy) { + SmallVector<int, 4> Mask(NewVecTy->getNumElements(), -1); + for (unsigned I = 0; I < VecTy->getNumElements(); ++I) + Mask[I] = I; ---------------- topperc wrote:
std::iota? https://github.com/llvm/llvm-project/pull/104661 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits