[llvm] [ValueTracking] Handle `min/max` when breaking recursive PHI's (PR #123988)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 22 11:17:55 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: None (goldsteinn)
<details>
<summary>Changes</summary>
Follows the same principal as `select`.
---
Full diff: https://github.com/llvm/llvm-project/pull/123988.diff
2 Files Affected:
- (modified) llvm/lib/Analysis/ValueTracking.cpp (+2-2)
- (modified) llvm/test/Transforms/InstCombine/known-phi-recurse.ll (+1-4)
``````````diff
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 38f88850be0f18..0519836496c382 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -601,9 +601,9 @@ static void breakSelfRecursivePHI(const Use *U, const PHINode *PHI,
Value *V;
// If the Use is a select of this phi, compute analysis on other arm to break
// recursion.
- // TODO: Min/Max
if (match(ValOut, m_Select(m_Value(), m_Specific(PHI), m_Value(V))) ||
- match(ValOut, m_Select(m_Value(), m_Value(V), m_Specific(PHI))))
+ match(ValOut, m_Select(m_Value(), m_Value(V), m_Specific(PHI))) ||
+ match(ValOut, m_c_MaxOrMin(m_Value(V), m_Specific(PHI))))
ValOut = V;
// Same for select, if this phi is 2-operand phi, compute analysis on other
diff --git a/llvm/test/Transforms/InstCombine/known-phi-recurse.ll b/llvm/test/Transforms/InstCombine/known-phi-recurse.ll
index c05cca93b035c4..ac44e6c9df4122 100644
--- a/llvm/test/Transforms/InstCombine/known-phi-recurse.ll
+++ b/llvm/test/Transforms/InstCombine/known-phi-recurse.ll
@@ -261,14 +261,11 @@ define i8 @knownbits_umax_select_test() {
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
-; CHECK-NEXT: [[INDVAR:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[CONTAIN:%.*]], [[LOOP]] ]
; CHECK-NEXT: [[COND0:%.*]] = call i1 @cond()
-; CHECK-NEXT: [[CONTAIN]] = call i8 @llvm.umax.i8(i8 [[INDVAR]], i8 1)
; CHECK-NEXT: [[COND1:%.*]] = call i1 @cond()
; CHECK-NEXT: br i1 [[COND1]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
-; CHECK-NEXT: [[BOOL:%.*]] = and i8 [[CONTAIN]], 1
-; CHECK-NEXT: ret i8 [[BOOL]]
+; CHECK-NEXT: ret i8 1
;
entry:
br label %loop
``````````
</details>
https://github.com/llvm/llvm-project/pull/123988
More information about the llvm-commits
mailing list