444c24a9f0 
								
							 
						 
						
							
							
								
								Speculatively revert r112433.  
							
							... 
							
							
							
							llvm-svn: 112608 
							
						 
						
							2010-08-31 17:56:47 +00:00  
				
					
						
							
							
								 
						
							
								d1da5cdfee 
								
							 
						 
						
							
							
								
								Restructure the {A,+,B}<L> * {C,+,D}<L> folding so that it folds  
							
							... 
							
							
							
							all applicable addrecs before recursing on getMulExpr, instead of
recursing on getMulExpr for each one.
llvm-svn: 112433 
							
						 
						
							2010-08-29 15:16:58 +00:00  
				
					
						
							
							
								 
						
							
								3e6fc18943 
								
							 
						 
						
							
							
								
								Batch up subtracts along with adds, when analyzing long chains of  
							
							... 
							
							
							
							operations.
llvm-svn: 112432 
							
						 
						
							2010-08-29 15:10:06 +00:00  
				
					
						
							
							
								 
						
							
								7712d2900d 
								
							 
						 
						
							
							
								
								Micro-optimize GroupByComplexity.  
							
							... 
							
							
							
							llvm-svn: 112431 
							
						 
						
							2010-08-29 15:07:13 +00:00  
				
					
						
							
							
								 
						
							
								0f2de01355 
								
							 
						 
						
							
							
								
								Hold AddRec->getLoop() in a variable, to make the Mul code more consistent  
							
							... 
							
							
							
							with the Add code.
llvm-svn: 112430 
							
						 
						
							2010-08-29 14:55:19 +00:00  
				
					
						
							
							
								 
						
							
								028c18158a 
								
							 
						 
						
							
							
								
								Rename a variable, for consistency.  
							
							... 
							
							
							
							llvm-svn: 112429 
							
						 
						
							2010-08-29 14:53:34 +00:00  
				
					
						
							
							
								 
						
							
								28a84d4ba1 
								
							 
						 
						
							
							
								
								Use iterators instead of indices.  
							
							... 
							
							
							
							llvm-svn: 112428 
							
						 
						
							2010-08-29 14:52:02 +00:00  
				
					
						
							
							
								 
						
							
								fe22f1d3cc 
								
							 
						 
						
							
							
								
								Fix an index calculation thinko.  
							
							... 
							
							
							
							llvm-svn: 112337 
							
						 
						
							2010-08-28 00:39:27 +00:00  
				
					
						
							
							
								 
						
							
								15871f23e3 
								
							 
						 
						
							
							
								
								When merging adjacent operands, scan ahead and merge all equal  
							
							... 
							
							
							
							adjacent operands at once, instead of just two at a time.
llvm-svn: 112299 
							
						 
						
							2010-08-27 21:39:59 +00:00  
				
					
						
							
							
								 
						
							
								c866bf4fec 
								
							 
						 
						
							
							
								
								Make the {A,+,B}<L> + {C,+,D}<L>  -->  Other + {A+C,+,B+D}<L>  
							
							... 
							
							
							
							transformation collect all the addrecs with the same loop
add combine them at once rather than starting everything over
at the first chance.
llvm-svn: 112290 
							
						 
						
							2010-08-27 20:45:56 +00:00  
				
					
						
							
							
								 
						
							
								9bad2fb378 
								
							 
						 
						
							
							
								
								Switch ScalarEvolution's main Value*->SCEV* map from std::map  
							
							... 
							
							
							
							to DenseMap.
llvm-svn: 112281 
							
						 
						
							2010-08-27 18:55:03 +00:00  
				
					
						
							
							
								 
						
							
								2706567c5c 
								
							 
						 
						
							
							
								
								Optimize SCEVComplexityCompare. Use a 3-way return instead of a 2-way  
							
							... 
							
							
							
							return to avoid needing two calls to test for equivalence, and sort
addrecs by their degree before examining their operands.
llvm-svn: 112267 
							
						 
						
							2010-08-27 15:26:01 +00:00  
				
					
						
							
							
								 
						
							
								797a1dbb1c 
								
							 
						 
						
							
							
								
								To create a copy of a SmallVector with an element removed from the  
							
							... 
							
							
							
							middle, copy the elements in two groups, rather than copying all the
elements and then doing an erase on the middle of the result. These
are SmallVectors, so we shouldn't expect to hit dynamic allocation
in the common case.
llvm-svn: 111151 
							
						 
						
							2010-08-16 16:57:24 +00:00  
				
					
						
							
							
								 
						
							
								0d0cc18af5 
								
							 
						 
						
							
							
								
								Tidy whitespace.  
							
							... 
							
							
							
							llvm-svn: 111147 
							
						 
						
							2010-08-16 16:34:09 +00:00  
				
					
						
							
							
								 
						
							
								c29eeaecec 
								
							 
						 
						
							
							
								
								Add a comment.  
							
							... 
							
							
							
							llvm-svn: 111145 
							
						 
						
							2010-08-16 16:31:39 +00:00  
				
					
						
							
							
								 
						
							
								7eac4961d7 
								
							 
						 
						
							
							
								
								Use const_iterator in a few places.  
							
							... 
							
							
							
							llvm-svn: 111144 
							
						 
						
							2010-08-16 16:30:01 +00:00  
				
					
						
							
							
								 
						
							
								74c61503b1 
								
							 
						 
						
							
							
								
								Use iterators instead of indices in a few more places.  
							
							... 
							
							
							
							llvm-svn: 111143 
							
						 
						
							2010-08-16 16:27:53 +00:00  
				
					
						
							
							
								 
						
							
								f29618236e 
								
							 
						 
						
							
							
								
								Micro-optimize SCEVConstant comparison.  
							
							... 
							
							
							
							llvm-svn: 111142 
							
						 
						
							2010-08-16 16:25:35 +00:00  
				
					
						
							
							
								 
						
							
								3688ea5c7d 
								
							 
						 
						
							
							
								
								Move SCEVNAryExpr's virtual member functions out of line, and convert  
							
							... 
							
							
							
							them to iterators.
llvm-svn: 111140 
							
						 
						
							2010-08-16 16:21:27 +00:00  
				
					
						
							
							
								 
						
							
								d6925bbe0d 
								
							 
						 
						
							
							
								
								Use iterators instead of indices in simple cases.  
							
							... 
							
							
							
							llvm-svn: 111138 
							
						 
						
							2010-08-16 16:16:11 +00:00  
				
					
						
							
							
								 
						
							
								b6c773ec2e 
								
							 
						 
						
							
							
								
								Avoid gratuitous inefficiency in ifndef NDEBUG code.  
							
							... 
							
							
							
							llvm-svn: 111137 
							
						 
						
							2010-08-16 16:13:54 +00:00  
				
					
						
							
							
								 
						
							
								e5fb1036e6 
								
							 
						 
						
							
							
								
								Make one getAddExpr call when analyzing a+b+c+d+e+... instead of one  
							
							... 
							
							
							
							for each add instruction. Ditto for Mul.
llvm-svn: 111136 
							
						 
						
							2010-08-16 16:03:49 +00:00  
				
					
						
							
							
								 
						
							
								b094b39111 
								
							 
						 
						
							
							
								
								Delete an unused function.  
							
							... 
							
							
							
							llvm-svn: 111135 
							
						 
						
							2010-08-16 15:57:14 +00:00  
				
					
						
							
							
								 
						
							
								0c436ab356 
								
							 
						 
						
							
							
								
								Various optimizations. Don't compare two loops' depths  
							
							... 
							
							
							
							when they are the same loop. Don't compare two instructions'
loop depths when they are in the same block.
llvm-svn: 111045 
							
						 
						
							2010-08-13 21:24:58 +00:00  
				
					
						
							
							
								 
						
							
								63c020a210 
								
							 
						 
						
							
							
								
								When testing whether one loop contains another, test this directly  
							
							... 
							
							
							
							rather than testing whether the loop contains the other's header.
llvm-svn: 111039 
							
						 
						
							2010-08-13 20:23:25 +00:00  
				
					
						
							
							
								 
						
							
								3324b9ec67 
								
							 
						 
						
							
							
								
								Add a const.  
							
							... 
							
							
							
							llvm-svn: 111038 
							
						 
						
							2010-08-13 20:17:27 +00:00  
				
					
						
							
							
								 
						
							
								cf32f2bde1 
								
							 
						 
						
							
							
								
								When creating a symmetric SCEV with a constant operand, put  
							
							... 
							
							
							
							the constant operand on the left, as that's where ScalarEvolution
will end up canonicalizing to.
llvm-svn: 111037 
							
						 
						
							2010-08-13 20:17:14 +00:00  
				
					
						
							
							
								 
						
							
								ec0120a123 
								
							 
						 
						
							
							
								
								An add recurrence is loop-invariant in any loop inside of its  
							
							... 
							
							
							
							associated loop. This avoids potentially expensive traversals
of the add recurrence's operands.
llvm-svn: 111034 
							
						 
						
							2010-08-13 20:11:39 +00:00  
				
					
						
							
							
								 
						
							
								2de47777f4 
								
							 
						 
						
							
							
								
								Optimize ScalarEvolution::getAddExpr's operand factoring code by  
							
							... 
							
							
							
							having it finish processing all of the muliply operands before
starting the whole getAddExpr process over again, instead of
immediately after the first simplification.
llvm-svn: 110916 
							
						 
						
							2010-08-12 15:00:23 +00:00  
				
					
						
							
							
								 
						
							
								157847f5d1 
								
							 
						 
						
							
							
								
								Hoist some loop-invariant code out of a hot loop.  
							
							... 
							
							
							
							llvm-svn: 110915 
							
						 
						
							2010-08-12 14:52:55 +00:00  
				
					
						
							
							
								 
						
							
								e67b287451 
								
							 
						 
						
							
							
								
								Optimize ScalarEvolution::getAddExpr's duplicate operand detection  
							
							... 
							
							
							
							by having it finish processing the whole operand list before
starting the whole getAddExpr process over again, instead of
immediately after the first duplicate is found.
llvm-svn: 110914 
							
						 
						
							2010-08-12 14:46:54 +00:00  
				
					
						
							
							
								 
						
							
								f7495f286a 
								
							 
						 
						
							
							
								
								When analyzing loop exit conditions combined with and and or, don't  
							
							... 
							
							
							
							make any assumptions about when the two conditions will agree on when
to permit the loop to exit. This fixes PR7845.
llvm-svn: 110758 
							
						 
						
							2010-08-11 00:12:36 +00:00  
				
					
						
							
							
								 
						
							
								e18c2d6f99 
								
							 
						 
						
							
							
								
								Rename and reorder the arguments to isImpliedCond, for consistency and clarity.  
							
							... 
							
							
							
							llvm-svn: 110750 
							
						 
						
							2010-08-10 23:46:30 +00:00  
				
					
						
							
							
								 
						
							
								a7aed18624 
								
							 
						 
						
							
							
								
								Reapply r110396, with fixes to appease the Linux buildbot gods.  
							
							... 
							
							
							
							llvm-svn: 110460 
							
						 
						
							2010-08-06 18:33:48 +00:00  
				
					
						
							
							
								 
						
							
								bda59bd247 
								
							 
						 
						
							
							
								
								Revert r110396 to fix buildbots.  
							
							... 
							
							
							
							llvm-svn: 110410 
							
						 
						
							2010-08-06 00:23:35 +00:00  
				
					
						
							
							
								 
						
							
								755aceb5d0 
								
							 
						 
						
							
							
								
								Don't use PassInfo* as a type identifier for passes.  Instead, use the address of the static  
							
							... 
							
							
							
							ID member as the sole unique type identifier.  Clean up APIs related to this change.
llvm-svn: 110396 
							
						 
						
							2010-08-05 23:42:04 +00:00  
				
					
						
							
							
								 
						
							
								db764c6e3b 
								
							 
						 
						
							
							
								
								Fix a minor bug which resulted in intermediate calculations  
							
							... 
							
							
							
							using wider types than are necessary.
llvm-svn: 110241 
							
						 
						
							2010-08-04 19:52:50 +00:00  
				
					
						
							
							
								 
						
							
								7cac95778f 
								
							 
						 
						
							
							
								
								Make SCEVUnknown a CallbackVH, so that it can be notified directly  
							
							... 
							
							
							
							of Value deletions and RAUWs, instead of relying on ScalarEvolution's
Scalars map being notified, as that's complicated at best, and
insufficient in general.
This means SCEVUnknown needs a non-trivial destructor, so introduce
a mechanism to allow ScalarEvolution to locate all the SCEVUnknowns.
llvm-svn: 110086 
							
						 
						
							2010-08-02 23:49:30 +00:00  
				
					
						
							
							
								 
						
							
								40b31ad3ee 
								
							 
						 
						
							
							
								
								Prefix `next' iterator operation with `llvm::'.  
							
							... 
							
							
							
							Fixes potential ambiguity problems on VS 2010.
Patch by nobled!
llvm-svn: 110029 
							
						 
						
							2010-08-02 06:00:15 +00:00  
				
					
						
							
							
								 
						
							
								ef6d5933a6 
								
							 
						 
						
							
							
								
								Speculatively revert r109705 since it seems to be causing some build bot  
							
							... 
							
							
							
							angst.
llvm-svn: 109718 
							
						 
						
							2010-07-29 01:25:38 +00:00  
				
					
						
							
							
								 
						
							
								3d6ac44d96 
								
							 
						 
						
							
							
								
								Factor out some of the code for updating old SCEVUnknown values, and  
							
							... 
							
							
							
							extend it to handle the case where multiple RAUWs affect a single
SCEVUnknown.
Add a ScalarEvolution unittest to test for this situation.
llvm-svn: 109705 
							
						 
						
							2010-07-29 00:17:55 +00:00  
				
					
						
							
							
								 
						
							
								7a066723d0 
								
							 
						 
						
							
							
								
								Make SCEVCallbackVH::allUsesReplacedWith update the old SCEVUnknown  
							
							... 
							
							
							
							object, as it may still be referenced by SCEVs not cleaned up by the
use list traversal.
Also, in ScalarEvolution::forgetValue, only check for a SCEVUnknown
object for the original value, not for any value in the use list,
because other SCEVUnknown values aren't necessary obsolete at that
point.
llvm-svn: 109570 
							
						 
						
							2010-07-28 01:09:07 +00:00  
				
					
						
							
							
								 
						
							
								8aeb0fb5ca 
								
							 
						 
						
							
							
								
								Make SCEVCallbackVH::allUsesReplacedWith unconditionally delete  
							
							... 
							
							
							
							the old value.
llvm-svn: 109567 
							
						 
						
							2010-07-28 00:28:25 +00:00  
				
					
						
							
							
								 
						
							
								5ae3102459 
								
							 
						 
						
							
							
								
								Micro-optimize SCEVComplexityCompare.  
							
							... 
							
							
							
							llvm-svn: 109267 
							
						 
						
							2010-07-23 21:20:52 +00:00  
				
					
						
							
							
								 
						
							
								992db006d0 
								
							 
						 
						
							
							
								
								Add a const qualifier.  
							
							... 
							
							
							
							llvm-svn: 109266 
							
						 
						
							2010-07-23 21:18:55 +00:00  
				
					
						
							
							
								 
						
							
								dde79d8f1a 
								
							 
						 
						
							
							
								
								mass elimination of reliance on automatic iterator dereferencing  
							
							... 
							
							
							
							llvm-svn: 109103 
							
						 
						
							2010-07-22 13:36:47 +00:00  
				
					
						
							
							
								 
						
							
								a57b97e7e7 
								
							 
						 
						
							
							
								
								Fix batch of converting RegisterPass<> to INTIALIZE_PASS().  
							
							... 
							
							
							
							llvm-svn: 109045 
							
						 
						
							2010-07-21 22:09:45 +00:00  
				
					
						
							
							
								 
						
							
								46f00a25f9 
								
							 
						 
						
							
							
								
								Add a fast path for x - x.  
							
							... 
							
							
							
							llvm-svn: 108855 
							
						 
						
							2010-07-20 16:53:00 +00:00  
				
					
						
							
							
								 
						
							
								64b1e82a7c 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution how to fold trunc(undef) and anyext(undef) to undef.  
							
							... 
							
							
							
							This helps LSR behave more consistently on bugpoint-reduced testcases.
llvm-svn: 108451 
							
						 
						
							2010-07-15 20:02:11 +00:00  
				
					
						
							
							
								 
						
							
								f638f4ff84 
								
							 
						 
						
							
							
								
								In ScalarEvolution::forgetValue, eliminate any SCEVUnknown  
							
							... 
							
							
							
							entries associated with the value being erased in the
folding set map.  These entries used to be harmless, because
a SCEVUnknown doesn't store any information about its Value*,
so having a new Value allocated at the old Value's address
wasn't a problem. But now that ScalarEvolution is storing more
information about values, this is no longer safe.
llvm-svn: 107316 
							
						 
						
							2010-06-30 20:21:12 +00:00  
				
					
						
							
							
								 
						
							
								c0cca7fdda 
								
							 
						 
						
							
							
								
								Revert the part of r107257 which introduced new logic for using  
							
							... 
							
							
							
							nsw and nuw flags from IR Instructions. On further consideration,
