diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index f1f2d52..a49d3b0 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -1212,37 +1212,25 @@ Value *llvm::createSimpleTargetReduction(IRBuilderBase &Builder, Value *Src, auto *SrcVecEltTy = cast<VectorType>(Src->getType())->getElementType(); switch (RdxKind) { case RecurKind::Add: - return Builder.CreateAddReduce(Src); case RecurKind::Mul: - return Builder.CreateMulReduce(Src); case RecurKind::And: - return Builder.CreateAndReduce(Src); case RecurKind::Or: - return Builder.CreateOrReduce(Src); case RecurKind::Xor: - return Builder.CreateXorReduce(Src); - case RecurKind::FMulAdd: - case RecurKind::FAdd: - return Builder.CreateFAddReduce(ConstantFP::getNegativeZero(SrcVecEltTy), - Src); - case RecurKind::FMul: - return Builder.CreateFMulReduce(ConstantFP::get(SrcVecEltTy, 1.0), Src); case RecurKind::SMax: - return Builder.CreateIntMaxReduce(Src, true); case RecurKind::SMin: - return Builder.CreateIntMinReduce(Src, true); case RecurKind::UMax: - return Builder.CreateIntMaxReduce(Src, false); case RecurKind::UMin: - return Builder.CreateIntMinReduce(Src, false); case RecurKind::FMax: - return Builder.CreateFPMaxReduce(Src); case RecurKind::FMin: - return Builder.CreateFPMinReduce(Src); case RecurKind::FMinimum: - return Builder.CreateFPMinimumReduce(Src); case RecurKind::FMaximum: - return Builder.CreateFPMaximumReduce(Src); + return Builder.CreateUnaryIntrinsic(getReductionIntrinsicID(RdxKind), Src); + case RecurKind::FMulAdd: + case RecurKind::FAdd: + return Builder.CreateFAddReduce(ConstantFP::getNegativeZero(SrcVecEltTy), + Src); + case RecurKind::FMul: + return Builder.CreateFMulReduce(ConstantFP::get(SrcVecEltTy, 1.0), Src); default: llvm_unreachable("Unhandled opcode"); } |