[PATCH] D87034: [KnownBits] Implement accurate unsigned and signed max and min
Jay Foad via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 2 12:16:25 PDT 2020
foad added inline comments.
================
Comment at: llvm/lib/Support/KnownBits.cpp:113
+ LHSgeRHS.setLowBits(BitWidth - LHSgtRHS.countLeadingZeros());
+ if (LHSgeRHS.isAllOnesValue()) {
+ Res.Zero |= LHS.Zero;
----------------
nikic wrote:
> nikic wrote:
> > How does this differ from `LHS.getMinValue().uge(RHS.getMaxValue())`?
> Generally I think this code should be structured something like this:
>
> ```
> if (LHS.getMinValue().uge(RHS.getMaxValue()))
> return LHS;
> if (RHS.getMinValue().uge(LHS.getMaxValue()))
> return RHS;
>
> // If the result of the umax is LHS then it must be greater than or equal to
> // the minimum possible value of RHS. Likewise for RHS. Any known bits that
> // are common to these two values are also known in the result.
> KnownBits L = LHS.makeGE(RHS.getMinValue());
> KnownBits R = RHS.makeGE(LHS.getMinValue());
> return KnownBits(L.Zero & R.Zero, L.One & R.One);
> ```
Thanks! Can you simplify `makeGE` for me too? :)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87034/new/
https://reviews.llvm.org/D87034
More information about the llvm-commits
mailing list