this isn't valid.
llvm-svn: 107298 
							
						 
						
							2010-06-30 17:27:11 +00:00  
				
					
						
							
							
								 
						
							
								16206132b6 
								
							 
						 
						
							
							
								
								Improve ScalarEvolution's nsw and nuw preservation.  
							
							... 
							
							
							
							llvm-svn: 107257 
							
						 
						
							2010-06-30 07:16:37 +00:00  
				
					
						
							
							
								 
						
							
								9396b42ca4 
								
							 
						 
						
							
							
								
								When computing a new ConservativeResult, intersect it with  
							
							... 
							
							
							
							the old one instead of replacing it, to be more precise.
llvm-svn: 107256 
							
						 
						
							2010-06-30 06:58:35 +00:00  
				
					
						
							
							
								 
						
							
								ae36b1ed42 
								
							 
						 
						
							
							
								
								Fix ScalarEvolution's tripcount computation for chains of loops  
							
							... 
							
							
							
							where each loop's induction variable's start value is the exit
value of a preceding loop.
llvm-svn: 107224 
							
						 
						
							2010-06-29 23:43:06 +00:00  
				
					
						
							
							
								 
						
							
								90db61d638 
								
							 
						 
						
							
							
								
								Just as its not safe to blindly transfer the nsw bit from an add  
							
							... 
							
							
							
							instruction to an add scev, it's not safe to blindly transfer the
inbounds flag from a gep instruction to an nsw on the scev for the
gep.
llvm-svn: 107117 
							
						 
						
							2010-06-29 01:41:41 +00:00  
				
					
						
							
							
								 
						
							
								89dd42af31 
								
							 
						 
						
							
							
								
								Eliminate a redundant FoldingSet lookup.  
							
							... 
							
							
							
							llvm-svn: 106872 
							
						 
						
							2010-06-25 18:47:08 +00:00  
				
					
						
							
							
								 
						
							
								5235cc2c25 
								
							 
						 
						
							
							
								
								Don't try to preserve pointer types in SCEVConstants; the old code  
							
							... 
							
							
							
							was over-complicated.
llvm-svn: 106760 
							
						 
						
							2010-06-24 16:47:03 +00:00  
				
					
						
							
							
								 
						
							
								3ace9f4e3d 
								
							 
						 
						
							
							
								
								Make the trunc code consistent with the zext and sext code in its  
							
							... 
							
							
							
							handling of pointer types.
llvm-svn: 106757 
							
						 
						
							2010-06-24 16:33:38 +00:00  
				
					
						
							
							
								 
						
							
								75c6b0bb1f 
								
							 
						 
						
							
							
								
								Replace ScalarEvolution's private copy of getLoopPredecessor  
							
							... 
							
							
							
							with LoopInfo's public copy.
llvm-svn: 106603 
							
						 
						
							2010-06-22 23:43:28 +00:00  
				
					
						
							
							
								 
						
							
								f820bd327d 
								
							 
						 
						
							
							
								
								Allow "exhaustive" trip count evaluation on phi nodes with all  
							
							... 
							
							
							
							constant operands.
llvm-svn: 106537 
							
						 
						
							2010-06-22 13:15:46 +00:00  
				
					
						
							
							
								 
						
							
								dd41bba517 
								
							 
						 
						
							
							
								
								Use A.append(...) instead of A.insert(A.end(), ...) when A is a  
							
							... 
							
							
							
							SmallVector, and other SmallVector simplifications.
llvm-svn: 106452 
							
						 
						
							2010-06-21 19:47:52 +00:00  
				
					
						
							
							
								 
						
							
								866971ed3d 
								
							 
						 
						
							
							
								
								Fix ScalarEvolution's "exhaustive" trip count evaluation code to avoid  
							
							... 
							
							
							
							assuming that loops are in canonical form, as ScalarEvolution doesn't
depend on LoopSimplify itself. Also, with indirectbr not all loops can
be simplified. This fixes PR7416.
llvm-svn: 106389 
							
						 
						
							2010-06-19 14:17:24 +00:00  
				
					
						
							
							
								 
						
							
								24ceda8eb0 
								
							 
						 
						
							
							
								
								Revert r106304 (105548 and friends), which are the SCEVComplexityCompare  
							
							... 
							
							
							
							optimizations. There is still some nondeterminism remaining.
llvm-svn: 106306 
							
						 
						
							2010-06-18 19:54:20 +00:00  
				
					
						
							
							
								 
						
							
								4c807fca97 
								
							 
						 
						
							
							
								
								Reapply 105540, 105542, and 105548, and revert r105732.  
							
							... 
							
							
							
							llvm-svn: 106304 
							
						 
						
							2010-06-18 19:26:04 +00:00  
				
					
						
							
							
								 
						
							
								45073042eb 
								
							 
						 
						
							
							
								
								Reapply 105546.  
							
							... 
							
							
							
							llvm-svn: 106302 
							
						 
						
							2010-06-18 19:12:32 +00:00  
				
					
						
							
							
								 
						
							
								9136d9fbf8 
								
							 
						 
						
							
							
								
								Reapply 105544.  
							
							... 
							
							
							
							llvm-svn: 106301 
							
						 
						
							2010-06-18 19:09:27 +00:00  
				
					
						
							
							
								 
						
							
								3d8a9d7490 
								
							 
						 
						
							
							
								
								Remove getIntegerSCEV; it's redundant with getConstant, and getConstant  
							
							... 
							
							
							
							is more consistent with the ConstantInt API.
llvm-svn: 106281 
							
						 
						
							2010-06-18 14:33:50 +00:00  
				
					
						
							
							
								 
						
							
								8f5954f42c 
								
							 
						 
						
							
							
								
								Simplify this code.  
							
							... 
							
							
							
							llvm-svn: 106254 
							
						 
						
							2010-06-17 23:34:09 +00:00  
				
					
						
							
							
								 
						
							
								ae83e1f5cb 
								
							 
						 
						
							
							
								
								Revert 105540, 105542, 105544, 105546, and 105548 to unbreak bootstrapping.  
							
							... 
							
							
							
							llvm-svn: 105740 
							
						 
						
							2010-06-09 18:59:43 +00:00  
				
					
						
							
							
								 
						
							
								ebf2e977cf 
								
							 
						 
						
							
							
								
								The FoldingSet hash data includes pointer values, so it isn't  
							
							... 
							
							
							
							determinstic. Instead, give SCEV objects an arbitrary sequence
number.
llvm-svn: 105548 
							
						 
						
							2010-06-07 19:36:14 +00:00  
				
					
						
							
							
								 
						
							
								3553feed79 
								
							 
						 
						
							
							
								
								Optimize this code somewhat by taking advantage of the fact  
							
							... 
							
							
							
							that the operands are sorted.
llvm-svn: 105546 
							
						 
						
							2010-06-07 19:20:57 +00:00  
				
					
						
							
							
								 
						
							
								a2effb6452 
								
							 
						 
						
							
							
								
								Micro-optimize this, to speed up this hotspot in debug builds a little.  
							
							... 
							
							
							
							llvm-svn: 105544 
							
						 
						
							2010-06-07 19:16:37 +00:00  
				
					
						
							
							
								 
						
							
								18a4b46404 
								
							 
						 
						
							
							
								
								Micro-optimize this.  
							
							... 
							
							
							
							llvm-svn: 105542 
							
						 
						
							2010-06-07 19:12:54 +00:00  
				
					
						
							
							
								 
						
							
								70910a6ab6 
								
							 
						 
						
							
							
								
								Optimize ScalarEvolution's SCEVComplexityCompare predicate: don't go  
							
							... 
							
							
							
							scrounging through SCEVUnknown contents and SCEVNAryExpr operands;
instead just do a simple deterministic comparison of the precomputed
hash data.
Also, since this is more precise, it eliminates the need for the slow
N^2 duplicate detection code.
llvm-svn: 105540 
							
						 
						
							2010-06-07 19:06:13 +00:00  
				
					
						
							
							
								 
						
							
								a3b6c4b529 
								
							 
						 
						
							
							
								
								ConstantFoldConstantExpression can theoretically return null.  
							
							... 
							
							
							
							llvm-svn: 104948 
							
						 
						
							2010-05-28 16:12:08 +00:00  
				
					
						
							
							
								 
						
							
								70a3b12193 
								
							 
						 
						
							
							
								
								Use the SCEVAddRecExpr::getPostIncExpr utility function instead  
							
							... 
							
							
							
							of doing the same thing manually.
llvm-svn: 102997 
							
						 
						
							2010-05-04 01:12:27 +00:00  
				
					
						
							
							
								 
						
							
								5f18c547da 
								
							 
						 
						
							
							
								
								Fix a copy+pasto.  
							
							... 
							
							
							
							llvm-svn: 102996 
							
						 
						
							2010-05-04 01:11:15 +00:00  
				
					
						
							
							
								 
						
							
								1d2ded75e2 
								
							 
						 
						
							
							
								
								Use getConstant instead of getIntegerSCEV. The two are basically the  
							
							... 
							
							
							
							same, now that getConstant has overloads consistent with ConstantInt::get.
