aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LoopUtils.cpp
diff options
context:
space:
mode:
authorPhilip Reames <preames@rivosinc.com>2024-08-30 09:43:02 -0700
committerPhilip Reames <listmail@philipreames.com>2024-08-30 09:46:59 -0700
commit5b3ba438dfa7815bb0f3be07a300866085a431b9 (patch)
treefe8a5115d3ec720a0d8b0d6faf9e8864a6a92b16 /llvm/lib/Transforms/Utils/LoopUtils.cpp
parentc25293c6dd9a71b4655d1d6497ab8576c15e446e (diff)
downloadllvm-5b3ba438dfa7815bb0f3be07a300866085a431b9.zip
llvm-5b3ba438dfa7815bb0f3be07a300866085a431b9.tar.gz
llvm-5b3ba438dfa7815bb0f3be07a300866085a431b9.tar.bz2
Restructure createSimpleTargetReduction to match VP path [NFC]
Reduces code significantly, but more importantly makes it obvious that this variant matches the VP variant just below.
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");
}