367f98f000 
								
							 
						 
						
							
							
								
								Teach LazyValueInfo that allocas aren't NULL. Over all of llvm-test, this saves  
							
							... 
							
							
							
							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.
llvm-svn: 123533 
							
						 
						
							2011-01-15 09:16:12 +00:00  
				
					
						
							
							
								 
						
							
								6f060afbbd 
								
							 
						 
						
							
							
								
								Reorder, rename, and document some members to make this easier to follow.  
							
							... 
							
							
							
							llvm-svn: 122929 
							
						 
						
							2011-01-05 23:26:22 +00:00  
				
					
						
							
							
								 
						
							
								e86dacf449 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 122908 
							
						 
						
							2011-01-05 21:37:18 +00:00  
				
					
						
							
							
								 
						
							
								118ac80c81 
								
							 
						 
						
							
							
								
								Re-convert several of LazyValueInfo's internal maps to Dense{Map|Set}, and fix the issue in  
							
							... 
							
							
							
							hasBlockValue() that was causing iterator invalidations.  Many thanks to Dimitry Andric for
tracking down those invalidations!
llvm-svn: 122906 
							
						 
						
							2011-01-05 21:15:29 +00:00  
				
					
						
							
							
								 
						
							
								c6beda80ff 
								
							 
						 
						
							
							
								
								Speculatively revert the use of DenseMap in LazyValueInfo, which may be causing Linux self-host failures.  
							
							... 
							
							
							
							llvm-svn: 122291 
							
						 
						
							2010-12-20 23:53:19 +00:00  
				
					
						
							
							
								 
						
							
								9be3ec6264 
								
							 
						 
						
							
							
								
								Attempt to appease the DragonEgg buildbots.  
							
							... 
							
							
							
							llvm-svn: 122288 
							
						 
						
							2010-12-20 23:23:18 +00:00  
				
					
						
							
							
								 
						
							
								813a2c45a8 
								
							 
						 
						
							
							
								
								Convert one of LVI's primary maps to a DenseMap, now that we know are more assured of iterator stability.  
							
							... 
							
							
							
							llvm-svn: 122273 
							
						 
						
							2010-12-20 21:30:54 +00:00  
				
					
						
							
							
								 
						
							
								d83f98a51e 
								
							 
						 
						
							
							
								
								More LVI cleanups, including trying to simplify the process of maintaining the OverDefinedCache.  
							
							... 
							
							
							
							llvm-svn: 122256 
							
						 
						
							2010-12-20 19:33:41 +00:00  
				
					
						
							
							
								 
						
							
								64c2c5798a 
								
							 
						 
						
							
							
								
								Reuse the reference into the LVI cache throughout the solver subsystem.  This is much easier to  
							
							... 
							
							
							
							verify as being safe thanks its recent de-recursivization.
llvm-svn: 122254 
							
						 
						
							2010-12-20 18:18:16 +00:00  
				
					
						
							
							
								 
						
							
								55a700b0cf 
								
							 
						 
						
							
							
								
								Make LazyValueInfo non-recursive.  
							
							... 
							
							
							
							llvm-svn: 122120 
							
						 
						
							2010-12-18 01:00:40 +00:00  
				
					
						
							
							
								 
						
							
								a4fcd2418d 
								
							 
						 
						
							
							
								
								Move Value::getUnderlyingObject to be a standalone  
							
							... 
							
							
							
							function so that it can live in Analysis instead of
VMCore.
llvm-svn: 121885 
							
						 
						
							2010-12-15 20:02:24 +00:00  
				
					
						
							
							
								 
						
							
								11678bd299 
								
							 
						 
						
							
							
								
								Clean up some of LVI:  
							
							... 
							
							
							
							* 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.
llvm-svn: 121877 
							
						 
						
							2010-12-15 18:57:18 +00:00  
				
					
						
							
							
								 
						
							
								c7ed4dc932 
								
							 
						 
						
							
							
								
								Take the first step towards making LVI non-recursive: get rid of the LVIQuery abstraction.  
							
							... 
							
							
							
							llvm-svn: 121357 
							
						 
						
							2010-12-09 06:14:58 +00:00  
				
					
						
							
							
								 
						
							
								df7a4f2515 
								
							 
						 
						
							
							
								
								Now with fewer extraneous semicolons!  
							
							... 
							
							
							
							llvm-svn: 115996 
							
						 
						
							2010-10-07 22:25:06 +00:00  
				
					
						
							
							
								 
						
							
								140296f5c0 
								
							 
						 
						
							
							
								
								It is possible, under specific circumstances involving ptrtoint 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.
llvm-svn: 114103 
							
						 
						
							2010-09-16 18:28:33 +00:00  
				
					
						
							
							
								 
						
							
								a74fa15f32 
								
							 
						 
						
							
							
								
								Clean up some of the PassRegistry implementation, and pImpl-ize it to reduce #include clutter  
							
							... 
							
							
							
							and exposing internal details.
llvm-svn: 113252 
							
						 
						
							2010-09-07 19:16:25 +00:00  
				
					
						
							
							
								 
						
							
								ad48e01eef 
								
							 
						 
						
							
							
								
								Add completely hokey binary-and and binary-or operations to ConstantRange and  
							
							... 
							
							
							
							teach LazyValueInfo to use them.
llvm-svn: 113196 
							
						 
						
							2010-09-07 05:39:02 +00:00  
				
					
						
							
							
								 
						
							
								65b48b5dfc 
								
							 
						 
						
							
							
								
								zap dead code.  
							
							... 
							
							
							
							llvm-svn: 113073 
							
						 
						
							2010-09-04 18:12:00 +00:00  
				
					
						
							
							
								 
						
							
								c725462245 
								
							 
						 
						
							
							
								
								Add support for simplifying a load from a computed value to a load from a global when it  
							
							... 
							
							
							
							is provable that they're equivalent.  This fixes PR4855.
llvm-svn: 112994 
							
						 
						
							2010-09-03 19:08:37 +00:00  
				
					
						
							
							
								 
						
							
								2912df072d 
								
							 
						 
						
							
							
								
								Remove incorrect and poorly tested code for trying to reason about values on default edges of  
							
							... 
							
							
							
							switches.  Just return the conservatively correct answer.
llvm-svn: 112876 
							
						 
						
							2010-09-02 22:16:52 +00:00  
				
					
						
							
							
								 
						
							
								a8c896b704 
								
							 
						 
						
							
							
								
								Fix a bug in LazyValueInfo that CorrelatedValuePropagation exposed: In the LVI lattice, undef and the full set ConstantRange should not  
							
							... 
							
							
							
							be treated as equivalent.
llvm-svn: 112843 
							
						 
						
							2010-09-02 18:23:58 +00:00  
				
					
						
							
							
								 
						
							
								9517943d11 
								
							 
						 
						
							
							
								
								It is possible to try to merge a not-constant with a constantrage, when 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.
llvm-svn: 112489 
							
						 
						
							2010-08-30 17:03:45 +00:00  
				
					
						
							
							
								 
						
							
								38f6b7fe3b 
								
							 
						 
						
							
							
								
								Improve the precision of getConstant().  
							
							... 
							
							
							
							llvm-svn: 112323 
							
						 
						
							2010-08-27 23:29:38 +00:00  
				
					
						
							
							
								 
						
							
								6ebbd92380 
								
							 
						 
						
							
							
								
								Use LVI to eliminate conditional branches where we've tested a related condition previously.  Update tests for this change.  
							
							... 
							
							
							
							This fixes PR5652.
llvm-svn: 112270 
							
						 
						
							2010-08-27 17:12:29 +00:00  
				
					
						
							
							
								 
						
							
								4afea9e3c6 
								
							 
						 
						
							
							
								
								In the default address space, any GEP off of null results in a trap value if 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.
