Skip to content

Commit

Permalink
[TTI][RISCV] Deduplicate type-based VP costing of vpcmp/vpcast (#117520)
Browse files Browse the repository at this point in the history
Refered to: #115983
  • Loading branch information
LiqinWeng authored Nov 26, 2024
1 parent bf07a56 commit dd7aabf
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 33 deletions.
15 changes: 15 additions & 0 deletions llvm/include/llvm/CodeGen/BasicTTIImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1632,6 +1632,21 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
return thisT()->getArithmeticInstrCost(*FOp, ICA.getReturnType(),
CostKind);
}
if (VPCastIntrinsic::isVPCast(ICA.getID())) {
return thisT()->getCastInstrCost(
*FOp, ICA.getReturnType(), ICA.getArgTypes()[0],
TTI::CastContextHint::None, CostKind);
}
if (VPCmpIntrinsic::isVPCmp(ICA.getID())) {
// We can only handle vp_cmp intrinsics with underlying instructions.
if (ICA.getInst()) {
assert(FOp);
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
return thisT()->getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0],
ICA.getReturnType(),
UI->getPredicate(), CostKind);
}
}
}

std::optional<Intrinsic::ID> FID =
Expand Down
33 changes: 0 additions & 33 deletions llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1115,39 +1115,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
break;
}
// vp int cast ops.
case Intrinsic::vp_trunc:
case Intrinsic::vp_zext:
case Intrinsic::vp_sext:
// vp float cast ops.
case Intrinsic::vp_fptoui:
case Intrinsic::vp_fptosi:
case Intrinsic::vp_uitofp:
case Intrinsic::vp_sitofp:
case Intrinsic::vp_fptrunc:
case Intrinsic::vp_fpext: {
std::optional<unsigned> FOp =
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
assert(FOp.has_value() && !ICA.getArgTypes().empty());
return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
TTI::CastContextHint::None, CostKind);
break;
}

// vp compare
case Intrinsic::vp_icmp:
case Intrinsic::vp_fcmp: {
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())
break;

assert(FOp);
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
UI->getPredicate(), CostKind);
}
case Intrinsic::vp_select: {
Intrinsic::ID IID = ICA.getID();
std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
Expand Down

0 comments on commit dd7aabf

Please sign in to comment.