@@ -1212,37 +1212,25 @@ Value *llvm::createSimpleTargetReduction(IRBuilderBase &Builder, Value *Src,
12121212 auto *SrcVecEltTy = cast<VectorType>(Src->getType ())->getElementType ();
12131213 switch (RdxKind) {
12141214 case RecurKind::Add:
1215- return Builder.CreateAddReduce (Src);
12161215 case RecurKind::Mul:
1217- return Builder.CreateMulReduce (Src);
12181216 case RecurKind::And:
1219- return Builder.CreateAndReduce (Src);
12201217 case RecurKind::Or:
1221- return Builder.CreateOrReduce (Src);
12221218 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);
12301219 case RecurKind::SMax:
1231- return Builder.CreateIntMaxReduce (Src, true );
12321220 case RecurKind::SMin:
1233- return Builder.CreateIntMinReduce (Src, true );
12341221 case RecurKind::UMax:
1235- return Builder.CreateIntMaxReduce (Src, false );
12361222 case RecurKind::UMin:
1237- return Builder.CreateIntMinReduce (Src, false );
12381223 case RecurKind::FMax:
1239- return Builder.CreateFPMaxReduce (Src);
12401224 case RecurKind::FMin:
1241- return Builder.CreateFPMinReduce (Src);
12421225 case RecurKind::FMinimum:
1243- return Builder.CreateFPMinimumReduce (Src);
12441226 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);
12461234 default :
12471235 llvm_unreachable (" Unhandled opcode" );
12481236 }
0 commit comments