[llvm] [SLP][AMDGPU] Vectorize operands of non-trivially-vectorizable intrinsic calls (PR #189784)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 1 03:34:05 PDT 2026
================
@@ -29461,6 +29501,22 @@ bool SLPVectorizerPass::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
PostProcessCmps.insert(cast<CmpInst>(&*It));
}
+ DenseMap<Intrinsic::ID, SmallSetVector<Value *, 4>> IntrinsicSeedOps;
+ for (Instruction &I : *BB) {
+ if (R.isDeleted(&I))
+ continue;
+ // Collect operands of non-trivially vectorizable intrinsic calls (e.g.,
+ // llvm.amdgcn.exp2) and group by intrinsic ID, so their operands can be
+ // vectorized independently.
+ if (Value *Op = getNonTriviallyVectorizableIntrinsicCallOperand(&I))
+ IntrinsicSeedOps[cast<CallInst>(&I)->getIntrinsicID()].insert(Op);
+ }
+ // Try to vectorize per intrinsic call ID.
+ for (auto &[ID, Ops] : IntrinsicSeedOps) {
+ if (Ops.size() >= 2)
+ Changed |= tryToVectorizeList(Ops.getArrayRef(), R);
----------------
alexey-bataev wrote:
I think we already handle this in tryToVectorizeList
https://github.com/llvm/llvm-project/pull/189784
More information about the llvm-commits
mailing list