[llvm] [LoopUnroll] Make the list of supported recurrence kinds inclusive. (PR #210957)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 23 03:03:09 PDT 2026
================
@@ -1719,10 +1719,17 @@ llvm::canParallelizeReductionWhenUnrolling(PHINode &Phi, Loop *L,
if (RdxDesc.hasUsesOutsideReductionChain())
return std::nullopt;
RecurKind RK = RdxDesc.getRecurrenceKind();
- // Skip unsupported reductions.
- // TODO: Handle any-of and find-last reductions.
- if (RecurrenceDescriptor::isAnyOfRecurrenceKind(RK) ||
- RecurrenceDescriptor::isFindRecurrenceKind(RK))
+ // Skip unsupported reductions, including sub, any-of and find-last.
+ // TODO: Handle sub, any-of and find-last reductions.
+ static const auto ValidRKs = {
+ RecurKind::Add, RecurKind::Mul, RecurKind::Or,
+ RecurKind::And, RecurKind::Xor, RecurKind::SMin,
+ RecurKind::SMax, RecurKind::UMin, RecurKind::UMax,
+ RecurKind::FAdd, RecurKind::FMul, RecurKind::FMin,
+ RecurKind::FMax, RecurKind::FMinNum, RecurKind::FMaxNum,
+ RecurKind::FMinimum, RecurKind::FMaximum, RecurKind::FMinimumNum,
+ RecurKind::FMaximumNum, RecurKind::FMulAdd};
+ if (!any_of(ValidRKs, equal_to(RK)))
----------------
fhahn wrote:
Having the comment just before the list of supported kinds is a bit confusing I think, better move to the actual check. Also can we use the concrete type instead of `auto`?
```suggestion
static const auto ValidRKs = {
RecurKind::Add, RecurKind::Mul, RecurKind::Or,
RecurKind::And, RecurKind::Xor, RecurKind::SMin,
RecurKind::SMax, RecurKind::UMin, RecurKind::UMax,
RecurKind::FAdd, RecurKind::FMul, RecurKind::FMin,
RecurKind::FMax, RecurKind::FMinNum, RecurKind::FMaxNum,
RecurKind::FMinimum, RecurKind::FMaximum, RecurKind::FMinimumNum,
RecurKind::FMaximumNum, RecurKind::FMulAdd};
// Skip unsupported reductions, including sub, any-of and find-last.
// TODO: Handle sub, any-of and find-last reductions.
if (!any_of(ValidRKs, equal_to(RK)))
```
https://github.com/llvm/llvm-project/pull/210957
More information about the llvm-commits
mailing list