[llvm] [RISCV][CostModel][NFC] Add getRISCVInstructionCost() to TTI for Cost… (PR #73651)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 28 20:19:29 PST 2023
================
@@ -34,6 +34,53 @@ static cl::opt<unsigned> SLPMaxVF(
"exclusively by SLP vectorizer."),
cl::Hidden);
+InstructionCost
+RISCVTTIImpl::getRISCVInstructionCost(RISCVInstruction Inst, MVT VT,
+ unsigned NumInstr,
+ TTI::TargetCostKind CostKind) {
+ if (CostKind == TTI::TCK_CodeSize)
+ return NumInstr;
+
+ InstructionCost LMUL = TLI->getLMULCost(VT);
+ InstructionCost Cost = LMUL * NumInstr;
+
+ if ((CostKind == TTI::TCK_RecipThroughput) ||
+ (CostKind == TTI::TCK_Latency)) {
+ switch (Inst) {
+ case RISCVInstruction::VRGATHER_VI:
+ return NumInstr * TLI->getVRGatherVICost(VT);
+ case RISCVInstruction::VRGATHER_VV:
+ return NumInstr * TLI->getVRGatherVVCost(VT);
+ case RISCVInstruction::VSLIDE:
+ return NumInstr * TLI->getVSlideCost(VT);
+ case RISCVInstruction::VSIMPLE_INT_RED:
+ case RISCVInstruction::VMINMAX_INTFP_RED:
+ case RISCVInstruction::VUNORD_FP_RED: {
+ unsigned VL = VT.getVectorMinNumElements();
+ if (!VT.isFixedLengthVector()) {
+ VL *= *getVScaleForTuning();
+ }
+ return Log2_32_Ceil(VL);
+ }
+ case RISCVInstruction::VORD_FP_RED: {
+ unsigned VL = VT.getVectorMinNumElements();
+ if (!VT.isFixedLengthVector()) {
+ VL *= *getVScaleForTuning();
+ }
+ return VL;
+ }
----------------
lukel97 wrote:
Is the plan to use these in a later patch?
https://github.com/llvm/llvm-project/pull/73651
More information about the llvm-commits
mailing list