[llvm] [SLP] More accurately cost RISCV scalar splats (PR #213104)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 16 03:40:37 PDT 2026
================
@@ -3593,6 +3608,31 @@ bool RISCVTTIImpl::canSplatOperand(Instruction *I, int Operand) const {
}
}
+TargetTransformInfo::VectorInstrContext RISCVTTIImpl::getBuildVectorContextHint(
+ ArrayRef<int> Mask, ArrayRef<Value *> Scalars,
+ function_ref<bool(SmallVectorImpl<TargetTransformInfo::BuildVectorUseOp> &)>
+ GatherUseOps) const {
+ if (Scalars.empty() || !ST->sinkSplatOperands() ||
+ !ShuffleVectorInst::isZeroEltSplatMask(Mask, Mask.size()))
+ return VectorInstrContext::None;
+
+ Value *SplatVal = Scalars.front();
+ if (isa<VectorType>(SplatVal->getType()) || isa<ExtractElementInst>(SplatVal))
+ return VectorInstrContext::None;
----------------
alexey-bataev wrote:
```suggestion
const auto *SplatIt = find_if_not(Scalars, IsaPred<UndefValue>);
if (SplatIt == Scalars.end() || (*SplatIt)->getType()->isIntegerTy(1) ||
isa<VectorType>((*SplatIt)->getType()) || isa<ExtractElementInst>(*SplatIt))
```
https://github.com/llvm/llvm-project/pull/213104
More information about the llvm-commits
mailing list