[llvm] 4d45718 - [IVDescriptors] Add isFPMinMaxNumRecurrenceKind helper (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 8 03:40:53 PDT 2025
Author: Florian Hahn
Date: 2025-10-08T11:40:46+01:00
New Revision: 4d45718b478940cd11ac80dd64db8408bb21dbca
URL: https://github.com/llvm/llvm-project/commit/4d45718b478940cd11ac80dd64db8408bb21dbca
DIFF: https://github.com/llvm/llvm-project/commit/4d45718b478940cd11ac80dd64db8408bb21dbca.diff
LOG: [IVDescriptors] Add isFPMinMaxNumRecurrenceKind helper (NFC).
Add helper to check for FMinNum and FMaxNum recurrence kinds, as
suggested in https://github.com/llvm/llvm-project/pull/161735.
Added:
Modified:
llvm/include/llvm/Analysis/IVDescriptors.h
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/IVDescriptors.h b/llvm/include/llvm/Analysis/IVDescriptors.h
index f9e6da6d0846a..654a5f10cea96 100644
--- a/llvm/include/llvm/Analysis/IVDescriptors.h
+++ b/llvm/include/llvm/Analysis/IVDescriptors.h
@@ -251,12 +251,18 @@ class RecurrenceDescriptor {
Kind == RecurKind::SMin || Kind == RecurKind::SMax;
}
+ /// Returns true if the recurrence kind is a floating-point minnum/maxnum
+ /// kind.
+ static bool isFPMinMaxNumRecurrenceKind(RecurKind Kind) {
+ return Kind == RecurKind::FMinNum || Kind == RecurKind::FMaxNum;
+ }
+
/// Returns true if the recurrence kind is a floating-point min/max kind.
static bool isFPMinMaxRecurrenceKind(RecurKind Kind) {
return Kind == RecurKind::FMin || Kind == RecurKind::FMax ||
- Kind == RecurKind::FMinNum || Kind == RecurKind::FMaxNum ||
Kind == RecurKind::FMinimum || Kind == RecurKind::FMaximum ||
- Kind == RecurKind::FMinimumNum || Kind == RecurKind::FMaximumNum;
+ Kind == RecurKind::FMinimumNum || Kind == RecurKind::FMaximumNum ||
+ isFPMinMaxNumRecurrenceKind(Kind);
}
/// Returns true if the recurrence kind is any min/max kind.
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 0b7963b98e7a4..3f16b03055a98 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -4264,8 +4264,8 @@ bool LoopVectorizationPlanner::isCandidateForEpilogueVectorization(
if (any_of(OrigLoop->getHeader()->phis(), [&](PHINode &Phi) {
if (!Legal->isReductionVariable(&Phi))
return Legal->isFixedOrderRecurrence(&Phi);
- RecurKind RK = Legal->getRecurrenceDescriptor(&Phi).getRecurrenceKind();
- return RK == RecurKind::FMinNum || RK == RecurKind::FMaxNum;
+ return RecurrenceDescriptor::isFPMinMaxNumRecurrenceKind(
+ Legal->getRecurrenceDescriptor(&Phi).getRecurrenceKind());
}))
return false;
diff --git a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
index b36298fcad74b..81deba2932ef8 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
@@ -840,8 +840,8 @@ bool VPlanTransforms::handleMaxMinNumReductions(VPlan &Plan) {
// TODO: Support multiple MaxNum/MinNum reductions and other reductions.
if (RedPhiR)
return false;
- if (Cur->getRecurrenceKind() != RecurKind::FMaxNum &&
- Cur->getRecurrenceKind() != RecurKind::FMinNum) {
+ if (!RecurrenceDescriptor::isFPMinMaxNumRecurrenceKind(
+ Cur->getRecurrenceKind())) {
HasUnsupportedPhi = true;
continue;
}
@@ -861,10 +861,9 @@ bool VPlanTransforms::handleMaxMinNumReductions(VPlan &Plan) {
if (!MinMaxOp)
return false;
- RecurKind RedPhiRK = RedPhiR->getRecurrenceKind();
- assert((RedPhiRK == RecurKind::FMaxNum || RedPhiRK == RecurKind::FMinNum) &&
+ assert(RecurrenceDescriptor::isFPMinMaxNumRecurrenceKind(
+ RedPhiR->getRecurrenceKind()) &&
"unsupported reduction");
- (void)RedPhiRK;
/// Check if the vector loop of \p Plan can early exit and restart
/// execution of last vector iteration in the scalar loop. This requires all
More information about the llvm-commits
mailing list