[llvm] [VPlan] Support struct return types for widen intrinsics (NFC). (PR #165218)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 4 04:09:16 PST 2025
================
@@ -4100,7 +4100,22 @@ static bool willGenerateVectors(VPlan &Plan, ElementCount VF,
Type *ScalarTy = TypeInfo.inferScalarType(ToCheck);
if (!Visited.insert({ScalarTy}).second)
continue;
- Type *WideTy = toVectorizedTy(ScalarTy, VF);
+ Type *WideTy;
+ if (auto *WI = dyn_cast<VPWidenIntrinsicRecipe>(&R);
+ WI && ScalarTy->isStructTy()) {
+ auto *StructTy = cast<StructType>(ScalarTy);
+ SmallVector<Type *, 2> Tys;
+ for (unsigned I = 0, E = StructTy->getNumElements(); I != E; ++I) {
+ Type *ElementTy = StructTy->getStructElementType(I);
+ if (!isVectorIntrinsicWithStructReturnScalarAtField(
+ WI->getVectorIntrinsicID(), I))
+ ElementTy = toVectorizedTy(ElementTy, VF);
+ Tys.push_back(ElementTy);
+ }
+ WideTy = StructType::create(Tys);
+ } else
----------------
MacDue wrote:
This should be part of the `toVectorizedTy` helper, as otherwise the helper is pointless as it can't return a vectorized type.
https://github.com/llvm/llvm-project/pull/165218
More information about the llvm-commits
mailing list