[llvm-branch-commits] [llvm] [AArch64] SLP can vectorize frem (PR #82488)

Paul Walker via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Feb 22 07:15:31 PST 2024


================
@@ -8362,9 +8362,12 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
       unsigned OpIdx = isa<UnaryOperator>(VL0) ? 0 : 1;
       TTI::OperandValueInfo Op1Info = getOperandInfo(E->getOperand(0));
       TTI::OperandValueInfo Op2Info = getOperandInfo(E->getOperand(OpIdx));
-      return TTI->getArithmeticInstrCost(ShuffleOrOp, VecTy, CostKind, Op1Info,
-                                         Op2Info) +
-             CommonCost;
+      InstructionCost VecInstrCost = TTI->getArithmeticInstrCost(
+          ShuffleOrOp, VecTy, CostKind, Op1Info, Op2Info);
+      // Some targets can replace frem with vector library calls.
+      InstructionCost VecCallCost =
+          getVecLibCallCost(VL0, TTI, TLI, VecTy, CostKind);
+      return std::min(VecInstrCost, VecCallCost) + CommonCost;
----------------
paulwalker-arm wrote:

This seems a little arbitrary/complex given we know only one of the costs is valid at any time.  Perhaps it suggests you really want to implement `getVecLibAwareArithmeticInstrCost`?

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


More information about the llvm-branch-commits mailing list