Skip to content

Commit 08a6201

Browse files
committed
[TTI][RISCV] Deduplicate type-based VP costing of vpReduction
Refered to: #115983
1 parent a87d484 commit 08a6201

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,38 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
16471647
UI->getPredicate(), CostKind);
16481648
}
16491649
}
1650+
if (VPReductionIntrinsic::isVPReduction(ICA.getID())) {
1651+
std::optional<Intrinsic::ID> RedID =
1652+
VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID());
1653+
assert(RedID.has_value());
1654+
switch (ICA.getID()) {
1655+
case Intrinsic::vp_reduce_add:
1656+
case Intrinsic::vp_reduce_fadd:
1657+
case Intrinsic::vp_reduce_mul:
1658+
case Intrinsic::vp_reduce_fmul:
1659+
case Intrinsic::vp_reduce_and:
1660+
case Intrinsic::vp_reduce_or:
1661+
case Intrinsic::vp_reduce_xor: {
1662+
unsigned RedOp = getArithmeticReductionInstruction(*RedID);
1663+
return thisT()->getArithmeticReductionCost(
1664+
RedOp, cast<VectorType>(ICA.getArgTypes()[1]), ICA.getFlags(),
1665+
CostKind);
1666+
}
1667+
case Intrinsic::vp_reduce_smax:
1668+
case Intrinsic::vp_reduce_smin:
1669+
case Intrinsic::vp_reduce_umax:
1670+
case Intrinsic::vp_reduce_umin:
1671+
case Intrinsic::vp_reduce_fmax:
1672+
case Intrinsic::vp_reduce_fmaximum:
1673+
case Intrinsic::vp_reduce_fmin:
1674+
case Intrinsic::vp_reduce_fminimum: {
1675+
Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID);
1676+
return thisT()->getMinMaxReductionCost(
1677+
MinMaxID, cast<VectorType>(ICA.getArgTypes()[1]),
1678+
ICA.getFlags(), CostKind);
1679+
}
1680+
}
1681+
}
16501682
}
16511683

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

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,37 +1144,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11441144
: RISCV::VMV_V_X,
11451145
LT.second, CostKind);
11461146
}
1147-
case Intrinsic::vp_reduce_add:
1148-
case Intrinsic::vp_reduce_fadd:
1149-
case Intrinsic::vp_reduce_mul:
1150-
case Intrinsic::vp_reduce_fmul:
1151-
case Intrinsic::vp_reduce_and:
1152-
case Intrinsic::vp_reduce_or:
1153-
case Intrinsic::vp_reduce_xor: {
1154-
std::optional<Intrinsic::ID> RedID =
1155-
VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID());
1156-
assert(RedID.has_value());
1157-
unsigned RedOp = getArithmeticReductionInstruction(*RedID);
1158-
return getArithmeticReductionCost(RedOp,
1159-
cast<VectorType>(ICA.getArgTypes()[1]),
1160-
ICA.getFlags(), CostKind);
1161-
}
1162-
case Intrinsic::vp_reduce_smax:
1163-
case Intrinsic::vp_reduce_smin:
1164-
case Intrinsic::vp_reduce_umax:
1165-
case Intrinsic::vp_reduce_umin:
1166-
case Intrinsic::vp_reduce_fmax:
1167-
case Intrinsic::vp_reduce_fmaximum:
1168-
case Intrinsic::vp_reduce_fmin:
1169-
case Intrinsic::vp_reduce_fminimum: {
1170-
std::optional<Intrinsic::ID> RedID =
1171-
VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID());
1172-
assert(RedID.has_value());
1173-
Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID);
1174-
return getMinMaxReductionCost(MinMaxID,
1175-
cast<VectorType>(ICA.getArgTypes()[1]),
1176-
ICA.getFlags(), CostKind);
1177-
}
11781147
}
11791148

11801149
if (ST->hasVInstructions() && RetTy->isVectorTy()) {

0 commit comments

Comments
 (0)