diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-09-21 22:27:39 +0000 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-09-21 22:27:39 +0000 |
commit | baf809811b066eede7c1093b5c9941e428d6bd5f (patch) | |
tree | f79ab61d89d967f6994ce632e437c68dc9fba0f5 /llvm/lib/Analysis | |
parent | e94f156f778cdc1d20cd836cfc5d6df0b77761e1 (diff) | |
download | bcm5719-llvm-baf809811b066eede7c1093b5c9941e428d6bd5f.tar.gz bcm5719-llvm-baf809811b066eede7c1093b5c9941e428d6bd5f.zip |
[InstSimplify] simplifyUnsignedRangeCheck(): X >= Y && Y == 0 --> Y == 0
https://rise4fun.com/Alive/v9Y4
llvm-svn: 372491
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 5c8bf8f83cf..67b06ea40bc 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -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 |