forked from OSchip/llvm-project
[InstSimplify] simplifyUnsignedRangeCheck(): X >= Y && Y == 0 --> Y == 0
https://rise4fun.com/Alive/v9Y4 llvm-svn: 372491
This commit is contained in:
parent
e94f156f77
commit
baf809811b
|
@ -1443,11 +1443,10 @@ static Value *simplifyUnsignedRangeCheck(ICmpInst *ZeroICmp,
|
|||
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue