[llvm] b11fe33 - [RISCV] Correct the cost model for the i1 reduce.add and reduce.or. (#122349)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 9 18:05:26 PST 2025
Author: Craig Topper
Date: 2025-01-09T18:05:22-08:00
New Revision: b11fe33aea82444387422e550e10f1fba5bcfaa3
URL: https://github.com/llvm/llvm-project/commit/b11fe33aea82444387422e550e10f1fba5bcfaa3
DIFF: https://github.com/llvm/llvm-project/commit/b11fe33aea82444387422e550e10f1fba5bcfaa3.diff
LOG: [RISCV] Correct the cost model for the i1 reduce.add and reduce.or. (#122349)
reduce.add uses the same sequence as reduce.xor. reduce.or should use
vmor not vmxor.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
index 850d6244affa50..66be30c4b42bae 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
@@ -1548,7 +1548,7 @@ RISCVTTIImpl::getArithmeticReductionCost(unsigned Opcode, VectorType *Ty,
getRISCVInstructionCost(RISCV::VCPOP_M, LT.second, CostKind) +
getCmpSelInstrCost(Instruction::ICmp, ElementTy, ElementTy,
CmpInst::ICMP_EQ, CostKind);
- } else if (ISD == ISD::XOR) {
+ } else if (ISD == ISD::XOR || ISD == ISD::ADD) {
// Example sequences:
// vsetvli a0, zero, e8, mf8, ta, ma
// vmxor.mm v8, v0, v8 ; needed every time type is split
@@ -1558,13 +1558,14 @@ RISCVTTIImpl::getArithmeticReductionCost(unsigned Opcode, VectorType *Ty,
getRISCVInstructionCost(RISCV::VMXOR_MM, LT.second, CostKind) +
getRISCVInstructionCost(RISCV::VCPOP_M, LT.second, CostKind) + 1;
} else {
+ assert(ISD == ISD::OR);
// Example sequences:
// vsetvli a0, zero, e8, mf8, ta, ma
- // vmxor.mm v8, v9, v8 ; needed every time type is split
+ // vmor.mm v8, v9, v8 ; needed every time type is split
// vcpop.m a0, v0
// snez a0, a0
return (LT.first - 1) *
- getRISCVInstructionCost(RISCV::VMXOR_MM, LT.second, CostKind) +
+ getRISCVInstructionCost(RISCV::VMOR_MM, LT.second, CostKind) +
getRISCVInstructionCost(RISCV::VCPOP_M, LT.second, CostKind) +
getCmpSelInstrCost(Instruction::ICmp, ElementTy, ElementTy,
CmpInst::ICMP_NE, CostKind);
More information about the llvm-commits
mailing list