[llvm] r372491 - [InstSimplify] simplifyUnsignedRangeCheck(): X >= Y && Y == 0 --> Y == 0
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 21 15:27:39 PDT 2019
Author: lebedevri
Date: Sat Sep 21 15:27:39 2019
New Revision: 372491
URL: http://llvm.org/viewvc/llvm-project?rev=372491&view=rev
Log:
[InstSimplify] simplifyUnsignedRangeCheck(): X >= Y && Y == 0 --> Y == 0
https://rise4fun.com/Alive/v9Y4
Modified:
llvm/trunk/lib/Analysis/InstructionSimplify.cpp
llvm/trunk/test/Transforms/InstSimplify/unsigned-range-checks.ll
Modified: llvm/trunk/lib/Analysis/InstructionSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InstructionSimplify.cpp?rev=372491&r1=372490&r2=372491&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InstructionSimplify.cpp (original)
+++ llvm/trunk/lib/Analysis/InstructionSimplify.cpp Sat Sep 21 15:27:39 2019
@@ -1443,11 +1443,10 @@ static Value *simplifyUnsignedRangeCheck
isKnownNonZero(X, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT))
return IsAnd ? UnsignedICmp : ZeroICmp;
- // X >= Y && Y == 0 --> Y == 0 FIXME
+ // X >= Y && Y == 0 --> Y == 0
// X >= Y || Y == 0 --> X >= Y
- if (UnsignedPred == ICmpInst::ICMP_UGE && EqPred == ICmpInst::ICMP_EQ &&
- !IsAnd)
- return UnsignedICmp;
+ if (UnsignedPred == ICmpInst::ICMP_UGE && EqPred == ICmpInst::ICMP_EQ)
+ return IsAnd ? ZeroICmp : UnsignedICmp;
// X > Y && Y == 0 --> Y == 0 iff X != 0
// X > Y || Y == 0 --> X > Y iff X != 0
Modified: llvm/trunk/test/Transforms/InstSimplify/unsigned-range-checks.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstSimplify/unsigned-range-checks.ll?rev=372491&r1=372490&r2=372491&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstSimplify/unsigned-range-checks.ll (original)
+++ llvm/trunk/test/Transforms/InstSimplify/unsigned-range-checks.ll Sat Sep 21 15:27:39 2019
@@ -84,9 +84,7 @@ define i1 @t7(i8 %x, i8 %y) {
define i1 @t8(i8 %x, i8 %y) {
; CHECK-LABEL: @t8(
; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp eq i8 [[Y:%.*]], 0
-; CHECK-NEXT: [[NO_UNDERFLOW:%.*]] = icmp ule i8 [[Y]], [[X:%.*]]
-; CHECK-NEXT: [[R:%.*]] = and i1 [[NOT_NULL]], [[NO_UNDERFLOW]]
-; CHECK-NEXT: ret i1 [[R]]
+; CHECK-NEXT: ret i1 [[NOT_NULL]]
;
%not_null = icmp eq i8 %y, 0
%no_underflow = icmp ule i8 %y, %x
More information about the llvm-commits
mailing list