[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