@@ -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 ()) {
0 commit comments