[llvm] [SLP]Allow bitcast/bswap based reductions for types, larger than the total strided size (PR #184018)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 5 10:55:26 PST 2026
================
@@ -21634,17 +21648,25 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
Const->VectorizedValue = PoisonValue::get(getWidenedType(
Const->Scalars.front()->getType(), Const->getVectorFactor()));
Value *Op = vectorizeOperand(ZExt, 0);
+ auto *SrcType = IntegerType::get(
+ Op->getContext(),
+ DL->getTypeSizeInBits(cast<CastInst>(ZExt->getMainOp())->getSrcTy()) *
+ E->getVectorFactor());
+ auto *OrigScalarTy = ScalarTy;
// Set the scalar type properly to avoid casting to the extending type.
ScalarTy = cast<CastInst>(ZExt->getMainOp())->getSrcTy();
Op = FinalShuffle(Op, E);
- auto *V = Builder.CreateBitCast(
- Op, IntegerType::get(
- Op->getContext(),
- DL->getTypeSizeInBits(ZExt->getMainOp()->getType())));
- if (ShuffleOrOp == TreeEntry::ReducedBitcastBSwap)
+ auto *V = Builder.CreateBitCast(Op, SrcType);
+ ++NumVectorInstructions;
+ if (ShuffleOrOp == TreeEntry::ReducedBitcastBSwap) {
V = Builder.CreateUnaryIntrinsic(Intrinsic::bswap, V);
+ ++NumVectorInstructions;
+ }
+ if (SrcType != OrigScalarTy) {
+ V = Builder.CreateIntCast(V, OrigScalarTy, /*isSigned=*/false);
+ ++NumVectorInstructions;
+ }
----------------
alexey-bataev wrote:
Missing statistics increment, yes
https://github.com/llvm/llvm-project/pull/184018
More information about the llvm-commits
mailing list