[PATCH] D88087: [SCEV] Limited support for unsigned preds in isImpliedViaOperations

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 12:46:32 PDT 2020


lebedev.ri requested changes to this revision.
lebedev.ri added inline comments.


================
Comment at: llvm/lib/Analysis/ScalarEvolution.cpp:10158
+      const SCEV *MinusOne = getNegativeSCEV(getOne(LHS->getType()));
+      if (isImpliedCondOperands(ICmpInst::ICMP_SGT, LHS, MinusOne, FoundLHS,
+                                FoundRHS) &&
----------------
reames wrote:
> mkazantsev wrote:
> > mkazantsev wrote:
> > > reames wrote:
> > > > I'm confused by this check, it seems overly complicated given the comment?  Why is this simply not:
> > > > if (isKnownNonNegative(LHS) && isKnownNonNegative(RHS) &&
> > > >     isKnownNonNegative(FoundLHS) && isKnownNonNegative(FoundRHS)) {
> > > >    Pred = ICmpInst::getSignedPredicate(Pred);
> > > > }
> > > Because non-negativity of LHS and RHS is not known. 
> > We need an extra fact `SignedPred FoundLHS FoundRHS` to prove it. And we only have this fact if we know `Pred FoundLHS FoundRHS && isKnownNonNegative(FoundLHS) && isKnownNonNegative(FoundRHS)`.
> If FoundLHS and FoundRHS are both non-negative, then all unsigned predicates are equivalent to their signed variants.  There's no separate fact needed for that.  Same for LHS and RHS.
> 
> Max, it may help if we talked offline here.  I can't tell if you're saying my argument is wrong, or that the example your trying to optimize doesn't have sufficient information to establish the non-negative facts.  Please either talk to me offline, or be very specific in your next response.
> If FoundLHS and FoundRHS are both non-negative, then all unsigned predicates are equivalent to their signed variants. There's no separate fact needed for that. Same for LHS and RHS.

I agree. The actual rules are: (for any signed/unsigned pred, they just have to be identical)
https://rise4fun.com/Alive/P9Il


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88087/new/

https://reviews.llvm.org/D88087



More information about the llvm-commits mailing list