[llvm] [ValueTracking] X ^ Y != 0 if X != Y (PR #146975)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 4 06:33:35 PDT 2025


https://github.com/AZero13 updated https://github.com/llvm/llvm-project/pull/146975

>From 2636776decbeec13622c811cc86c8465ac9f04c1 Mon Sep 17 00:00:00 2001
From: Rose <gfunni234 at gmail.com>
Date: Thu, 3 Jul 2025 19:55:09 -0400
Subject: [PATCH] [ValueTracking] X ^ Y != 0 if X != Y.

It goes without saying that for x ^ y to be 0, x and y must be equal.
---
 llvm/lib/Analysis/ValueTracking.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 2b7b1ee273992..c31a1c42e9d42 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3043,7 +3043,9 @@ static bool isKnownNonZeroFromOperator(const Operator *I,
     // (X ^ (X != 0)) is non zero
     if (matchOpWithOpEqZero(I->getOperand(0), I->getOperand(1)))
       return true;
-    break;
+    // X ^ Y != 0 if X != Y.
+    return isKnownNonEqual(I->getOperand(0), I->getOperand(1), DemandedElts, Q,
+                           Depth);
   case Instruction::Or:
     // (X | (X != 0)) is non zero
     if (matchOpWithOpEqZero(I->getOperand(0), I->getOperand(1)))



More information about the llvm-commits mailing list