@@ -1179,6 +1179,75 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
11791179 return getCmpSelInstrCost (Instruction::Select, ICA.getReturnType (),
11801180 ICA.getArgTypes ()[0 ], CmpInst::BAD_ICMP_PREDICATE,
11811181 CostKind);
1182+ case Intrinsic::vp_reduce_add:
1183+ case Intrinsic::vp_reduce_fadd:
1184+ case Intrinsic::vp_reduce_mul:
1185+ case Intrinsic::vp_reduce_fmul:
1186+ case Intrinsic::vp_reduce_and:
1187+ case Intrinsic::vp_reduce_or:
1188+ case Intrinsic::vp_reduce_xor: {
1189+ unsigned Opcode;
1190+ switch (ICA.getID ()) {
1191+ case Intrinsic::vp_reduce_add:
1192+ Opcode = Instruction::Add;
1193+ break ;
1194+ case Intrinsic::vp_reduce_fadd:
1195+ Opcode = Instruction::FAdd;
1196+ break ;
1197+ case Intrinsic::vp_reduce_mul:
1198+ Opcode = Instruction::Mul;
1199+ break ;
1200+ case Intrinsic::vp_reduce_fmul:
1201+ Opcode = Instruction::FMul;
1202+ break ;
1203+ case Intrinsic::vp_reduce_and:
1204+ Opcode = Instruction::And;
1205+ break ;
1206+ case Intrinsic::vp_reduce_or:
1207+ Opcode = Instruction::Or;
1208+ break ;
1209+ case Intrinsic::vp_reduce_xor:
1210+ Opcode = Instruction::Xor;
1211+ break ;
1212+ }
1213+ return getArithmeticReductionCost (Opcode,
1214+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1215+ ICA.getFlags (), CostKind);
1216+ }
1217+ case Intrinsic::vp_reduce_smax:
1218+ case Intrinsic::vp_reduce_smin:
1219+ case Intrinsic::vp_reduce_umax:
1220+ case Intrinsic::vp_reduce_umin:
1221+ case Intrinsic::vp_reduce_fmax:
1222+ case Intrinsic::vp_reduce_fmaximum:
1223+ case Intrinsic::vp_reduce_fmin:
1224+ case Intrinsic::vp_reduce_fminimum: {
1225+ unsigned IID;
1226+ switch (ICA.getID ()) {
1227+ case Intrinsic::vp_reduce_smax:
1228+ IID = Intrinsic::smax;
1229+ break ;
1230+ case Intrinsic::vp_reduce_smin:
1231+ IID = Intrinsic::smin;
1232+ break ;
1233+ case Intrinsic::vp_reduce_umax:
1234+ IID = Intrinsic::umax;
1235+ break ;
1236+ case Intrinsic::vp_reduce_umin:
1237+ IID = Intrinsic::umin;
1238+ break ;
1239+ case Intrinsic::vp_reduce_fmax:
1240+ case Intrinsic::vp_reduce_fmaximum:
1241+ IID = Intrinsic::maximum;
1242+ break ;
1243+ case Intrinsic::vp_reduce_fmin:
1244+ case Intrinsic::vp_reduce_fminimum:
1245+ IID = Intrinsic::minimum;
1246+ break ;
1247+ }
1248+ return getMinMaxReductionCost (IID, cast<VectorType>(ICA.getArgTypes ()[1 ]),
1249+ ICA.getFlags (), CostKind);
1250+ }
11821251 }
11831252
11841253 if (ST->hasVInstructions () && RetTy->isVectorTy ()) {
0 commit comments