Skip to content

Commit 3dbd461

Browse files
committed
[RISCV] Use VP's interfaces to reconstruct cast/cmp/binop cost. NFC
1 parent e855fea commit 3dbd461

File tree

1 file changed

+29
-59
lines changed

1 file changed

+29
-59
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 29 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,65 +1104,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11041104
return Cost * LT.first;
11051105
break;
11061106
}
1107-
// vp integer arithmetic ops.
1108-
case Intrinsic::vp_add:
1109-
case Intrinsic::vp_and:
1110-
case Intrinsic::vp_ashr:
1111-
case Intrinsic::vp_lshr:
1112-
case Intrinsic::vp_mul:
1113-
case Intrinsic::vp_or:
1114-
case Intrinsic::vp_sdiv:
1115-
case Intrinsic::vp_shl:
1116-
case Intrinsic::vp_srem:
1117-
case Intrinsic::vp_sub:
1118-
case Intrinsic::vp_udiv:
1119-
case Intrinsic::vp_urem:
1120-
case Intrinsic::vp_xor:
1121-
// vp float arithmetic ops.
1122-
case Intrinsic::vp_fadd:
1123-
case Intrinsic::vp_fsub:
1124-
case Intrinsic::vp_fmul:
1125-
case Intrinsic::vp_fdiv:
1126-
case Intrinsic::vp_frem: {
1127-
std::optional<unsigned> FOp =
1128-
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
1129-
assert(FOp.has_value());
1130-
return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
1131-
break;
1132-
}
1133-
// vp int cast ops.
1134-
case Intrinsic::vp_trunc:
1135-
case Intrinsic::vp_zext:
1136-
case Intrinsic::vp_sext:
1137-
// vp float cast ops.
1138-
case Intrinsic::vp_fptoui:
1139-
case Intrinsic::vp_fptosi:
1140-
case Intrinsic::vp_uitofp:
1141-
case Intrinsic::vp_sitofp:
1142-
case Intrinsic::vp_fptrunc:
1143-
case Intrinsic::vp_fpext: {
1144-
std::optional<unsigned> FOp =
1145-
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
1146-
assert(FOp.has_value() && !ICA.getArgTypes().empty());
1147-
return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
1148-
TTI::CastContextHint::None, CostKind);
1149-
break;
1150-
}
1151-
1152-
// vp compare
1153-
case Intrinsic::vp_icmp:
1154-
case Intrinsic::vp_fcmp: {
1155-
Intrinsic::ID IID = ICA.getID();
1156-
std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
1157-
// We can only handle vp_cmp intrinsics with underlying instructions.
1158-
if (!ICA.getInst())
1159-
break;
1160-
1161-
assert(FOp);
1162-
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
1163-
return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
1164-
UI->getPredicate(), CostKind);
1165-
}
11661107
// vp load/store
11671108
case Intrinsic::vp_load:
11681109
case Intrinsic::vp_store: {
@@ -1193,6 +1134,35 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11931134
CostKind);
11941135
}
11951136

1137+
if (VPBinOpIntrinsic::isVPBinOp(ICA.getID())) {
1138+
std::optional<unsigned> FOp =
1139+
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
1140+
assert(FOp.has_value());
1141+
return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
1142+
}
1143+
1144+
// vp cmp ops
1145+
if (VPCmpIntrinsic::isVPCmp(ICA.getID())) {
1146+
Intrinsic::ID IID = ICA.getID();
1147+
std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
1148+
// We can only handle vp_cmp intrinsics with underlying instructions.
1149+
if (ICA.getInst()) {
1150+
assert(FOp);
1151+
auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
1152+
return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
1153+
UI->getPredicate(), CostKind);
1154+
}
1155+
}
1156+
1157+
// vp cast ops
1158+
if (VPCastIntrinsic::isVPCast(ICA.getID())) {
1159+
std::optional<unsigned> FOp =
1160+
VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
1161+
assert(FOp.has_value() && !ICA.getArgTypes().empty());
1162+
return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
1163+
TTI::CastContextHint::None, CostKind);
1164+
}
1165+
11961166
if (ST->hasVInstructions() && RetTy->isVectorTy()) {
11971167
if (auto LT = getTypeLegalizationCost(RetTy);
11981168
LT.second.isVector()) {

0 commit comments

Comments
 (0)