[llvm] [RISCV] Use VP's interfaces to reconstruct cast/cmp/binop cost. NFC (PR #115978)

Elvis Wang via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 12 19:04:52 PST 2024


================
@@ -1193,6 +1134,35 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
                               CostKind);
   }
 
+  if (VPBinOpIntrinsic::isVPBinOp(ICA.getID())) {
+    std::optional<unsigned> FOp =
+        VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
+    assert(FOp.has_value());
+    return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
+  }
+
+  // vp cmp ops
+  if (VPCmpIntrinsic::isVPCmp(ICA.getID())) {
+    Intrinsic::ID IID = ICA.getID();
+    std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
+    // We can only handle vp_cmp intrinsics with underlying instructions.
+    if (ICA.getInst()) {
+      assert(FOp);
+      auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
+      return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
+                                UI->getPredicate(), CostKind);
+    }
+  }
+
+  // vp cast ops
+  if (VPCastIntrinsic::isVPCast(ICA.getID())) {
+    std::optional<unsigned> FOp =
+        VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
+    assert(FOp.has_value() && !ICA.getArgTypes().empty());
----------------
ElvisWang123 wrote:

LGTM.

nit: We could remove the assertion of `FOp.has_value()` since it already checked in the `isVPCast()`.

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


More information about the llvm-commits mailing list