[llvm] [RISCV][CostModel] Correct the cost of some reductions (PR #118072)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Sat Nov 30 03:06:42 PST 2024


================
@@ -1534,6 +1534,13 @@ RISCVTTIImpl::getArithmeticReductionCost(unsigned Opcode, VectorType *Ty,
              getRISCVInstructionCost(Opcodes, LT.second, CostKind) +
              getCmpSelInstrCost(Instruction::ICmp, ElementTy, ElementTy,
                                 CmpInst::ICMP_EQ, CostKind);
+    } else if (ISD == ISD::XOR) {
+      // Example sequences:
+      //   vsetvli a0, zero, e8, mf8, ta, ma
+      //   vcpop.m a0, v0
+      //   andi a0, a0, 1
+      Opcodes = {RISCV::VCPOP_M};
+      return LT.first + getRISCVInstructionCost(Opcodes, LT.second, CostKind);
----------------
lukel97 wrote:

Shouldn't this be
```suggestion
      return LT.first * getRISCVInstructionCost(Opcodes, LT.second, CostKind);
```

With that said, I'm also not sure why the existing sequences are adding the legalization cost instead of multiplying it. We multiply it everywhere else in RISCVTargetTransformInfo. Maybe this is something to fix in a follow up patch

https://github.com/llvm/llvm-project/pull/118072


More information about the llvm-commits mailing list