llvm-svn: 102965 
							
						 
						
							2010-05-03 22:09:21 +00:00  
				
					
						
							
							
								 
						
							
								267700c5aa 
								
							 
						 
						
							
							
								
								Silence warnings about -1 being converted to an unsigned value.  
							
							... 
							
							
							
							Also, pass true for isSigned even when creating constants for unsigned
comparisons, because the point is to create an all-ones constant,
rather than UINT64_MAX, even for integers wider than 64 bits.
llvm-svn: 102946 
							
						 
						
							2010-05-03 20:23:47 +00:00  
				
					
						
							
							
								 
						
							
								b5025c72eb 
								
							 
						 
						
							
							
								
								Use isTrueWhenEqual and isFalseWhenEqual instead of assuming that  
							
							... 
							
							
							
							SimplifyICmpOperands will simplify such cases to EQ or NE. This makes
the correcntess of the code independent on SimplifyICmpOperands doing
certain simplifications.
llvm-svn: 102927 
							
						 
						
							2010-05-03 18:00:24 +00:00  
				
					
						
							
							
								 
						
							
								d18dc2c876 
								
							 
						 
						
							
							
								
								In ScalarEvolution::print, don't bother printing out the SCEVs for  
							
							... 
							
							
							
							comparison instructions, since they aren't interesting, despite having
integer result types.
llvm-svn: 102925 
							
						 
						
							2010-05-03 17:03:23 +00:00  
				
					
						
							
							
								 
						
							
								df564cacaf 
								
							 
						 
						
							
							
								
								In SimplifyICmpOperands, avoid needlessly swapping the operands in the  
							
							... 
							
							
							
							case where both are addrecs in unrelated loops.
llvm-svn: 102924 
							
						 
						
							2010-05-03 17:00:11 +00:00  
				
					
						
							
							
								 
						
							
								81585c18e1 
								
							 
						 
						
							
							
								
								Factor out the new <= and >= analysis code into SimplifyICmpOperands.  
							
							... 
							
							
							
							llvm-svn: 102922 
							
						 
						
							2010-05-03 16:35:17 +00:00  
				
					
						
							
							
								 
						
							
								a0a8a7fe40 
								
							 
						 
						
							
							
								
								Set isSigned to true when creating an all-ones integer constant, even  
							
							... 
							
							
							
							for unsigned purposes, so >64-bit integer values get a full all-ones
value.
llvm-svn: 102739 
							
						 
						
							2010-04-30 19:22:39 +00:00  
				
					
						
							
							
								 
						
							
								1c07852e17 
								
							 
						 
						
							
							
								
								Silence compiler warnings.  
							
							... 
							
							
							
							llvm-svn: 102734 
							
						 
						
							2010-04-30 19:21:13 +00:00  
				
					
						
							
							
								 
						
							
								f33bac3afe 
								
							 
						 
						
							
							
								
								ScalarEvolution support for <= and >= loops.  
							
							... 
							
							
							
							Also, generalize ScalarEvolutions's min and max recognition to handle
some new forms of min and max that this change makes more common.
llvm-svn: 102234 
							
						 
						
							2010-04-24 03:09:42 +00:00  
				
					
						
							
							
								 
						
							
								36cce7e0dd 
								
							 
						 
						
							
							
								
								Use SimplifyICmpOperands in isKnownPredicate too.  
							
							... 
							
							
							
							llvm-svn: 102233 
							
						 
						
							2010-04-24 01:38:36 +00:00  
				
					
						
							
							
								 
						
							
								3673aa1a51 
								
							 
						 
						
							
							
								
								Update isImpliedCond to use the new SimplifyICmpOperands utility.  
							
							... 
							
							
							
							llvm-svn: 102232 
							
						 
						
							2010-04-24 01:34:53 +00:00  
				
					
						
							
							
								 
						
							
								48ff3cf63b 
								
							 
						 
						
							
							
								
								Add a new utility function SimplifyICmpOperands. Much of this code is  
							
							... 
							
							
							
							refactored out of ScalarEvolution::isImpliedCond, which will be updated
to use this new utility routine soon.
llvm-svn: 102229 
							
						 
						
							2010-04-24 01:28:42 +00:00  
				
					
						
							
							
								 
						
							
								ff3174e97f 
								
							 
						 
						
							
							
								
								When it doesn't matter whether zero or sign extension is used,  
							
							... 
							
							
							
							use ScalarEvolutions "any" extend function.
llvm-svn: 102156 
							
						 
						
							2010-04-23 01:51:29 +00:00  
				
					
						
							
							
								 
						
							
								acd700a24b 
								
							 
						 
						
							
							
								
								Don't attempt to analyze values which are obviously undef. This fixes some  
							
							... 
							
							
							
							assertion failures in extreme cases.
llvm-svn: 102042 
							
						 
						
							2010-04-22 01:35:11 +00:00  
				
					
						
							
							
								 
						
							
								a029cbe93f 
								
							 
						 
						
							
							
								
								Make ScalarEvolution::getConstant support pointer types, for consistency  
							
							... 
							
							
							
							with ScalarEvolution's overall approach to pointer types.
llvm-svn: 102003 
							
						 
						
							2010-04-21 16:04:04 +00:00  
				
					
						
							
							
								 
						
							
								12293815de 
								
							 
						 
						
							
							
								
								Fix SCEVCommutativeExpr::print to be robust in the case of improper  
							
							... 
							
							
							
							expression canonicalization. Its job is to print what's there, not to
make judgements about it.
llvm-svn: 101461 
							
						 
						
							2010-04-16 15:03:25 +00:00  
				
					
						
							
							
								 
						
							
								4e3c1139a2 
								
							 
						 
						
							
							
								
								Make getPredecessorWithUniqueSuccessorForBB return the unique successor  
							
							... 
							
							
							
							in addition to the predecessor.
llvm-svn: 101374 
							
						 
						
							2010-04-15 16:19:08 +00:00  
				
					
						
							
							
								 
						
							
								65de3d140d 
								
							 
						 
						
							
							
								
								Add a comment.  
							
							... 
							
							
							
							llvm-svn: 101248 
							
						 
						
							2010-04-14 16:08:56 +00:00  
				
					
						
							
							
								 
						
							
								7ef0dc2163 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution to simplify smax and umax when it can prove  
							
							... 
							
							
							
							that one operand is always greater than another.
llvm-svn: 101142 
							
						 
						
							2010-04-13 16:51:03 +00:00  
				
					
						
							
							
								 
						
							
								fe4b29180b 
								
							 
						 
						
							
							
								
								Minor code micro-optimizations.  
							
							... 
							
							
							
							llvm-svn: 101141 
							
						 
						
							2010-04-13 16:49:23 +00:00  
				
					
						
							
							
								 
						
							
								ebbd05f8ce 
								
							 
						 
						
							
							
								
								Micro-optimize a few hot spots.  
							
							... 
							
							
							
							llvm-svn: 101086 
							
						 
						
							2010-04-12 23:08:18 +00:00  
				
					
						
							
							
								 
						
							
								11862a6ed3 
								
							 
						 
						
							
							
								
								Add fast paths to ScalarEvolution::getSizeOf and getOffsetOf, as  
							
							... 
							
							
							
							they're used a lot by getNodeForGEP, which can be called a lot.
This speeds up -iv-users by around 15% on several testcases.
llvm-svn: 101083 
							
						 
						
							2010-04-12 23:03:26 +00:00  
				
					
						
							
							
								 
						
							
								6635bb26a6 
								
							 
						 
						
							
							
								
								Generalize ScalarEvolution's PHI analysis to handle loops that don't  
							
							... 
							
							
							
							have preheaders or dedicated exit blocks, as clients may not otherwise
need to run LoopSimplify.
llvm-svn: 101030 
							
						 
						
							2010-04-12 07:49:36 +00:00  
				
					
						
							
							
								 
						
							
								f76210ead8 
								
							 
						 
						
							
							
								
								Rewrite the overflow checking in the get{Signed,Unsigned}Range code for  
							
							... 
							
							
							
							AddRecs so that it checks for overflow in the computation that it is
performing, rather than just checking hasNo{Signed,Unsigned}Wrap, since
those flags are for a different computation. This fixes a bug that
impacts an upcoming change.
llvm-svn: 101028 
							
						 
						
							2010-04-12 07:39:33 +00:00  
				
					
						
							
							
								 
						
							
								068b793614 
								
							 
						 
						
							
							
								
								Fix indentation.  
							
							... 
							
							
							
							llvm-svn: 101001 
							
						 
						
							2010-04-11 23:44:58 +00:00  
				
					
						
							
							
								 
						
							
								07591698ce 
								
							 
						 
						
							
							
								
								Enhance ScalarEvolution::isKnownPredicate with support for  
							
							... 
							
							
							
							loop conditions which are invariants.
