From b9b71c2b872dbb4e0a06187d7f4b48ece8a57495 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 17 May 2022 10:18:38 +0200 Subject: [PATCH] [LVI] Compute range for xor We do have a non-trivial implementation for binaryXor() now. --- llvm/lib/Analysis/LazyValueInfo.cpp | 7 ------- llvm/test/Transforms/CorrelatedValuePropagation/basic.ll | 6 ++---- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp index d159333..5fa5a30 100644 --- a/llvm/lib/Analysis/LazyValueInfo.cpp +++ b/llvm/lib/Analysis/LazyValueInfo.cpp @@ -955,13 +955,6 @@ Optional 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(BO)) { unsigned NoWrapKind = 0; if (OBO->hasNoUnsignedWrap()) diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll index d7730fc..7a08f4d 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 -- 2.7.4