llvm-svn: 112015 
							
						 
						
							2010-08-25 01:16:47 +00:00  
				
					
						
							
							
								 
						
							
								a10000006e 
								
							 
						 
						
							
							
								
								NULL loads are only invalid in the default address space.  
							
							... 
							
							
							
							llvm-svn: 111972 
							
						 
						
							2010-08-24 22:00:55 +00:00  
				
					
						
							
							
								 
						
							
								b695c83de9 
								
							 
						 
						
							
							
								
								Add support for inferring values for the default cases of switches.  
							
							... 
							
							
							
							llvm-svn: 111971 
							
						 
						
							2010-08-24 21:59:42 +00:00  
				
					
						
							
							
								 
						
							
								da34de1599 
								
							 
						 
						
							
							
								
								Add support for inferring that a load from a pointer implies that it is not null.  
							
							... 
							
							
							
							llvm-svn: 111959 
							
						 
						
							2010-08-24 20:47:29 +00:00  
				
					
						
							
							
								 
						
							
								c62f704576 
								
							 
						 
						
							
							
								
								Don't assume that all constants with integer types are ConstantInts.  
							
							... 
							
							
							
							llvm-svn: 111906 
							
						 
						
							2010-08-24 07:55:44 +00:00  
				
					
						
							
							
								 
						
							
								80d19f0905 
								
							 
						 
						
							
							
								
								Use ConstantRange to propagate information through value definitions.  
							
							... 
							
							
							
							llvm-svn: 111425 
							
						 
						
							2010-08-18 21:11:37 +00:00  
				
					
						
							
							
								 
						
							
								208636fa33 
								
							 
						 
						
							
							
								
								Inform LazyValueInfo whenever a block is deleted, to avoid dangling pointer issues.  
							
							... 
							
							
							
							llvm-svn: 111382 
							
						 
						
							2010-08-18 18:39:01 +00:00  
				
					
						
							
							
								 
						
							
								fa7d44687f 
								
							 
						 
						
							
							
								
								Fix another iterator invalidation that caused a *really* nasty miscompilation in 403.gcc.  
							
							... 
							
							
							
							llvm-svn: 111210 
							
						 
						
							2010-08-16 23:42:33 +00:00  
				
					
						
							
							
								 
						
							
								7b974a45db 
								
							 
						 
						
							
							
								
								Fix a subtle use-after-free issue.  
							
							... 
							
							
							
							llvm-svn: 110863 
							
						 
						
							2010-08-11 22:36:04 +00:00  
				
					
						
							
							
								 
						
							
								0bd61240e9 
								
							 
						 
						
							
							
								
								Improve indentation.  
							
							... 
							
							
							
							llvm-svn: 110778 
							
						 
						
							2010-08-11 04:24:25 +00:00  
				
					
						
							
							
								 
						
							
								5f1dd0967d 
								
							 
						 
						
							
							
								
								Now that we're using ConstantRange to represent potential values, make use of that represenation to  
							
							... 
							
							
							
							create constraints from comparisons other than eq/neq.
llvm-svn: 110742 
							
						 
						
							2010-08-10 23:20:01 +00:00  
				
					
						
							
							
								 
						
							
								185fe00633 
								
							 
						 
						
							
							
								
								Switch over to using ConstantRange to track integral values.  
							
							... 
							
							
							
							llvm-svn: 110714 
							
						 
						
							2010-08-10 20:03:09 +00:00  
				
					
						
							
							
								 
						
							
								8afac043fb 
								
							 
						 
						
							
							
								
								Add ConstantRange information to the debugging output.  
							
							... 
							
							
							
							llvm-svn: 110598 
							
						 
						
							2010-08-09 20:50:46 +00:00  
				
					
						
							
							
								 
						
							
								0f306a45ad 
								
							 
						 
						
							
							
								
								Add the beginnings of infrastructure for range tracking.  
							
							... 
							
							
							
							llvm-svn: 110388 
							
						 
						
							2010-08-05 22:59:19 +00:00  
				
					
						
							
							
								 
						
							
								c3a1413ea1 
								
							 
						 
						
							
							
								
								Split the tag and value members of LVILatticeVal in preparation for expanding the lattice to something that won't fit in two bits.  
							
							... 
							
							
							
							llvm-svn: 110383 
							
						 
						
							2010-08-05 22:10:46 +00:00  
				
					
						
							
							
								 
						
							
								c1561b8400 
								
							 
						 
						
							
							
								
								Add an initial implementation of PHI translation for LazyValueInfo.  This involves rolling back some  
							
							... 
							
							
							
							of my earlier data structure improvements until I can ensure that there are no iterator invalidation problems.