llvm-svn: 100995 
							
						 
						
							2010-04-11 22:16:48 +00:00  
				
					
						
							
							
								 
						
							
								f7f28511a9 
								
							 
						 
						
							
							
								
								Minor code simplification.  
							
							... 
							
							
							
							llvm-svn: 100994 
							
						 
						
							2010-04-11 22:13:11 +00:00  
				
					
						
							
							
								 
						
							
								ae4a4148ba 
								
							 
						 
						
							
							
								
								When creating a ConstantRange for [n,UINT_MAX], special case n == 0, because  
							
							... 
							
							
							
							ConstantRange(0, 0) creates an empty range rather than a full one.
llvm-svn: 100993 
							
						 
						
							2010-04-11 22:12:18 +00:00  
				
					
						
							
							
								 
						
							
								b50349a979 
								
							 
						 
						
							
							
								
								Rename isLoopGuardedByCond to isLoopEntryGuardedByCond, to emphasise  
							
							... 
							
							
							
							that it's only testing for the entry condition, not full loop-invariant
conditions.
llvm-svn: 100979 
							
						 
						
							2010-04-11 19:27:13 +00:00  
				
					
						
							
							
								 
						
							
								4ce1fb1448 
								
							 
						 
						
							
							
								
								Add variants of ult, ule, etc. which take a uint64_t RHS, for convenience.  
							
							... 
							
							
							
							llvm-svn: 100824 
							
						 
						
							2010-04-08 23:03:40 +00:00  
				
					
						
							
							
								 
						
							
								883105485b 
								
							 
						 
						
							
							
								
								Revert this change from a while ago; ScalarEvolution shouldn't analyze  
							
							... 
							
							
							
							undef as 0, since it can't force other analyses to intepret the undef
in the same way.
llvm-svn: 100749 
							
						 
						
							2010-04-08 05:58:24 +00:00  
				
					
						
							
							
								 
						
							
								01c65a2622 
								
							 
						 
						
							
							
								
								Define placement new wrappers for BumpPtrAllocator and  
							
							... 
							
							
							
							RecyclingAllocator to allow client code to be simpler, and
simplify several clients.
llvm-svn: 98847 
							
						 
						
							2010-03-18 18:49:47 +00:00  
				
					
						
							
							
								 
						
							
								6556c8962c 
								
							 
						 
						
							
							
								
								Add the ability to "intern" FoldingSetNodeID data into a  
							
							... 
							
							
							
							BumpPtrAllocator-allocated region to allow it to be stored in a more
compact form and to avoid the need for a non-trivial destructor call.
Use this new mechanism in ScalarEvolution instead of
FastFoldingSetNode to avoid leaking memory in the case where a
FoldingSetNodeID uses heap storage, and to reduce overall memory
usage.
llvm-svn: 98829 
							
						 
						
							2010-03-18 16:16:38 +00:00  
				
					
						
							
							
								 
						
							
								0052449e1a 
								
							 
						 
						
							
							
								
								Reapply r98755 with a thinko which miscompiled gengtype fixed.  
							
							... 
							
							
							
							llvm-svn: 98793 
							
						 
						
							2010-03-18 01:17:13 +00:00  
				
					
						
							
							
								 
						
							
								d2abecaeea 
								
							 
						 
						
							
							
								
								Revert 98755, which may be causing trouble.  
							
							... 
							
							
							
							llvm-svn: 98762 
							
						 
						
							2010-03-17 19:54:53 +00:00  
				
					
						
							
							
								 
						
							
								5c9b0e1a6e 
								
							 
						 
						
							
							
								
								Change SCEVNAryExpr's operand array from a SmallVector to a plain  
							
							... 
							
							
							
							pointer and length, and allocate the arrays in ScalarEvolution's
BumpPtrAllocator, so that they get released when their owning
SCEV gets released. SCEVs are immutable, so they don't need to worry
about operand array resizing. This fixes a memory leak reported
in PR6637.
llvm-svn: 98755 
							
						 
						
							2010-03-17 18:51:01 +00:00  
				
					
						
							
							
								 
						
							
								69451a0950 
								
							 
						 
						
							
							
								
								Avoid analyzing instructions in blocks not reachable from the entry block.  
							
							... 
							
							
							
							They are lots of trouble, and they don't matter. This fixes PR6559.
llvm-svn: 98103 
							
						 
						
							2010-03-09 23:46:50 +00:00  
				
					
						
							
							
								 
						
							
								8b0a419eb1 
								
							 
						 
						
							
							
								
								Spelling fixes.  
							
							... 
							
							
							
							llvm-svn: 97453 
							
						 
						
							2010-03-01 17:49:51 +00:00  
				
					
						
							
							
								 
						
							
								a9c205cc88 
								
							 
						 
						
							
							
								
								Make LoopSimplify change conditional branches in loop exiting blocks  
							
							... 
							
							
							
							which branch on undef to branch on a boolean constant for the edge
exiting the loop. This helps ScalarEvolution compute trip counts for
loops.
Teach ScalarEvolution to recognize single-value PHIs, when safe, and
ForgetSymbolicName to forget such single-value PHI nodes as apprpriate
in ForgetSymbolicName.
llvm-svn: 97126 
							
						 
						
							2010-02-25 06:57:05 +00:00  
				
					
						
							
							
								 
						
							
								4aad750333 
								
							 
						 
						
							
							
								
								ConstantFoldInstOperands can theoretically return null if it  
							
							... 
							
							
							
							didn't fold anything.
llvm-svn: 97049 
							
						 
						
							2010-02-24 19:31:47 +00:00  
				
					
						
							
							
								 
						
							
								007f5041a2 
								
							 
						 
						
							
							
								
								Simplify this code; these casts aren't necessary.  
							
							... 
							
							
							
							llvm-svn: 97048 
							
						 
						
							2010-02-24 19:31:06 +00:00  
				
					
						
							
							
								 
						
							
								ba820344e3 
								
							 
						 
						
							
							
								
								Convert a few more backedge-taken count functions to use BackedgeTakenInfo.  
							
							... 
							
							
							
							llvm-svn: 97042 
							
						 
						
							2010-02-24 17:31:30 +00:00  
				
					
						
							
							
								 
						
							
								8c16b38262 
								
							 
						 
						
							
							
								
								Remove unused variables and parameters.  
							
							... 
							
							
							
							llvm-svn: 96780 
							
						 
						
							2010-02-22 04:11:59 +00:00  
				
					
						
							
							
								 
						
							
								cf9c64e6e3 
								
							 
						 
						
							
							
								
								Add a comment.  
							
							... 
							
							
							
							llvm-svn: 96688 
							
						 
						
							2010-02-19 18:49:22 +00:00  
				
					
						
							
							
								 
						
							
								6b1e2a829d 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution how to compute a tripcount for a loop with  
							
							... 
							
							
							
							true or false as its exit condition. These are usually eliminated by
SimplifyCFG, but the may be left around during a pass which wishes
to preserve the CFG.
llvm-svn: 96683 
							
						 
						
							2010-02-19 18:12:07 +00:00  
				
					
						
							
							
								 
						
							
								1d6827adef 
								
							 
						 
						
							
							
								
								recommit 96626, evidence that it broke things appears  
							
							... 
							
							
							
							to be spurious
llvm-svn: 96662 
							
						 
						
							2010-02-19 07:14:22 +00:00  
				
					
						
							
							
								 
						
							
								1f790c28d0 
								
							 
						 
						
							
							
								
								Revert 96626, which causes build failure on ppc Darwin.  
							
							... 
							
							
							
							llvm-svn: 96653 
							
						 
						
							2010-02-19 01:54:37 +00:00  
				
					
						
							
							
								 
						
							
								60b3326435 
								
							 
						 
						
							
							
								
								Indvars needs to explicitly notify ScalarEvolution when it is replacing  
							
							... 
							
							
							
							a loop exit value, so that if a loop gets deleted, ScalarEvolution
isn't stick holding on to dangling SCEVAddRecExprs for that loop. This
fixes PR6339.
llvm-svn: 96626 
							
						 
						
							2010-02-18 23:26:33 +00:00  
				
					
						
							
							
								 
						
							
								19d0b47b1f 
								
							 
						 
						
							
							
								
								There are two ways of checking for a given type, for example isa<PointerType>(T)  
							
							... 
							
							
							
							and T->isPointerTy().  Convert most instances of the first form to the second form.
Requested by Chris.
llvm-svn: 96344 
							
						 
						
							2010-02-16 11:11:14 +00:00  
				
					
						
							
							
								 
						
							
								9dff9bec31 
								
							 
						 
						
							
							
								
								Uniformize the names of type predicates: rather than having isFloatTy and  
							
							... 
							
							
							
							isInteger, we now have isFloatTy and isIntegerTy.  Requested by Chris!
