From: Owen Anderson Date: Wed, 5 Jan 2011 21:37:18 +0000 (+0000) Subject: When computing the value on an edge, in certain cases LVI would fail to compute the... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=be41901d5a8b48ef6587a9f4c688376033e4a590;p=oota-llvm.git When computing the value on an edge, in certain cases LVI would fail to compute the value range in the predecessor block, leading to an incorrect conclusion for the edge value. Found by inspection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122908 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/LazyValueInfo.cpp b/lib/Analysis/LazyValueInfo.cpp index 38355edb83d..17348cd028e 100644 --- a/lib/Analysis/LazyValueInfo.cpp +++ b/lib/Analysis/LazyValueInfo.cpp @@ -817,6 +817,11 @@ bool LazyValueInfoCache::getEdgeValue(Value *Val, BasicBlock *BBFrom, if (!isTrueDest) TrueValues = TrueValues.inverse(); // Figure out the possible values of the query BEFORE this branch. + if (!hasBlockValue(Val, BBFrom)) { + block_value_stack.push(std::make_pair(BBFrom, Val)); + return false; + } + LVILatticeVal InBlock = getBlockValue(Val, BBFrom); if (!InBlock.isConstantRange()) { Result = LVILatticeVal::getRange(TrueValues);