aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/LazyValueInfo.cpp
AgeCommit message (Collapse)Author
2011-01-15Teach LazyValueInfo that allocas aren't NULL. Over all of llvm-test, this savesNick Lewycky
half a million non-local queries, each of which would otherwise have triggered a linear scan over a basic block. Also fix a fixme for memory intrinsics which dereference pointers. With this, we prove that a pointer is non-null because it was dereferenced by an intrinsic 112 times in llvm-test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123533 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05Reorder, rename, and document some members to make this easier to follow.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122929 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05When computing the value on an edge, in certain cases LVI would fail to ↵Owen Anderson
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
2011-01-05Re-convert several of LazyValueInfo's internal maps to Dense{Map|Set}, and ↵Owen Anderson
fix the issue in hasBlockValue() that was causing iterator invalidations. Many thanks to Dimitry Andric for tracking down those invalidations! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122906 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-20Speculatively revert the use of DenseMap in LazyValueInfo, which may be ↵Owen Anderson
causing Linux self-host failures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122291 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-20Attempt to appease the DragonEgg buildbots.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122288 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-20Convert one of LVI's primary maps to a DenseMap, now that we know are more ↵Owen Anderson
assured of iterator stability. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122273 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-20More LVI cleanups, including trying to simplify the process of maintaining ↵Owen Anderson
the OverDefinedCache. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122256 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-20Reuse the reference into the LVI cache throughout the solver subsystem. ↵Owen Anderson
This is much easier to verify as being safe thanks its recent de-recursivization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122254 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-18Make LazyValueInfo non-recursive.Nick Lewycky
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122120 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-15Move Value::getUnderlyingObject to be a standaloneDan Gohman
function so that it can live in Analysis instead of VMCore. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121885 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-15Clean up some of LVI:Nick Lewycky
* mergeIn now uses constant folding for constants that are provably not-equal. * sink some sanity checks from the get*() methods into the mark*() methods, to ensure that we never have a constant/notconstant ConstantInt * some textual cleanups, whitespace changes, removing "else" after return, that sort of thing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121877 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-09Take the first step towards making LVI non-recursive: get rid of the ↵Owen Anderson
LVIQuery abstraction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121357 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-07Now with fewer extraneous semicolons!Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115996 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-16It is possible, under specific circumstances involving ptrtoint ↵Owen Anderson
ConstantExpr's, for LVI to end up trying to merge a Constant into a ConstantRange. Handle this conservatively for now, rather than asserting. The testcase is more complex that I would like, but the manifestation of the problem is sensitive to iteration orders and the state of the LVI cache, and I have not been able to reproduce it with manually constructed or simplified cases. Fixes PR8162. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114103 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-07Clean up some of the PassRegistry implementation, and pImpl-ize it to reduce ↵Owen Anderson
#include clutter and exposing internal details. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113252 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-07Add completely hokey binary-and and binary-or operations to ConstantRange andNick Lewycky
teach LazyValueInfo to use them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113196 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-04zap dead code.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113073 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-03Add support for simplifying a load from a computed value to a load from a ↵Owen Anderson
global when it is provable that they're equivalent. This fixes PR4855. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112994 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-02Remove incorrect and poorly tested code for trying to reason about values on ↵Owen Anderson
default edges of switches. Just return the conservatively correct answer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112876 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-02Fix a bug in LazyValueInfo that CorrelatedValuePropagation exposed: In the ↵Owen Anderson
LVI lattice, undef and the full set ConstantRange should not be treated as equivalent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112843 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30It is possible to try to merge a not-constant with a constantrage, when ↵Owen Anderson
dealing with ptrtoint ConstantExpr's. Unfortunately, the only testcase I have for this is huge and doesn't reduce well because the error is sensitive to iteration-order issues, since the problem only occurs when merging values in a particular order. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112489 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27Improve the precision of getConstant().Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112323 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27Use LVI to eliminate conditional branches where we've tested a related ↵Owen Anderson
condition previously. Update tests for this change. This fixes PR5652. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112270 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-25In the default address space, any GEP off of null results in a trap value if ↵Owen Anderson
you try to load it. Thus, any load in the default address space that completes implies that the base value that it GEP'd from was not null. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112015 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24NULL loads are only invalid in the default address space.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111972 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24Add support for inferring values for the default cases of switches.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111971 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24Add support for inferring that a load from a pointer implies that it is not ↵Owen Anderson
null. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111959 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24Don't assume that all constants with integer types are ConstantInts.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111906 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18Use ConstantRange to propagate information through value definitions.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111425 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18Inform LazyValueInfo whenever a block is deleted, to avoid dangling pointer ↵Owen Anderson
issues. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111382 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-16Fix another iterator invalidation that caused a *really* nasty ↵Owen Anderson
miscompilation in 403.gcc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111210 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11Fix a subtle use-after-free issue.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110863 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11Improve indentation.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110778 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10Now that we're using ConstantRange to represent potential values, make use ↵Owen Anderson
of that represenation to create constraints from comparisons other than eq/neq. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110742 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10Switch over to using ConstantRange to track integral values.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110714 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-09Add ConstantRange information to the debugging output.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110598 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-05Add the beginnings of infrastructure for range tracking.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110388 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-05Split the tag and value members of LVILatticeVal in preparation for ↵Owen Anderson
expanding the lattice to something that won't fit in two bits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110383 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-30Add an initial implementation of PHI translation for LazyValueInfo. This ↵Owen Anderson
involves rolling back some of my earlier data structure improvements until I can ensure that there are no iterator invalidation problems. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109935 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-30Revert my last two patches to LVI, which recent changes have exposed a ↵Owen Anderson
miscompilation in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109889 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-28Pass the queried value by argument rather than in a member, in preparation ↵Owen Anderson
for supporting PHI translation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109701 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-28Get rid of LVIQuery as a distinct data structure, so that we don't have to ↵Owen Anderson
initialize a new set of maps on every query. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109679 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-27Rearrange several datastructures in LazyValueInfo to improve compile time.Owen Anderson
This is still not perfect, but better than it was before. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109563 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-26Add an initial implementation of LazyValueInfo updating for JumpThreading. ↵Owen Anderson
Disabled for now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109424 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-21Fix batch of converting RegisterPass<> to INTIALIZE_PASS().Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109045 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-23Convert debug messages to use dbgs(). Generally this meansDavid Greene
s/errs/dbgs/g except for certain special cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92040 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-16typo spotted by duncan.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88884 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-15teach LVI to infer edge information from switch instructions.Chris Lattner
This allows JT to eliminate a ton of infeasible edges when handling code like the templates in PatternMatch.h git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88869 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-15fix a logic error that would cause LVI-JT to miscompileChris Lattner
some conditionals git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88868 91177308-0d34-0410-b5e6-96231b3b80d8