[llvm] [SLP] Split blocking build-vector stores in scalar chains (PR #194970)
Yaxun Liu via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 30 10:46:24 PDT 2026
================
@@ -27265,6 +27267,183 @@ bool SLPVectorizerPass::vectorizeStores(
return Changed;
}
+static bool collectBuildVector(Value *V, SmallVectorImpl<Value *> &Elts,
+ SmallVectorImpl<Instruction *> *Insts = nullptr) {
+ auto *VecTy = dyn_cast<FixedVectorType>(V->getType());
+ if (!VecTy)
+ return false;
+ Elts.assign(VecTy->getNumElements(), nullptr);
+ Value *Cur = V;
+ while (auto *IE = dyn_cast<InsertElementInst>(Cur)) {
+ auto *Idx = dyn_cast<ConstantInt>(IE->getOperand(2));
+ if (!Idx || Idx->getValue().uge(Elts.size()))
+ return false;
+ Elts[Idx->getZExtValue()] = IE->getOperand(1);
+ if (Insts)
+ Insts->push_back(IE);
+ Cur = IE->getOperand(0);
+ }
+ if (!isa<PoisonValue, UndefValue>(Cur))
----------------
yxsamliu wrote:
fixed
https://github.com/llvm/llvm-project/pull/194970
More information about the llvm-commits
mailing list