llvm-svn: 96223 
							
						 
						
							2010-02-15 16:12:20 +00:00  
				
					
						
							
							
								 
						
							
								fefbff9cd8 
								
							 
						 
						
							
							
								
								When testing whether a given SCEV depends on a temporary symbolic  
							
							... 
							
							
							
							name, test whether the SCEV itself is that temporary symbolic name,
in addition to checking whether the symbolic name appears as a
possibly-indirect operand.
llvm-svn: 96216 
							
						 
						
							2010-02-15 10:28:37 +00:00  
				
					
						
							
							
								 
						
							
								fe873e7c10 
								
							 
						 
						
							
							
								
								Override dominates and properlyDominates for SCEVAddRecExpr, as a  
							
							... 
							
							
							
							SCEVAddRecExpr doesn't necessarily dominate blocks merely dominated
by all of its operands. This fixes an abort compiling 403.gcc.
llvm-svn: 96056 
							
						 
						
							2010-02-13 00:19:39 +00:00  
				
					
						
							
							
								 
						
							
								4a618827de 
								
							 
						 
						
							
							
								
								Fix "the the" and similar typos.  
							
							... 
							
							
							
							llvm-svn: 95781 
							
						 
						
							2010-02-10 16:03:48 +00:00  
				
					
						
							
							
								 
						
							
								9946b5109c 
								
							 
						 
						
							
							
								
								Change the argument to getIntegerSCEV to be an int64_t, rather  
							
							... 
							
							
							
							than int. This will make it more convenient for LSR, which does
a lot of things with int64_t offsets.
llvm-svn: 95281 
							
						 
						
							2010-02-04 02:43:51 +00:00  
				
					
						
							
							
								 
						
							
								7e5f1b2773 
								
							 
						 
						
							
							
								
								Various code simplifications.  
							
							... 
							
							
							
							llvm-svn: 95044 
							
						 
						
							2010-02-02 01:38:49 +00:00  
				
					
						
							
							
								 
						
							
								e5e1b7b05a 
								
							 
						 
						
							
							
								
								Generalize target-independent folding rules for sizeof to handle more  
							
							... 
							
							
							
							cases, and implement target-independent folding rules for alignof and
offsetof. Also, reassociate reassociative operators when it leads to
more folding.
Generalize ScalarEvolution's isOffsetOf to recognize offsetof on
arrays. Rename getAllocSizeExpr to getSizeOfExpr, and getFieldOffsetExpr
to getOffsetOfExpr, for consistency with analagous ConstantExpr routines.
Make the target-dependent folder promote GEP array indices to
pointer-sized integers, to make implicit casting explicit and exposed
to subsequent folding.
And add a bunch of testcases for this new functionality, and a bunch
of related existing functionality.
llvm-svn: 94987 
							
						 
						
							2010-02-01 18:27:38 +00:00  
				
					
						
							
							
								 
						
							
								cf9138307d 
								
							 
						 
						
							
							
								
								Remove SCEVAllocSizeExpr and SCEVFieldOffsetExpr, and in their place  
							
							... 
							
							
							
							use plain SCEVUnknowns with ConstantExpr::getSizeOf and
ConstantExpr::getOffsetOf constants. This eliminates a bunch of
special-case code.
Also add code for pattern-matching these expressions, for clients that
want to recognize them.
Move ScalarEvolution's logic for expanding array and vector sizeof
expressions into an element count times the element size, to expose
the multiplication to subsequent folding, into the regular constant
folder.
llvm-svn: 94737 
							
						 
						
							2010-01-28 02:15:55 +00:00  
				
					
						
							
							
								 
						
							
								85be4333ad 
								
							 
						 
						
							
							
								
								Make the unsigned-range code more consistent with the signed-range code,  
							
							... 
							
							
							
							and clean up some loose ends.
llvm-svn: 94572 
							
						 
						
							2010-01-26 19:19:05 +00:00  
				
					
						
							
							
								 
						
							
								a01418d75a 
								
							 
						 
						
							
							
								
								Fix a typo in a comment that Duncan noticed.  
							
							... 
							
							
							
							llvm-svn: 94562 
							
						 
						
							2010-01-26 18:32:54 +00:00  
				
					
						
							
							
								 
						
							
								fdb744b203 
								
							 
						 
						
							
							
								
								Rename ItCount to BECount, since it holds a backedge-taken count rather  
							
							... 
							
							
							
							than an iteration count.
llvm-svn: 94549 
							
						 
						
							2010-01-26 16:46:18 +00:00  
				
					
						
							
							
								 
						
							
								51aaf02821 
								
							 
						 
						
							
							
								
								Fix the the ceiling-division used in computing the MaxBECount so that it doesn't  
							
							... 
							
							
							
							have trouble with an intermediate add overflowing. Also, be more conservative
about the case where the induction variable in an SLT loop exit can step past
the RHS of the SLT and overflow in a single step.
Make getSignedRange more aggressive, to recover for some common cases which
the above fixes pessimized.
This addresses rdar://7561161.
llvm-svn: 94512 
							
						 
						
							2010-01-26 04:40:18 +00:00  
				
					
						
							
							
								 
						
							
								51ad99d2c5 
								
							 
						 
						
							
							
								
								Re-implement the main strength-reduction portion of LoopStrengthReduction.  
							
							... 
							
							
							
							This new version is much more aggressive about doing "full" reduction in
cases where it reduces register pressure, and also more aggressive about
rewriting induction variables to count down (or up) to zero when doing so
reduces register pressure.
It currently uses fairly simplistic algorithms for finding reuse
opportunities, but it introduces a new framework allows it to combine
multiple strategies at once to form hybrid solutions, instead of doing
all full-reduction or all base+index.
llvm-svn: 94061 
							
						 
						
							2010-01-21 02:09:26 +00:00  
				
					
						
							
							
								 
						
							
								8d67d2f5f8 
								
							 
						 
						
							
							
								
								Add a comment and tidy up some whitespace.  
							
							... 
							
							
							
							llvm-svn: 93932 
							
						 
						
							2010-01-19 22:27:22 +00:00  
				
					
						
							
							
								 
						
							
								f86d904b7d 
								
							 
						 
						
							
							
								
								Give ScalarEvolution access to the DominatorTree. It'll need this  
							
							... 
							
							
							
							to make more intellegent AddRec folding decisions.
llvm-svn: 93930 
							
						 
						
							2010-01-19 22:21:27 +00:00  
				
					
						
							
							
								 
						
							
								bc694918cc 
								
							 
						 
						
							
							
								
								Use WriteAsOperand instead of getName() to print loop header names,  
							
							... 
							
							
							
							so that unnamed blocks are handled.
llvm-svn: 93059 
							
						 
						
							2010-01-09 18:17:45 +00:00  
				
					
						
							
							
								 
						
							
								2330f78075 
								
							 
						 
						
							
							
								
								Remove dump routine and the associated Debug.h from a header.  Patch up  
							
							... 
							
							
							
							other files to compensate.
llvm-svn: 92075 
							
						 
						
							2009-12-23 22:58:38 +00:00  
				
					
						
							
							
								 
						
							
								df1c497c2f 
								
							 
						 
						
							
							
								
								Convert debug messages to use dbgs().  Generally this means  
							
							... 
							
							
							
							s/errs/dbgs/g except for certain special cases.
llvm-svn: 92067 
							
						 
						
							2009-12-23 22:18:14 +00:00  
				
					
						
							
							
								 
						
							
								876f45d7d2 
								
							 
						 
						
							
							
								
								Fix a spello in a comment that Nick spotted.  
							
							... 
							
							
							
							llvm-svn: 91742 
							
						 
						
							2009-12-19 01:46:34 +00:00  
				
					
						
							
							
								 
						
							
								7db230f5c9 
								
							 
						 
						
							
							
								
								Make this comment more precise.  
							
							... 
							
							
							
							llvm-svn: 91722 
							
						 
						
							2009-12-18 23:18:03 +00:00  
				
					
						
							
							
								 
						
							
								51f13056bd 
								
							 
						 
						
							
							
								
								Revert this use of NUW/NSW also. Overflow-undefined multiplication isn't  
							
							... 
							
							
							
							associative either.
llvm-svn: 91701 
							
						 
						
							2009-12-18 18:45:31 +00:00  
				
					
						
							
							
								 
						
							
								7a2dab8826 
								
							 
						 
						
							
							
								
								Revert this use of NSW; this one isn't actually safe. NSW addition  
							
							... 
							
							
							
							is not reassociative.
