[llvm] [RISCV][TTI] Recognize CONCAT_VECTORS if a shufflevector mask is multiple insert subvector. (PR #110457)
Han-Kuan Chen via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 7 09:59:41 PDT 2024
================
@@ -343,6 +343,49 @@ RISCVTTIImpl::getConstantPoolLoadCost(Type *Ty, TTI::TargetCostKind CostKind) {
/*AddressSpace=*/0, CostKind);
}
+InstructionCost
+RISCVTTIImpl::isMultipleInsertSubvector(VectorType *Tp, ArrayRef<int> Mask,
+ TTI::TargetCostKind CostKind) {
+ if (!isa<FixedVectorType>(Tp))
+ return InstructionCost::getInvalid();
+ std::pair<InstructionCost, MVT> LT = getTypeLegalizationCost(Tp);
+ if (LT.second.getScalarSizeInBits() == 1)
+ return InstructionCost::getInvalid();
+ // Try to guess SubTp.
+ for (unsigned SubVecSize = 1, E = Mask.size(); SubVecSize < E;
+ SubVecSize <<= 1) {
+ if (E % SubVecSize != 0)
+ continue;
+ SmallVector<int> RepeatedPattern(createSequentialMask(0, SubVecSize, 0));
+ bool Skip = false;
+ for (unsigned I = 0; I != E; I += SubVecSize)
+ if (!Mask.slice(I, SubVecSize).equals(RepeatedPattern)) {
+ Skip = true;
+ break;
+ }
+ if (Skip)
+ continue;
----------------
HanKuanChen wrote:
What do you mean "if we iterate over each index and mark when it goes back to zero"?
https://github.com/llvm/llvm-project/pull/110457
More information about the llvm-commits
mailing list