diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index f57d95e..2fff9521 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -958,6 +958,10 @@ constexpr Intrinsic::ID llvm::getReductionIntrinsicID(RecurKind RK) { return Intrinsic::vector_reduce_fmaximum; case RecurKind::FMinimum: return Intrinsic::vector_reduce_fminimum; + case RecurKind::FMaximumNum: + return Intrinsic::vector_reduce_fmax; + case RecurKind::FMinimumNum: + return Intrinsic::vector_reduce_fmin; } } @@ -1053,6 +1057,10 @@ Intrinsic::ID llvm::getMinMaxReductionIntrinsicOp(RecurKind RK) { return Intrinsic::minimum; case RecurKind::FMaximum: return Intrinsic::maximum; + case RecurKind::FMinimumNum: + return Intrinsic::minimumnum; + case RecurKind::FMaximumNum: + return Intrinsic::maximumnum; } } @@ -1101,7 +1109,8 @@ Value *llvm::createMinMaxOp(IRBuilderBase &Builder, RecurKind RK, Value *Left, Value *Right) { Type *Ty = Left->getType(); if (Ty->isIntOrIntVectorTy() || - (RK == RecurKind::FMinimum || RK == RecurKind::FMaximum)) { + (RK == RecurKind::FMinimum || RK == RecurKind::FMaximum || + RK == RecurKind::FMinimumNum || RK == RecurKind::FMaximumNum)) { // TODO: Add float minnum/maxnum support when FMF nnan is set. Intrinsic::ID Id = getMinMaxReductionIntrinsicOp(RK); return Builder.CreateIntrinsic(Ty, Id, {Left, Right}, nullptr, @@ -1320,6 +1329,8 @@ Value *llvm::createSimpleReduction(IRBuilderBase &Builder, Value *Src, case RecurKind::FMin: case RecurKind::FMinimum: case RecurKind::FMaximum: + case RecurKind::FMinimumNum: + case RecurKind::FMaximumNum: return Builder.CreateUnaryIntrinsic(getReductionIntrinsicID(RdxKind), Src); case RecurKind::FMulAdd: case RecurKind::FAdd: |