[LVI] NFC. On the fast dest path use inverse predicate instead of inverse range result
authorArtur Pilipenko <apilipenko@azulsystems.com>
Mon, 8 Aug 2016 14:33:11 +0000 (14:33 +0000)
committerArtur Pilipenko <apilipenko@azulsystems.com>
Mon, 8 Aug 2016 14:33:11 +0000 (14:33 +0000)
Gathering constantins from a condition on the false path ask makeAllowedICmpRegion about inverse predicate instead of inversing the resulting range.

This change was separated from the review "[LVI] Make LVI smarter about comparisons with non-constants" (https://reviews.llvm.org/D23205#inline-198361)

llvm-svn: 278009

llvm/lib/Analysis/LazyValueInfo.cpp

index c65c81d..6b8bb12 100644 (file)
@@ -1208,15 +1208,16 @@ bool getValueFromCondition(Value *Val, Value *Cond, LVILatticeVal &Result,
     if (CI && (LHS == Val || Offset)) {
       // Calculate the range of values that are allowed by the comparison
       ConstantRange CmpRange(CI->getValue());
+
+      // If we're interested in the false dest, invert the condition
+      CmpInst::Predicate Pred =
+          isTrueDest ? Predicate : CmpInst::getInversePredicate(Predicate);
       ConstantRange TrueValues =
-          ConstantRange::makeAllowedICmpRegion(Predicate, CmpRange);
+          ConstantRange::makeAllowedICmpRegion(Pred, CmpRange);
 
       if (Offset) // Apply the offset from above.
         TrueValues = TrueValues.subtract(Offset->getValue());
 
-      // If we're interested in the false dest, invert the condition.
-      if (!isTrueDest) TrueValues = TrueValues.inverse();
-
       Result = LVILatticeVal::getRange(std::move(TrueValues));
       return true;
     }