[llvm] 376a07d - [ValueTracking] Handle trunc to i1 condition in isKnownNonZeroFromAssume (#230919)

via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 11 03:34:00 PDT 2026


Author: Andreas Jonson
Date: 2026-10-11T12:33:54+02:00
New Revision: 376a07d4189ae4a911763d4de5d7d4d6e74ddfa8

URL: https://github.com/llvm/llvm-project/commit/376a07d4189ae4a911763d4de5d7d4d6e74ddfa8
DIFF: https://github.com/llvm/llvm-project/commit/376a07d4189ae4a911763d4de5d7d4d6e74ddfa8.diff

LOG: [ValueTracking] Handle trunc to i1 condition in isKnownNonZeroFromAssume (#230919)

Proof: https://alive2.llvm.org/ce/z/YFN6qu

Added: 
    

Modified: 
    llvm/lib/Analysis/ValueTracking.cpp
    llvm/test/Transforms/InstSimplify/assume-non-zero.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 7bbb2eb8e8313..f75ec6e622f0a 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -890,6 +890,10 @@ static bool isKnownNonZeroFromAssume(const Value *V, const SimplifyQuery &Q) {
     // We're running this loop for once for each value queried resulting in a
     // runtime of ~O(#assumes * #values).
 
+    if (match(I->getArgOperand(0), m_Trunc(m_Specific(V))) &&
+        isValidAssumeForContext(I, Q))
+      return true;
+
     Value *RHS;
     CmpPredicate Pred;
     auto m_V = m_CombineOr(m_Specific(V), m_PtrToInt(m_Specific(V)));

diff  --git a/llvm/test/Transforms/InstSimplify/assume-non-zero.ll b/llvm/test/Transforms/InstSimplify/assume-non-zero.ll
index 22bdf374487da..331c9504f2da6 100644
--- a/llvm/test/Transforms/InstSimplify/assume-non-zero.ll
+++ b/llvm/test/Transforms/InstSimplify/assume-non-zero.ll
@@ -236,8 +236,7 @@ define i1 @nonnull_trunc_true(i8 %x) {
 ; CHECK-LABEL: @nonnull_trunc_true(
 ; CHECK-NEXT:    [[A:%.*]] = trunc i8 [[X:%.*]] to i1
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[A]])
-; CHECK-NEXT:    [[Q:%.*]] = icmp ne i8 [[X]], 0
-; CHECK-NEXT:    ret i1 [[Q]]
+; CHECK-NEXT:    ret i1 true
 ;
   %a = trunc i8 %x to i1
   call void @llvm.assume(i1 %a)


        


More information about the llvm-commits mailing list