[llvm] [Analysis][LV] Handle FMinNum/FMaxNum in RecurrenceDescriptor::getOpcode (PR #152794)

via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 8 13:57:04 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-analysis

Author: Uyiosa Iyekekpolor (uyoyo0)

<details>
<summary>Changes</summary>

Modify `RecurrenceDescriptor::getOpcode` to handle `RecurKind::FMinNum` and `RecurKind::FMaxNum` by returning `Instruction::FCmp`, matching `FMin/FMax`.

Without these cases, querying the opcode for minNum/maxNum reductions can hit `llvm_unreachable` in code that inspects the recurrence kind. Also added `IVDescriptorsTest.GetOpcodeForFMinMaxNum` (gtest) to verify the mapping.


---
Full diff: https://github.com/llvm/llvm-project/pull/152794.diff


2 Files Affected:

- (modified) llvm/lib/Analysis/IVDescriptors.cpp (+2) 
- (modified) llvm/unittests/Analysis/IVDescriptorsTest.cpp (+9) 


``````````diff
diff --git a/llvm/lib/Analysis/IVDescriptors.cpp b/llvm/lib/Analysis/IVDescriptors.cpp
index 8be5de3bf356f..efb6a5e97bc2b 100644
--- a/llvm/lib/Analysis/IVDescriptors.cpp
+++ b/llvm/lib/Analysis/IVDescriptors.cpp
@@ -1228,6 +1228,8 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) {
     return Instruction::ICmp;
   case RecurKind::FMax:
   case RecurKind::FMin:
+  case RecurKind::FMaxNum:
+  case RecurKind::FMinNum:
   case RecurKind::FMaximum:
   case RecurKind::FMinimum:
   case RecurKind::FMaximumNum:
diff --git a/llvm/unittests/Analysis/IVDescriptorsTest.cpp b/llvm/unittests/Analysis/IVDescriptorsTest.cpp
index 453800abf9cab..bc237296a36b1 100644
--- a/llvm/unittests/Analysis/IVDescriptorsTest.cpp
+++ b/llvm/unittests/Analysis/IVDescriptorsTest.cpp
@@ -259,3 +259,12 @@ for.end:
         EXPECT_EQ(Kind, RecurKind::FMax);
       });
 }
+
+TEST(IVDescriptorsTest, GetOpcodeForFMinMaxNum) {
+  using RK = RecurKind;
+  // Ensure the "num" variants map to the same opcode as the plain ones.
+  EXPECT_EQ(RecurrenceDescriptor::getOpcode(RK::FMinNum),
+    RecurrenceDescriptor::getOpcode(RK::FMin));
+  EXPECT_EQ(RecurrenceDescriptor::getOpcode(RK::FMinNum),
+    RecurrenceDescriptor::getOpcode(RK::FMin));
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/152794


More information about the llvm-commits mailing list