Skip to content

Commit 2020283

Browse files
committed
[RISCV][TTI] Implement instruction costs for vp.reduce.*.
1 parent ffda5fc commit 2020283

14 files changed

+1804
-1431
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,75 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11911191
return getCmpSelInstrCost(Instruction::Select, ICA.getReturnType(),
11921192
ICA.getArgTypes()[0], CmpInst::BAD_ICMP_PREDICATE,
11931193
CostKind);
1194+
case Intrinsic::vp_reduce_add:
1195+
case Intrinsic::vp_reduce_fadd:
1196+
case Intrinsic::vp_reduce_mul:
1197+
case Intrinsic::vp_reduce_fmul:
1198+
case Intrinsic::vp_reduce_and:
1199+
case Intrinsic::vp_reduce_or:
1200+
case Intrinsic::vp_reduce_xor: {
1201+
unsigned Opcode;
1202+
switch (ICA.getID()) {
1203+
case Intrinsic::vp_reduce_add:
1204+
Opcode = Instruction::Add;
1205+
break;
1206+
case Intrinsic::vp_reduce_fadd:
1207+
Opcode = Instruction::FAdd;
1208+
break;
1209+
case Intrinsic::vp_reduce_mul:
1210+
Opcode = Instruction::Mul;
1211+
break;
1212+
case Intrinsic::vp_reduce_fmul:
1213+
Opcode = Instruction::FMul;
1214+
break;
1215+
case Intrinsic::vp_reduce_and:
1216+
Opcode = Instruction::And;
1217+
break;
1218+
case Intrinsic::vp_reduce_or:
1219+
Opcode = Instruction::Or;
1220+
break;
1221+
case Intrinsic::vp_reduce_xor:
1222+
Opcode = Instruction::Xor;
1223+
break;
1224+
}
1225+
return getArithmeticReductionCost(Opcode,
1226+
cast<VectorType>(ICA.getArgTypes()[1]),
1227+
ICA.getFlags(), CostKind);
1228+
}
1229+
case Intrinsic::vp_reduce_smax:
1230+
case Intrinsic::vp_reduce_smin:
1231+
case Intrinsic::vp_reduce_umax:
1232+
case Intrinsic::vp_reduce_umin:
1233+
case Intrinsic::vp_reduce_fmax:
1234+
case Intrinsic::vp_reduce_fmaximum:
1235+
case Intrinsic::vp_reduce_fmin:
1236+
case Intrinsic::vp_reduce_fminimum: {
1237+
unsigned IID;
1238+
switch (ICA.getID()) {
1239+
case Intrinsic::vp_reduce_smax:
1240+
IID = Intrinsic::smax;
1241+
break;
1242+
case Intrinsic::vp_reduce_smin:
1243+
IID = Intrinsic::smin;
1244+
break;
1245+
case Intrinsic::vp_reduce_umax:
1246+
IID = Intrinsic::umax;
1247+
break;
1248+
case Intrinsic::vp_reduce_umin:
1249+
IID = Intrinsic::umin;
1250+
break;
1251+
case Intrinsic::vp_reduce_fmax:
1252+
case Intrinsic::vp_reduce_fmaximum:
1253+
IID = Intrinsic::maximum;
1254+
break;
1255+
case Intrinsic::vp_reduce_fmin:
1256+
case Intrinsic::vp_reduce_fminimum:
1257+
IID = Intrinsic::minimum;
1258+
break;
1259+
}
1260+
return getMinMaxReductionCost(IID, cast<VectorType>(ICA.getArgTypes()[1]),
1261+
ICA.getFlags(), CostKind);
1262+
}
11941263
}
11951264

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

llvm/test/Analysis/CostModel/RISCV/reduce-add.ll

Lines changed: 102 additions & 64 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-and.ll

Lines changed: 106 additions & 68 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-fadd.ll

Lines changed: 220 additions & 220 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-fmaximum.ll

Lines changed: 112 additions & 112 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-fminimum.ll

Lines changed: 56 additions & 56 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-fmul.ll

Lines changed: 127 additions & 127 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-max.ll

Lines changed: 204 additions & 128 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-min.ll

Lines changed: 204 additions & 128 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-or.ll

Lines changed: 108 additions & 70 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-scalable-fp.ll

Lines changed: 134 additions & 134 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-scalable-int.ll

Lines changed: 228 additions & 228 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/reduce-xor.ll

Lines changed: 102 additions & 64 deletions
Large diffs are not rendered by default.

llvm/test/Analysis/CostModel/RISCV/rvv-intrinsics.ll

Lines changed: 32 additions & 32 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)