[llvm] [VectorCombine] Add a cost model for shuffleToIdentity. (PR #93937)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 3 07:15:16 PDT 2024
================
@@ -1878,6 +1893,31 @@ bool VectorCombine::foldShuffleToIdentity(Instruction &I) {
if (NumVisited <= 1)
return false;
+ LLVM_DEBUG(dbgs() << "Found a set of shuffles that can be removed:\n");
+ InstructionCost OldShuffleCost;
+ for (auto *I : VisitedShuffles) {
+ InstructionCost C = TTI.getInstructionCost(I, TTI::TCK_RecipThroughput);
+ LLVM_DEBUG(dbgs() << C << *I << "\n");
+ OldShuffleCost += C;
+ }
+ LLVM_DEBUG(dbgs() << " total cost " << OldShuffleCost << "\n");
+ SmallVector<int, 16> ExtractMask(Ty->getNumElements());
+ std::iota(ExtractMask.begin(), ExtractMask.end(), 0);
+ InstructionCost IdentityCost = TTI.getShuffleCost(
+ TTI::SK_PermuteSingleSrc, Ty, ExtractMask, TTI::TCK_RecipThroughput);
+ InstructionCost SplatCost = TTI.getShuffleCost(
+ TTI::SK_Broadcast, Ty, std::nullopt, TTI::TCK_RecipThroughput);
+ InstructionCost NewShuffleCost =
+ IdentityCost * IdentityLeafs.size() + SplatCost * SplatLeafs.size();
+ LLVM_DEBUG(dbgs() << " vs " << NewShuffleCost << " (" << IdentityCost
+ << " * " << IdentityLeafs.size() << " + " << SplatCost
+ << " * " << SplatLeafs.size() << ")\n");
----------------
davemgreen wrote:
Whilst I appreciate succinct debug messages, it has been useful a couple of times already to be able to tell the different costs of splats vs identities on different platforms.
https://github.com/llvm/llvm-project/pull/93937
More information about the llvm-commits
mailing list