Skip to content

Commit 4738b83

Browse files
committed
[TTI][RISCV] Deduplicate type-based VP costing of vpcmp/vpcast
Refered to: llvm#115983
1 parent c4d656a commit 4738b83

File tree

2 files changed

+15
-33
lines changed

2 files changed

+15
-33
lines changed

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,21 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
16181618
return thisT()->getArithmeticInstrCost(*FOp, ICA.getReturnType(),
16191619
CostKind);
16201620
}
1621+
if (VPCastIntrinsic::isVPCast(ICA.getID())) {
1622+
return thisT()->getCastInstrCost(
1623+
*FOp, ICA.getReturnType(), ICA.getArgTypes()[0],
1624+
TTI::CastContextHint::None, CostKind);
1625+
}
1626+
if (VPCmpIntrinsic::isVPCmp(ICA.getID())) {
1627+
// We can only handle vp_cmp intrinsics with underlying instructions.
1628+
if (ICA.getInst()) {
1629+
assert(FOp);
1630+
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
1631+
return thisT()->getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0],
1632+
ICA.getReturnType(),
1633+
UI->getPredicate(), CostKind);
1634+
}
1635+
}
16211636
}
16221637

16231638
std::optional<Intrinsic::ID> FID =

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,39 +1113,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11131113
return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
11141114
break;
11151115
}
1116-
// vp int cast ops.
1117-
case Intrinsic::vp_trunc:
1118-
case Intrinsic::vp_zext:
1119-
case Intrinsic::vp_sext:
1120-
// vp float cast ops.
1121-
case Intrinsic::vp_fptoui:
1122-
case Intrinsic::vp_fptosi:
1123-
case Intrinsic::vp_uitofp:
1124-
case Intrinsic::vp_sitofp:
1125-
case Intrinsic::vp_fptrunc:
1126-
case Intrinsic::vp_fpext: {
1127-
std::optional<unsigned> FOp =
1128-
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
1129-
assert(FOp.has_value() && !ICA.getArgTypes().empty());
1130-
return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
1131-
TTI::CastContextHint::None, CostKind);
1132-
break;
1133-
}
1134-
1135-
// vp compare
1136-
case Intrinsic::vp_icmp:
1137-
case Intrinsic::vp_fcmp: {
1138-
Intrinsic::ID IID = ICA.getID();
1139-
std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
1140-
// We can only handle vp_cmp intrinsics with underlying instructions.
1141-
if (!ICA.getInst())
1142-
break;
1143-
1144-
assert(FOp);
1145-
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
1146-
return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
1147-
UI->getPredicate(), CostKind);
1148-
}
11491116
case Intrinsic::vp_select: {
11501117
Intrinsic::ID IID = ICA.getID();
11511118
std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);

0 commit comments

Comments
 (0)