@@ -1180,78 +1180,65 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
1180
1180
ICA.getArgTypes ()[0 ], CmpInst::BAD_ICMP_PREDICATE,
1181
1181
CostKind);
1182
1182
case Intrinsic::vp_reduce_add:
1183
+ return getArithmeticReductionCost (Instruction::Add,
1184
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1185
+ std::nullopt, CostKind);
1183
1186
case Intrinsic::vp_reduce_fadd:
1187
+ return getArithmeticReductionCost (Instruction::FAdd,
1188
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1189
+ ICA.getFlags (), CostKind);
1184
1190
case Intrinsic::vp_reduce_mul:
1191
+ return getArithmeticReductionCost (Instruction::Mul,
1192
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1193
+ std::nullopt, CostKind);
1185
1194
case Intrinsic::vp_reduce_fmul:
1195
+ return getArithmeticReductionCost (Instruction::FMul,
1196
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1197
+ ICA.getFlags (), CostKind);
1186
1198
case Intrinsic::vp_reduce_and:
1199
+ return getArithmeticReductionCost (Instruction::And,
1200
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1201
+ std::nullopt, CostKind);
1187
1202
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,
1203
+ return getArithmeticReductionCost (Instruction::Or,
1214
1204
cast<VectorType>(ICA.getArgTypes ()[1 ]),
1215
- ICA.getFlags (), CostKind);
1216
- }
1205
+ std::nullopt, CostKind);
1206
+ case Intrinsic::vp_reduce_xor:
1207
+ return getArithmeticReductionCost (Instruction::Xor,
1208
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1209
+ std::nullopt, CostKind);
1217
1210
case Intrinsic::vp_reduce_smax:
1211
+ return getMinMaxReductionCost (Intrinsic::smax,
1212
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1213
+ ICA.getFlags (), CostKind);
1218
1214
case Intrinsic::vp_reduce_smin:
1215
+ return getMinMaxReductionCost (Intrinsic::smin,
1216
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1217
+ ICA.getFlags (), CostKind);
1219
1218
case Intrinsic::vp_reduce_umax:
1219
+ return getMinMaxReductionCost (Intrinsic::umax,
1220
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1221
+ ICA.getFlags (), CostKind);
1220
1222
case Intrinsic::vp_reduce_umin:
1223
+ return getMinMaxReductionCost (Intrinsic::umin,
1224
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1225
+ ICA.getFlags (), CostKind);
1221
1226
case Intrinsic::vp_reduce_fmax:
1227
+ return getMinMaxReductionCost (Intrinsic::maxnum,
1228
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1229
+ ICA.getFlags (), CostKind);
1222
1230
case Intrinsic::vp_reduce_fmaximum:
1231
+ return getMinMaxReductionCost (Intrinsic::maximum,
1232
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1233
+ ICA.getFlags (), CostKind);
1223
1234
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
- IID = Intrinsic::maxnum;
1241
- break ;
1242
- case Intrinsic::vp_reduce_fmaximum:
1243
- IID = Intrinsic::maximum;
1244
- break ;
1245
- case Intrinsic::vp_reduce_fmin:
1246
- IID = Intrinsic::minnum;
1247
- break ;
1248
- case Intrinsic::vp_reduce_fminimum:
1249
- IID = Intrinsic::minimum;
1250
- break ;
1251
- }
1252
- return getMinMaxReductionCost (IID, cast<VectorType>(ICA.getArgTypes ()[1 ]),
1235
+ return getMinMaxReductionCost (Intrinsic::minnum,
1236
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1237
+ ICA.getFlags (), CostKind);
1238
+ case Intrinsic::vp_reduce_fminimum:
1239
+ return getMinMaxReductionCost (Intrinsic::minimum,
1240
+ cast<VectorType>(ICA.getArgTypes ()[1 ]),
1253
1241
ICA.getFlags (), CostKind);
1254
- }
1255
1242
}
1256
1243
1257
1244
if (ST->hasVInstructions () && RetTy->isVectorTy ()) {
0 commit comments