From fe11e980a91ccec671d537aa1c7fd5ec29fca706 Mon Sep 17 00:00:00 2001 From: Artur Pilipenko Date: Mon, 8 Aug 2016 14:33:11 +0000 Subject: [PATCH] [LVI] NFC. On the fast dest path use inverse predicate instead of inverse range result 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) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278009 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/LazyValueInfo.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/Analysis/LazyValueInfo.cpp b/lib/Analysis/LazyValueInfo.cpp index c65c81d3740..6b8bb12102c 100644 --- a/lib/Analysis/LazyValueInfo.cpp +++ b/lib/Analysis/LazyValueInfo.cpp @@ -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; }