[llvm] [RISCV] Adjust select shuffle cost to reflect mask creation cost (PR #77963)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 17 11:20:34 PST 2024
================
@@ -443,10 +441,13 @@ InstructionCost RISCVTTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
// vsetivli zero, 8, e8, mf2, ta, ma (ignored)
// vmv.s.x v0, a0
// vmerge.vvm v8, v9, v8, v0
+ // We use 2 for the cost of the mask materialization as this is the true
+ // cost for small masks and most shuffles are small. At worst, this cost
+ // should be a very small constant for the constant pool load. As such,
+ // we may bias towards large selects slightly more than truely warranted.
return LT.first *
- (TLI->getLMULCost(LT.second) + // FIXME: should be 1 for li
- getRISCVInstructionCost({RISCV::VMV_S_X, RISCV::VMERGE_VVM},
- LT.second, CostKind));
+ (2 + getRISCVInstructionCost({RISCV::VMERGE_VVM},
----------------
preames wrote:
> Can we query the cost of VMV_S_*/VMV_*_S instead? So vendors can provide their own number in getRISCVInstructionCost.
I would actively prefer not to add complexity unless needed. To you have knowledge of a particular processor which would need this override?
https://github.com/llvm/llvm-project/pull/77963
More information about the llvm-commits
mailing list