[llvm] [RISCV] Cost UDIV/UREM by a constant power of 2 as a SHL/AND in getArithmeticInstrCost() (PR #179570)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 14 16:57:09 PDT 2026
================
@@ -2669,6 +2669,27 @@ RISCVTTIImpl::getIndexedVectorInstrCostFromEnd(unsigned Opcode, Type *Val,
nullptr);
}
+std::optional<InstructionCost>
+RISCVTTIImpl::getConvertedArithmeticInstructionCost(
+ unsigned ISDOpcode, Type *Ty, TTI::TargetCostKind CostKind,
+ TTI::OperandValueInfo Opd1Info, TTI::OperandValueInfo Opd2Info,
+ ArrayRef<const Value *> Args, const Instruction *CxtI) const {
+ // Vector unsigned division/remainder will be simplified to shifts/masks.
+ if ((ISDOpcode == ISD::UDIV || ISDOpcode == ISD::UREM) &&
+ Opd2Info.isConstant() && Opd2Info.isPowerOf2()) {
+ if (ISDOpcode == ISD::UDIV)
+ return getArithmeticInstrCost(Instruction::LShr, Ty, CostKind,
+ Opd1Info.getNoProps(),
+ Opd2Info.getNoProps());
+ // UREM
+ else
----------------
topperc wrote:
No else after return
https://github.com/llvm/llvm-project/pull/179570
More information about the llvm-commits
mailing list