mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +00:00
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
This commit is contained in:
parent
bfb7dd9e9e
commit
be41901d5a
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user