aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LoopUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LoopUtils.cpp26
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");
}