llvm-svn: 91667 
							
						 
						
							2009-12-18 03:57:04 +00:00  
				
					
						
							
							
								 
						
							
								916fec41fb 
								
							 
						 
						
							
							
								
								Delete an unused variable.  
							
							... 
							
							
							
							llvm-svn: 91659 
							
						 
						
							2009-12-18 02:14:37 +00:00  
				
					
						
							
							
								 
						
							
								b256ccfbe5 
								
							 
						 
						
							
							
								
								Preserve NSW information in more places.  
							
							... 
							
							
							
							llvm-svn: 91656 
							
						 
						
							2009-12-18 02:09:29 +00:00  
				
					
						
							
							
								 
						
							
								18fa5686f6 
								
							 
						 
						
							
							
								
								Add Loop contains utility methods for testing whether a loop  
							
							... 
							
							
							
							contains another loop, or an instruction. The loop form is
substantially more efficient on large loops than the typical
code it replaces.
llvm-svn: 91654 
							
						 
						
							2009-12-18 01:24:09 +00:00  
				
					
						
							
							
								 
						
							
								cb0efecd33 
								
							 
						 
						
							
							
								
								Whitespace cleanups.  
							
							... 
							
							
							
							llvm-svn: 91651 
							
						 
						
							2009-12-18 01:14:11 +00:00  
				
					
						
							
							
								 
						
							
								4e3b3f3d92 
								
							 
						 
						
							
							
								
								Remove dead LLVMContext argument.  
							
							... 
							
							
							
							llvm-svn: 89641 
							
						 
						
							2009-11-23 03:26:09 +00:00  
				
					
						
							
							
								 
						
							
								2ac504729b 
								
							 
						 
						
							
							
								
								Pass the (optional) TargetData object to ConstantFoldInstOperands  
							
							... 
							
							
							
							and ConstantFoldCompareInstOperands.
llvm-svn: 86626 
							
						 
						
							2009-11-09 23:34:17 +00:00  
				
					
						
							
							
								 
						
							
								cdfb80de16 
								
							 
						 
						
							
							
								
								fix ConstantFoldCompareInstOperands to take the LHS/RHS as  
							
							... 
							
							
							
							individual operands instead of taking a temporary array
llvm-svn: 86619 
							
						 
						
							2009-11-09 23:06:58 +00:00  
				
					
						
							
							
								 
						
							
								46b5c642b9 
								
							 
						 
						
							
							
								
								remove a bunch of extraneous LLVMContext arguments  
							
							... 
							
							
							
							from various APIs, addressing PR5325.
llvm-svn: 86231 
							
						 
						
							2009-11-06 04:27:31 +00:00  
				
					
						
							
							
								 
						
							
								291f6145b8 
								
							 
						 
						
							
							
								
								Reverting 85714, 85715, 85716, which are breaking the build  
							
							... 
							
							
							
							llvm-svn: 85717 
							
						 
						
							2009-11-01 16:42:53 +00:00  
				
					
						
							
							
								 
						
							
								2b12b95d5d 
								
							 
						 
						
							
							
								
								Add a function to Passes.h to allow clients to create instances  
							
							... 
							
							
							
							of the ScalarEvolution pass without needing to #include ScalarEvolution.h.
llvm-svn: 85716 
							
						 
						
							2009-11-01 15:28:36 +00:00  
				
					
						
							
							
								 
						
							
								880c92ac1c 
								
							 
						 
						
							
							
								
								Rename forgetLoopBackedgeTakenCount to forgetLoop, because it  
							
							... 
							
							
							
							clears out more information than just the stored backedge taken count.
llvm-svn: 85664 
							
						 
						
							2009-10-31 15:04:55 +00:00  
				
					
						
							
							
								 
						
							
								974e12b2d3 
								
							 
						 
						
							
							
								
								Remove includes of Support/Compiler.h that are no longer needed after the  
							
							... 
							
							
							
							VISIBILITY_HIDDEN removal.
llvm-svn: 85043 
							
						 
						
							2009-10-25 06:57:41 +00:00  
				
					
						
							
							
								 
						
							
								02d5f77d26 
								
							 
						 
						
							
							
								
								Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces.  
							
							... 
							
							
							
							Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042 
							
						 
						
							2009-10-25 06:33:48 +00:00  
				
					
						
							
							
								 
						
							
								dc4893abfe 
								
							 
						 
						
							
							
								
								Revert r83606 and add comments explaining why it isn't safe.  
							
							... 
							
							
							
							llvm-svn: 83649 
							
						 
						
							2009-10-09 16:35:06 +00:00  
				
					
						
							
							
								 
						
							
								d65387a49f 
								
							 
						 
						
							
							
								
								Preserve HasNSW and HasNUW when constructing SCEVs for Add and Mul  
							
							... 
							
							
							
							instructions.
llvm-svn: 83606 
							
						 
						
							2009-10-09 00:41:22 +00:00  
				
					
						
							
							
								 
						
							
								816fe0a4aa 
								
							 
						 
						
							
							
								
								Add the ability to track HasNSW and HasNUW on more kinds of SCEV expressions.  
							
							... 
							
							
							
							llvm-svn: 83601 
							
						 
						
							2009-10-09 00:10:36 +00:00  
				
					
						
							
							
								 
						
							
								f39a3a9288 
								
							 
						 
						
							
							
								
								Add a properlyDominates member function to ScalarEvolution.  
							
							... 
							
							
							
							llvm-svn: 82898 
							
						 
						
							2009-09-27 15:26:03 +00:00  
				
					
						
							
							
								 
						
							
								36bad00bef 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution how to reason about no-wrap flags on loops  
							
							... 
							
							
							
							where the induction variable has a non-unit stride, such as {0,+,2}, and
there are expressions such as {1,+,2} inside the loop formed with
or or add nsw operators.
llvm-svn: 82151 
							
						 
						
							2009-09-17 18:05:20 +00:00  
				
					
						
							
							
								 
						
							
								237d9e5213 
								
							 
						 
						
							
							
								
								Remove references to expression "handles", which are no longer used.  
							
							... 
							
							
							
							llvm-svn: 80918 
							
						 
						
							2009-09-03 15:00:26 +00:00  
				
					
						
							
							
								 
						
							
								dba696afc0 
								
							 
						 
						
							
							
								
								Don't use an iterator which is potentially invalidated.  
							
							... 
							
							
							
							llvm-svn: 80632 
							
						 
						
							2009-08-31 21:58:28 +00:00  
				
					
						
							
							
								 
						
							
								cc2f1eb7fe 
								
							 
						 
						
							
							
								
								Extend the ValuesAtScope cache to cover all expressions, not just  
							
							... 
							
							
							
							SCEVUnknowns, as the non-SCEVUnknown cases in the getSCEVAtScope code
can also end up repeatedly climing through the same expression trees,
which can be unusably slow when the trees are very tall.
Also, add a quick check for SCEV pointer equality to the main
SCEV comparison routine, as the full comparison code can be expensive
in the case of large expression trees.
These fix compile-time problems in some pathlogical cases.
llvm-svn: 80623 
							
						 
						
							2009-08-31 21:15:23 +00:00  
				
					
						
							
							
								 
						
							
								2d0855605a 
								
							 
						 
						
							
							
								
								Don't assume that two identical instructions that read from memory  
							
							... 
							
							
							
							will always return the same value. This isn't currently necessary,
since this code doesn't currently ever get called under circumstances
where it would matter, but it may some day.
llvm-svn: 80017 
							
						 
						
							2009-08-25 17:56:57 +00:00  
				
					
						
							
							
								 
						
							
								f161e06e78 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution about GlobalAliases.  
							
							... 
							
							
							
							llvm-svn: 80014 
							
						 
						
							2009-08-25 17:49:57 +00:00  
				
					
						
							
							
								 
						
							
								13d62b60bd 
								
							 
						 
						
							
							
								
								remove a few dead insertion methods.  
							
							... 
							
							
							
							llvm-svn: 79882 
							
						 
						
							2009-08-24 02:39:26 +00:00  
				
					
						
							
							
								 
						
							
								1362602eb2 
								
							 
						 
						
							
							
								
								Change Pass::print to take a raw ostream instead of std::ostream,  
							
							... 
							
							
							
							update all code that this affects.
llvm-svn: 79830 
							
						 
						
							2009-08-23 06:03:38 +00:00  
				
					
						
							
							
								 
						
							
								16f5415f5b 
								
							 
						 
						
							
							
								
								Rename hasNoUnsignedOverflow and hasNoSignedOverflow to hasNoUnsignedWrap  
							
							... 
							
							
							
							and hasNoSignedWrap, for consistency with the nuw and nsw properties.
llvm-svn: 79539 
							
						 
						
							2009-08-20 17:11:38 +00:00  
				
					
						
							
							
								 
						
							
								8a8ad7d8e8 
								
							 
						 
						
							
							
								
								Various comment and whitespace cleanups.  
							
							... 
							
							
							
							llvm-svn: 79533 
							
						 
						
							2009-08-20 16:42:55 +00:00  
				
					
						
							
							
								 
						
							
								5d5bc6d000 
								
							 
						 
						
							
							
								
								Use hasDefinitiveInitializer() instead of testing the same thing  
							
							... 
							
							
							
							by hand, and fix a few places that were using hasInitializer() that
