[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