@@ -1212,37 +1212,25 @@ Value *llvm::createSimpleTargetReduction(IRBuilderBase &Builder, Value *Src,
1212
1212
auto *SrcVecEltTy = cast<VectorType>(Src->getType ())->getElementType ();
1213
1213
switch (RdxKind) {
1214
1214
case RecurKind::Add:
1215
- return Builder.CreateAddReduce (Src);
1216
1215
case RecurKind::Mul:
1217
- return Builder.CreateMulReduce (Src);
1218
1216
case RecurKind::And:
1219
- return Builder.CreateAndReduce (Src);
1220
1217
case RecurKind::Or:
1221
- return Builder.CreateOrReduce (Src);
1222
1218
case RecurKind::Xor:
1223
- return Builder.CreateXorReduce (Src);
1224
- case RecurKind::FMulAdd:
1225
- case RecurKind::FAdd:
1226
- return Builder.CreateFAddReduce (ConstantFP::getNegativeZero (SrcVecEltTy),
1227
- Src);
1228
- case RecurKind::FMul:
1229
- return Builder.CreateFMulReduce (ConstantFP::get (SrcVecEltTy, 1.0 ), Src);
1230
1219
case RecurKind::SMax:
1231
- return Builder.CreateIntMaxReduce (Src, true );
1232
1220
case RecurKind::SMin:
1233
- return Builder.CreateIntMinReduce (Src, true );
1234
1221
case RecurKind::UMax:
1235
- return Builder.CreateIntMaxReduce (Src, false );
1236
1222
case RecurKind::UMin:
1237
- return Builder.CreateIntMinReduce (Src, false );
1238
1223
case RecurKind::FMax:
1239
- return Builder.CreateFPMaxReduce (Src);
1240
1224
case RecurKind::FMin:
1241
- return Builder.CreateFPMinReduce (Src);
1242
1225
case RecurKind::FMinimum:
1243
- return Builder.CreateFPMinimumReduce (Src);
1244
1226
case RecurKind::FMaximum:
1245
- return Builder.CreateFPMaximumReduce (Src);
1227
+ return Builder.CreateUnaryIntrinsic (getReductionIntrinsicID (RdxKind), Src);
1228
+ case RecurKind::FMulAdd:
1229
+ case RecurKind::FAdd:
1230
+ return Builder.CreateFAddReduce (ConstantFP::getNegativeZero (SrcVecEltTy),
1231
+ Src);
1232
+ case RecurKind::FMul:
1233
+ return Builder.CreateFMulReduce (ConstantFP::get (SrcVecEltTy, 1.0 ), Src);
1246
1234
default :
1247
1235
llvm_unreachable (" Unhandled opcode" );
1248
1236
}
0 commit comments