llvm-svn: 109935 
							
						 
						
							2010-07-30 23:59:40 +00:00  
				
					
						
							
							
								 
						
							
								e4a0ab69d2 
								
							 
						 
						
							
							
								
								Revert my last two patches to LVI, which recent changes have exposed a miscompilation in.  
							
							... 
							
							
							
							llvm-svn: 109889 
							
						 
						
							2010-07-30 20:56:07 +00:00  
				
					
						
							
							
								 
						
							
								a44f49f189 
								
							 
						 
						
							
							
								
								Pass the queried value by argument rather than in a member, in preparation for supporting PHI translation.  
							
							... 
							
							
							
							llvm-svn: 109701 
							
						 
						
							2010-07-28 23:50:08 +00:00  
				
					
						
							
							
								 
						
							
								6982dd4e1f 
								
							 
						 
						
							
							
								
								Get rid of LVIQuery as a distinct data structure, so that we don't have to initialize a new set of maps on every query.  
							
							... 
							
							
							
							llvm-svn: 109679 
							
						 
						
							2010-07-28 22:07:25 +00:00  
				
					
						
							
							
								 
						
							
								aac5a72139 
								
							 
						 
						
							
							
								
								Rearrange several datastructures in LazyValueInfo to improve compile time.  
							
							... 
							
							
							
							This is still not perfect, but better than it was before.
llvm-svn: 109563 
							
						 
						
							2010-07-27 23:58:11 +00:00  
				
					
						
							
							
								 
						
							
								aa7f66ba67 
								
							 
						 
						
							
							
								
								Add an initial implementation of LazyValueInfo updating for JumpThreading.  Disabled for now.  
							
							... 
							
							
							
							llvm-svn: 109424 
							
						 
						
							2010-07-26 18:48:03 +00:00  
				
					
						
							
							
								 
						
							
								a57b97e7e7 
								
							 
						 
						
							
							
								
								Fix batch of converting RegisterPass<> to INTIALIZE_PASS().  
							
							... 
							
							
							
							llvm-svn: 109045 
							
						 
						
							2010-07-21 22:09:45 +00:00  
				
					
						
							
							
								 
						
							
								37e9809294 
								
							 
						 
						
							
							
								
								Convert debug messages to use dbgs().  Generally this means  
							
							... 
							
							
							
							s/errs/dbgs/g except for certain special cases.
llvm-svn: 92040 
							
						 
						
							2009-12-23 20:43:58 +00:00  
				
					
						
							
							
								 
						
							
								e58c05780e 
								
							 
						 
						
							
							
								
								typo spotted by duncan.  
							
							... 
							
							
							
							llvm-svn: 88884 
							
						 
						
							2009-11-16 03:51:42 +00:00  
				
					
						
							
							
								 
						
							
								7735878591 
								
							 
						 
						
							
							
								
								teach LVI to infer edge information from switch instructions.  
							
							... 
							
							
							
							This allows JT to eliminate a ton of infeasible edges when
handling code like the templates in PatternMatch.h
llvm-svn: 88869 
							
						 
						
							2009-11-15 20:02:12 +00:00  
				
					
						
							
							
								 
						
							
								b0c0a0df3e 
								
							 
						 
						
							
							
								
								fix a logic error that would cause LVI-JT to miscompile  
							
							... 
							
							
							
							some conditionals
llvm-svn: 88868 
							
						 
						
							2009-11-15 20:01:24 +00:00