appear to depend on the initializer value.
llvm-svn: 79441 
							
						 
						
							2009-08-19 18:20:44 +00:00  
				
					
						
							
							
								 
						
							
								bf2a9aedca 
								
							 
						 
						
							
							
								
								Generalize ScalarEvolution to be able to analyze GEPs when  
							
							... 
							
							
							
							TargetData is not present. It still uses TargetData when available.
This generalization also fixed some limitations in the TargetData
case; the attached testcase covers this.
llvm-svn: 79344 
							
						 
						
							2009-08-18 16:46:41 +00:00  
				
					
						
							
							
								 
						
							
								55f1c09e31 
								
							 
						 
						
							
							
								
								Push LLVMContexts through the IntegerType APIs.  
							
							... 
							
							
							
							llvm-svn: 78948 
							
						 
						
							2009-08-13 21:58:54 +00:00  
				
					
						
							
							
								 
						
							
								7a5c8db6b5 
								
							 
						 
						
							
							
								
								Fix copy-pasto.  
							
							... 
							
							
							
							llvm-svn: 78426 
							
						 
						
							2009-08-07 22:55:26 +00:00  
				
					
						
							
							
								 
						
							
								5a1acd9912 
								
							 
						 
						
							
							
								
								Move a few more APIs back to 2.5 forms.  The only remaining ones left to change back are  
							
							... 
							
							
							
							metadata related, which I'm waiting on to avoid conflicting with Devang.
llvm-svn: 77721 
							
						 
						
							2009-07-31 20:28:14 +00:00  
				
					
						
							
							
								 
						
							
								4056ca9568 
								
							 
						 
						
							
							
								
								Move types back to the 2.5 API.  
							
							... 
							
							
							
							llvm-svn: 77516 
							
						 
						
							2009-07-29 22:17:13 +00:00  
				
					
						
							
							
								 
						
							
								487375e9a2 
								
							 
						 
						
							
							
								
								Move ConstantExpr to 2.5 API.  
							
							... 
							
							
							
							llvm-svn: 77494 
							
						 
						
							2009-07-29 18:55:55 +00:00  
				
					
						
							
							
								 
						
							
								169ef138e8 
								
							 
						 
						
							
							
								
								Fix wording in comments.  
							
							... 
							
							
							
							llvm-svn: 77193 
							
						 
						
							2009-07-27 16:09:48 +00:00  
				
					
						
							
							
								 
						
							
								ef2ae2c8ee 
								
							 
						 
						
							
							
								
								SCEV objects are no longer reference-counted.  
							
							... 
							
							
							
							llvm-svn: 77080 
							
						 
						
							2009-07-25 16:18:07 +00:00  
				
					
						
							
							
								 
						
							
								534d66a426 
								
							 
						 
						
							
							
								
								When attempting to sign-extend an addrec by interpreting  
							
							... 
							
							
							
							the step value as unsigned, the start value and the addrec
itself still need to be treated as signed.
llvm-svn: 77078 
							
						 
						
							2009-07-25 16:03:30 +00:00  
				
					
						
							
							
								 
						
							
								62ef6a7f1c 
								
							 
						 
						
							
							
								
								Teach ScalarEvolution to make use of no-overflow flags when  
							
							... 
							
							
							
							analyzing add recurrences.
llvm-svn: 77034 
							
						 
						
							2009-07-25 01:22:26 +00:00  
				
					
						
							
							
								 
						
							
								0b89dff37d 
								
							 
						 
						
							
							
								
								Instead of eagerly creating new SCEVs to replace all SCEVs that are  
							
							... 
							
							
							
							affected after a PHI node has been analyzed, just remove affected
SCEVs from the Scalars map, so that they'll be (lazily) recreated as
needed. This avoids creating SCEV objects that aren't actually needed.
Also, rewrite the associated def-use walking code to be non-recursive
and to continue traversing past Instructions that don't have an
entry in the Scalars map.
llvm-svn: 77032 
							
						 
						
							2009-07-25 01:13:03 +00:00  
				
					
						
							
							
								 
						
							
								edb4a70325 
								
							 
						 
						
							
							
								
								Revert the ConstantInt constructors back to their 2.5 forms where possible, thanks to contexts-on-types.  More to come.  
							
							... 
							
							
							
							llvm-svn: 77011 
							
						 
						
							2009-07-24 23:12:02 +00:00  
				
					
						
							
							
								 
						
							
								5ece69a47c 
								
							 
						 
						
							
							
								
								Fix whitespace.  
							
							... 
							
							
							
							llvm-svn: 76929 
							
						 
						
							2009-07-24 01:03:59 +00:00  
				
					
						
							
							
								 
						
							
								47db941fd3 
								
							 
						 
						
							
							
								
								Get rid of the Pass+Context magic.  
							
							... 
							
							
							
							llvm-svn: 76702 
							
						 
						
							2009-07-22 00:24:57 +00:00  
				
					
						
							
							
								 
						
							
								430f0cc544 
								
							 
						 
						
							
							
								
								Replace the original ad-hoc code for determining whether (v pred w) implies  
							
							... 
							
							
							
							(x pred y) with more thorough code that does more complete canonicalization
before resorting to range checks. This helps it find more cases where
the canonicalized expressions match.
llvm-svn: 76671 
							
						 
						
							2009-07-21 23:03:19 +00:00  
				
					
						
							
							
								 
						
							
								75dced058a 
								
							 
						 
						
							
							
								
								Make the range calculations for addrecs to be more conservative,  
							
							... 
							
							
							
							as they aren't currently prepared to handle complicated overflow
cases.
llvm-svn: 76524 
							
						 
						
							2009-07-21 00:42:47 +00:00  
				
					
						
							
							
								 
						
							
								32291b1afc 
								
							 
						 
						
							
							
								
								Whitespace cleanups.  
							
							... 
							
							
							
							llvm-svn: 76523 
							
						 
						
							2009-07-21 00:38:55 +00:00  
				
					
						
							
							
								 
						
							
								d571c37b54 
								
							 
						 
						
							
							
								
								Minor code simplification.  
							
							... 
							
							
							
							llvm-svn: 76521 
							
						 
						
							2009-07-21 00:37:45 +00:00  
				
					
						
							
							
								 
						
							
								3439262586 
								
							 
						 
						
							
							
								
								Add a comment to clarify why there isn't any code in this spot.  
							
							... 
							
							
							
							llvm-svn: 76505 
							
						 
						
							2009-07-20 23:54:43 +00:00  
				
					
						
							
							
								 
						
							
								00c1aaec5a 
								
							 
						 
						
							
							
								
								Remove the code that tried to evaluate whether (A pred B) is known  
							
							... 
							
							
							
							by determining if (B pred (B-A)) is known, as it doesn't handle
overflow correctly.
llvm-svn: 76504 
							
						 
						
							2009-07-20 23:53:35 +00:00  
				
					
						
							
							
								 
						
							
								d231d78f3f 
								
							 
						 
						
							
							
								
								Minor code simplification.  
							
							... 
							
							
							
							llvm-svn: 76496 
							
						 
						
							2009-07-20 22:41:51 +00:00  
				
					
						
							
							
								 
						
							
								1a7ab9473f 
								
							 
						 
						
							
							
								
								The upper argument of ConstantRange is exclusive, not inclusive.  
							
							... 
							
							
							
							llvm-svn: 76492 
							
						 
						
							2009-07-20 22:34:18 +00:00  
				
					
						
							
							
								 
						
							
								33a3fd0b9c 
								
							 
						 
						
							
							
								
								Revert the addition of hasNoPointerOverflow to GEPOperator.  
							
							... 
							
							
							
							Getelementptrs that are defined to wrap are virtually useless to
optimization, and getelementptrs that are undefined on any kind
of overflow are too restrictive -- it's difficult to ensure that
all intermediate addresses are within bounds. I'm going to take
a different approach.
Remove a few optimizations that depended on this flag.
llvm-svn: 76437 
							
						 
						
							2009-07-20 17:43:30 +00:00  
				
					
						
							
							
								 
						
							
								80ca01c466 
								
							 
						 
						
							
							
								
								Add a new Operator class, for handling Instructions and ConstantExprs  
							
							... 
							
							
							
							in a convenient manner, factoring out some common code from
InstructionCombining and ValueTracking. Move the contents of
BinaryOperators.h into Operator.h and use Operator to generalize them
to support ConstantExprs as well as Instructions.
llvm-svn: 76232 
							
						 
						
							2009-07-17 20:47:02 +00:00