[llvm] b9b71c2 - [LVI] Compute range for xor
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue May 17 01:19:29 PDT 2022
Author: Nikita Popov
Date: 2022-05-17T10:18:38+02:00
New Revision: b9b71c2b872dbb4e0a06187d7f4b48ece8a57495
URL: https://github.com/llvm/llvm-project/commit/b9b71c2b872dbb4e0a06187d7f4b48ece8a57495
DIFF: https://github.com/llvm/llvm-project/commit/b9b71c2b872dbb4e0a06187d7f4b48ece8a57495.diff
LOG: [LVI] Compute range for xor
We do have a non-trivial implementation for binaryXor() now.
Added:
Modified:
llvm/lib/Analysis/LazyValueInfo.cpp
llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
index d1593333763a9..5fa5a305df9bb 100644
--- a/llvm/lib/Analysis/LazyValueInfo.cpp
+++ b/llvm/lib/Analysis/LazyValueInfo.cpp
@@ -955,13 +955,6 @@ Optional<ValueLatticeElement> LazyValueInfoImpl::solveBlockValueBinaryOp(
BinaryOperator *BO, BasicBlock *BB) {
assert(BO->getOperand(0)->getType()->isSized() &&
"all operands to binary operators are sized");
- if (BO->getOpcode() == Instruction::Xor) {
- // Xor is the only operation not supported by ConstantRange::binaryOp().
- LLVM_DEBUG(dbgs() << " compute BB '" << BB->getName()
- << "' - overdefined (unknown binary operator).\n");
- return ValueLatticeElement::getOverdefined();
- }
-
if (auto *OBO = dyn_cast<OverflowingBinaryOperator>(BO)) {
unsigned NoWrapKind = 0;
if (OBO->hasNoUnsignedWrap())
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
index d7730fc29ecc2..7a08f4d2bd270 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
@@ -1832,12 +1832,10 @@ define void @xor(i8 %a, i1* %p) {
; CHECK-LABEL: @xor(
; CHECK-NEXT: [[A_MASK:%.*]] = and i8 [[A:%.*]], 15
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[A_MASK]], -86
-; CHECK-NEXT: [[C1:%.*]] = icmp uge i8 [[XOR]], -96
-; CHECK-NEXT: store i1 [[C1]], i1* [[P:%.*]], align 1
+; CHECK-NEXT: store i1 true, i1* [[P:%.*]], align 1
; CHECK-NEXT: [[C2:%.*]] = icmp ugt i8 [[XOR]], -96
; CHECK-NEXT: store i1 [[C2]], i1* [[P]], align 1
-; CHECK-NEXT: [[C3:%.*]] = icmp ule i8 [[XOR]], -81
-; CHECK-NEXT: store i1 [[C3]], i1* [[P]], align 1
+; CHECK-NEXT: store i1 true, i1* [[P]], align 1
; CHECK-NEXT: [[C4:%.*]] = icmp ult i8 [[XOR]], -81
; CHECK-NEXT: store i1 [[C4]], i1* [[P]], align 1
; CHECK-NEXT: ret void
More information about the llvm-commits
mailing list