[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