f8d22fc77d 
								
							 
						 
						
							
							
								
								Metadata.h doesn't need to include ValueHandle.h anymore.  
							
							... 
							
							
							
							llvm-svn: 92211 
							
						 
						
							2009-12-28 08:20:46 +00:00  
				
					
						
							
							
								 
						
							
								6d6f10fe91 
								
							 
						 
						
							
							
								
								fix PR5698  
							
							... 
							
							
							
							llvm-svn: 90708 
							
						 
						
							2009-12-06 17:17:23 +00:00  
				
					
						
							
							
								 
						
							
								3c9aca9079 
								
							 
						 
						
							
							
								
								fix PR5640 by tracking whether a block is the header of a loop more  
							
							... 
							
							
							
							precisely, which prevents us from infinitely peeling the loop.
llvm-svn: 90211 
							
						 
						
							2009-12-01 06:04:43 +00:00  
				
					
						
							
							
								 
						
							
								9d9812a636 
								
							 
						 
						
							
							
								
								make PRE of loads preserve the alignment of the moved load instruction.  
							
							... 
							
							
							
							llvm-svn: 88865 
							
						 
						
							2009-11-15 19:58:31 +00:00  
				
					
						
							
							
								 
						
							
								5f037b6439 
								
							 
						 
						
							
							
								
								fix a bug handling 'not x' when x is undef.  
							
							... 
							
							
							
							llvm-svn: 88864 
							
						 
						
							2009-11-15 19:57:43 +00:00  
				
					
						
							
							
								 
						
							
								5f6b8b2bcb 
								
							 
						 
						
							
							
								
								use getPredicateOnEdge to fold comparisons through PHI nodes,  
							
							... 
							
							
							
							which implements GCC PR18046.  This also gets us 360 more
jump threads on 176.gcc.
llvm-svn: 86953 
							
						 
						
							2009-11-12 05:24:05 +00:00  
				
					
						
							
							
								 
						
							
								22db4b5e0c 
								
							 
						 
						
							
							
								
								various fixes to the lattice transfer functions.  
							
							... 
							
							
							
							llvm-svn: 86952 
							
						 
						
							2009-11-12 04:57:13 +00:00  
				
					
						
							
							
								 
						
							
								c893c4ed10 
								
							 
						 
						
							
							
								
								switch jump threading to use getPredicateOnEdge in one place  
							
							... 
							
							
							
							making the new LVI stuff smart enough to subsume some special
cases in the old code.  Disable them when LVI is around, the
testcase still passes.
llvm-svn: 86951 
							
						 
						
							2009-11-12 04:37:50 +00:00  
				
					
						
							
							
								 
						
							
								ba45616958 
								
							 
						 
						
							
							
								
								with the new code we can thread non-instruction values.  This  
							
							... 
							
							
							
							allows us to handle the test10 testcase.
llvm-svn: 86924 
							
						 
						
							2009-11-12 01:41:34 +00:00  
				
					
						
							
							
								 
						
							
								3f80d85191 
								
							 
						 
						
							
							
								
								this argument can be an arbitrary value, it doesn't need to be an instruction.  
							
							... 
							
							
							
							llvm-svn: 86923 
							
						 
						
							2009-11-12 01:37:43 +00:00  
				
					
						
							
							
								 
						
							
								d5e25436a1 
								
							 
						 
						
							
							
								
								expose edge information and switch j-t to use it.  
							
							... 
							
							
							
							llvm-svn: 86920 
							
						 
						
							2009-11-12 01:29:10 +00:00  
				
					
						
							
							
								 
						
							
								67146695b6 
								
							 
						 
						
							
							
								
								pass TD into a SimplifyCmpInst call.  Add another case that  
							
							... 
							
							
							
							uses LVI info when -enable-jump-threading-lvi is passed.
llvm-svn: 86886 
							
						 
						
							2009-11-11 22:31:38 +00:00  
				
					
						
							
							
								 
						
							
								fde1f8d0d8 
								
							 
						 
						
							
							
								
								stub out some LazyValueInfo interfaces, and have JumpThreading  
							
							... 
							
							
							
							start using them in a trivial way when -enable-jump-threading-lvi
is passed.  enable-jump-threading-lvi will be my playground for 
awhile.
llvm-svn: 86789 
							
						 
						
							2009-11-11 02:08:33 +00:00  
				
					
						
							
							
								 
						
							
								3a2ae908fe 
								
							 
						 
						
							
							
								
								add a fixme  
							
							... 
							
							
							
							llvm-svn: 86766 
							
						 
						
							2009-11-11 00:21:58 +00:00  
				
					
						
							
							
								 
						
							
								9518fbb54e 
								
							 
						 
						
							
							
								
								implement a TODO by teaching jump threading about "xor x, 1".  
							
							... 
							
							
							
							llvm-svn: 86739 
							
						 
						
							2009-11-10 22:39:16 +00:00  
				
					
						
							
							
								 
						
							
								852d6d64ff 
								
							 
						 
						
							
							
								
								move some generally useful functions out of jump threading  
							
							... 
							
							
							
							into libanalysis and transformutils.
llvm-svn: 86735 
							
						 
						
							2009-11-10 22:26:15 +00:00  
				
					
						
							
							
								 
						
							
								40b15f220d 
								
							 
						 
						
							
							
								
								improve comment.  
							
							... 
							
							
							
							llvm-svn: 86723 
							
						 
						
							2009-11-10 21:45:09 +00:00  
				
					
						
							
							
								 
						
							
								80e7e5a429 
								
							 
						 
						
							
							
								
								Make jump threading eliminate blocks that just contain phi nodes,  
							
							... 
							
							
							
							debug intrinsics, and an unconditional branch when possible.  This
reuses the TryToSimplifyUncondBranchFromEmptyBlock function split
out of simplifycfg.
llvm-svn: 86722 
							
						 
						
							2009-11-10 21:40:01 +00:00  
				
					
						
							
							
								 
						
							
								38c44ea6b0 
								
							 
						 
						
							
							
								
								make jump threading recursively simplify expressions instead of doing it  
							
							... 
							
							
							
							just one level deep.  On the testcase we go from getting this:
F1:                                               ; preds = %T2
  %F = and i1 true, %cond                         ; <i1> [#uses=1]
  br i1 %F, label %X, label %Y
to a fully threaded:
F1:                                               ; preds = %T2
  br label %Y
This changes gets us to the point where we're forming (too many) switch 
instructions on doug's strswitch testcase.
llvm-svn: 86646 
							
						 
						
							2009-11-10 01:57:31 +00:00  
				
					
						
							
							
								 
						
							
								be11db6894 
								
							 
						 
						
							
							
								
								don't invalidate PN, rewrite of this code is in progress anyway.  
							
							... 
							
							
							
							llvm-svn: 86639 
							
						 
						
							2009-11-10 01:19:06 +00:00  
				
					
						
							
							
								 
						
							
								fb7f87d5a3 
								
							 
						 
						
							
							
								
								add a new SimplifyInstruction API, which is like ConstantFoldInstruction,  
							
							... 
							
							
							
							except that the result may not be a constant.  Switch jump threading to 
use it so that it gets things like (X & 0) -> 0, which occur when phi preds
are deleted and the remaining phi pred was a zero.
llvm-svn: 86637 
							
						 
						
							2009-11-10 01:08:51 +00:00  
				
					
						
							
							
								 
						
							
								c1f19071f8 
								
							 
						 
						
							
							
								
								rename SimplifyCompare -> SimplifyCmpInst and split it into  
							
							... 
							
							
							
							Simplify[IF]Cmp pieces.  Add some predicates to CmpInst to 
determine whether a predicate is fp or int.
llvm-svn: 86624 
							
						 
						
							2009-11-09 23:28:39 +00:00  
				
					
						
							
							
								 
						
							
								800aad3dda 
								
							 
						 
						
							
							
								
								use instructionsimplify instead of a weak clone of ad-hoc folding stuff.  
							
							... 
							
							
							
							llvm-svn: 86616 
							
						 
						
							2009-11-09 23:00:14 +00:00  
				
					
						
							
							
								 
						
							
								2978ca7b79 
								
							 
						 
						
							
							
								
								stub out a new form of BasicBlock::RemovePredecessorAndSimplify which  
							
							... 
							
							
							
							simplifies instruction users of PHIs when the phi is eliminated.  This
will be moved to transforms/utils after some other refactoring.
llvm-svn: 86603 
							
						 
						
							2009-11-09 22:32:36 +00:00  
				
					
						
							
							
								 
						
							
								ea465e221e 
								
							 
						 
						
							
							
								
								comment typos pointed out by Duncan  
							
							... 
							
							
							
							llvm-svn: 86497 
							
						 
						
							2009-11-09 00:41:49 +00:00  
				
					
						
							
							
								 
						
							
								5ff7f5672e 
								
							 
						 
						
							
							
								
								reapply 86289, 86278, 86270, 86267, 86266 & 86264 plus a fix  
							
							... 
							
							
							
							(making pred factoring only happen if threading is guaranteed
to be successful).
This now survives an X86-64 bootstrap of llvm-gcc.
llvm-svn: 86355 
							
						 
						
							2009-11-07 08:05:03 +00:00  
				
					
						
							
							
								 
						
							
								3a42e7ac65 
								
							 
						 
						
							
							
								
								Revert following patches to fix llvmgcc bootstrap.  
							
							... 
							
							
							
							86289, 86278, 86270, 86267, 86266 & 86264
Chris, please take a look.
llvm-svn: 86321 
							
						 
						
							2009-11-07 01:32:59 +00:00  
				
					
						
							
							
								 
						
							
								8f77e948e5 
								
							 
						 
						
							
							
								
								Avoid "ambiguous 'else'" warning from gcc.  
							
							... 
							
							
							
							llvm-svn: 86314 
							
						 
						
							2009-11-07 00:26:47 +00:00  
				
					
						
							
							
								 
						
							
								eb690feaef 
								
							 
						 
						
							
							
								
								Fix a bug where we'd call SplitBlockPredecessors with a pred in the  
							
							... 
							
							
							
							set only once even if it has multiple edges to BB.
llvm-svn: 86299 
							
						 
						
							2009-11-06 23:19:58 +00:00  
				
					
						
							
							
								 
						
							
								a70917b2f4 
								
							 
						 
						
							
							
								
								Remove function left over from other jump threading cleanup.  
							
							... 
							
							
							
							llvm-svn: 86289 
							
						 
						
							2009-11-06 21:24:57 +00:00  
				
					
						
							
							
								 
						
							
								a8b9ce3f07 
								
							 
						 
						
							
							
								
								Fix a problem discovered on self host.  
							
							... 
							
							
							
							llvm-svn: 86278 
							
						 
						
							2009-11-06 19:21:48 +00:00  
				
					
						
							
							
								 
						
							
								d91a7960bf 
								
							 
						 
						
							
							
								
								remove more code subsumed by r86264  
							
							... 
							
							
							
							llvm-svn: 86270 
							
						 
						
							2009-11-06 18:24:32 +00:00  
				
					
						
							
							
								 
						
							
								899ef22acb 
								
							 
						 
						
							
							
								
								eliminate some more code subsumed by r86264  
							
							... 
							
							
							
							llvm-svn: 86267 
							
						 
						
							2009-11-06 18:22:54 +00:00  
				
					
						
							
							
								 
						
							
								2f6184f6aa 
								
							 
						 
						
							
							
								
								remove now redundant code, r86264 handles this case.  
							
							... 
							
							
							
							llvm-svn: 86266 
							
						 
						
							2009-11-06 18:20:58 +00:00  
				
					
						
							
							
								 
						
							
								68d2417e05 
								
							 
						 
						
							
							
								
								Extend jump threading to support much more general threading  
							
							... 
							
							
							
							predicates.  This allows us to jump thread things like:
_ZN12StringSwitchI5ColorE4CaseILj7EEERS1_RAT__KcRKS0_.exit119:
  %tmp1.i24166 = phi i8 [ 1, %bb5.i117 ], [ %tmp1.i24165, %_Z....exit ], [ %tmp1.i24165, %bb4.i114 ] 
  %toBoolnot.i87 = icmp eq i8 %tmp1.i24166, 0     ; <i1> [#uses=1]
  %tmp4.i90 = icmp eq i32 %tmp2.i, 6              ; <i1> [#uses=1]
  %or.cond173 = and i1 %toBoolnot.i87, %tmp4.i90  ; <i1> [#uses=1]
  br i1 %or.cond173, label %bb4.i96, label %_ZN12...
Where it is "obvious" that when coming from %bb5.i117 that the 'and' is always 
false.  This triggers a surprisingly high number of times in the testsuite, 
and gets us closer to generating good code for doug's strswitch testcase.
This also make a bunch of other code in jump threading redundant, I'll rip
out in the next patch.  This survived an enable-checking llvm-gcc bootstrap.
llvm-svn: 86264 
							
						 
						
							2009-11-06 18:15:14 +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  
				
					
						
							
							
								 
						
							
								a09062758b 
								
							 
						 
						
							
							
								
								improve DSE when TargetData is not around, based on work by  
							
							... 
							
							
							
							Hans Wennborg!
llvm-svn: 86067 
							
						 
						
							2009-11-04 23:20:12 +00:00  
				
					
						
							
							
								 
						
							
								85c85c5e04 
								
							 
						 
						
							
							
								
								when folding duplicate conditions, delete the  
							
							... 
							
							
							
							now-probably-dead instruction tree feeding it.
llvm-svn: 83778 
							
						 
						
							2009-10-11 18:39:58 +00:00  
				
					
						
							
							
								 
						
							
								97b1405207 
								
							 
						 
						
							
							
								
								implement a transformation in jump threading that is currently  
							
							... 
							
							
							
							done by condprop, but do it in a much more general form.  The
basic idea is that we can do a limited form of tail duplication
in the case when we have a branch on a phi.  Moving the branch
up in to the predecessor block makes instruction selection
much easier and encourages chained jump threadings.
llvm-svn: 83759 
							
						 
						
							2009-10-11 07:24:57 +00:00  
				
					
						
							
							
								 
						
							
								6ce85e85f5 
								
							 
						 
						
							
							
								
								restructure some code, no functionality change.  
							
							... 
							
							
							
							llvm-svn: 83756 
							
						 
						
							2009-10-11 04:40:21 +00:00  
				
					
						
							
							
								 
						
							
								f466bc84c9 
								
							 
						 
						
							
							
								
								factor some code better and move a function, no functionality change.  
							
							... 
							
							
							
							llvm-svn: 83755 
							
						 
						
							2009-10-11 04:33:43 +00:00  
				
					
						
							
							
								 
						
							
								f99a74e24b 
								
							 
						 
						
							
							
								
								make jump threading on a phi with undef inputs happen.  
							
							... 
							
							
							
							llvm-svn: 83754 
							
						 
						
							2009-10-11 04:18:15 +00:00  
				
					
						
							
							
								 
						
							
								84095071ea 
								
							 
						 
						
							
							
								
								Change jump threading to use the new SSAUpdater class instead of  
							
							... 
							
							
							
							DemoteRegToStack.  This makes it more efficient (because it isn't
creating a ton of load/stores that are eventually removed by a later
mem2reg), and more slightly more effective (because those load/stores
don't get in the way of threading).
llvm-svn: 83706 
							
						 
						
							2009-10-10 09:05:58 +00:00  
				
					
						
							
							
								 
						
							
								42fb7452df 
								
							 
						 
						
							
							
								
								Instruction::clone does not need to take an LLVMContext&. Remove that and  
							
							... 
							
							
							
							update all the callers.
llvm-svn: 82889 
							
						 
						
							2009-09-27 07:38:41 +00:00  
				
					
						
							
							
								 
						
							
								2dd09dbdf7 
								
							 
						 
						
							
							
								
								eliminate VISIBILITY_HIDDEN from Transforms/Scalar.  PR4861  
							
							... 
							
							
							
							llvm-svn: 80766 
							
						 
						
							2009-09-02 06:11:42 +00:00  
				
					
						
							
							
								 
						
							
								55f1c09e31 
								
							 
						 
						
							
							
								
								Push LLVMContexts through the IntegerType APIs.  
							
							... 
							
							
							
							llvm-svn: 78948 
							
						 
						
							2009-08-13 21:58:54 +00:00  
				
					
						
							
							
								 
						
							
								23a204d91b 
								
							 
						 
						
							
							
								
								Move getTrue() and getFalse() to 2.5-like APIs.  
							
							... 
							
							
							
							llvm-svn: 77685 
							
						 
						
							2009-07-31 17:39:07 +00:00  
				
					
						
							
							
								 
						
							
								b292b8ce70 
								
							 
						 
						
							
							
								
								Move more code back to 2.5 APIs.  
							
							... 
							
							
							
							llvm-svn: 77635 
							
						 
						
							2009-07-30 23:03:37 +00:00  
				
					
						
							
							
								 
						
							
								487375e9a2 
								
							 
						 
						
							
							
								
								Move ConstantExpr to 2.5 API.  
							
							... 
							
							
							
							llvm-svn: 77494 
							
						 
						
							2009-07-29 18:55:55 +00:00  
				
					
						
							
							
								 
						
							
								6115b39ffd 
								
							 
						 
						
							
							
								
								Remove Value::getName{Start,End}, the last of the old Name APIs.  
							
							... 
							
							
							
							llvm-svn: 77152 
							
						 
						
							2009-07-26 09:48:23 +00:00  
				
					
						
							
							
								 
						
							
								9813b0b025 
								
							 
						 
						
							
							
								
								Eliminate some uses of DOUT, cerr, and getNameStart().  
							
							... 
							
							
							
							llvm-svn: 77145 
							
						 
						
							2009-07-26 07:49:05 +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  
				
					
						
							
							
								 
						
							
								67243a4bec 
								
							 
						 
						
							
							
								
								Convert several more passes to use getAnalysisIfAvailable<TargetData>()  
							
							... 
							
							
							
							instead of getAnalysis<TargetData>().
llvm-svn: 76982 
							
						 
						
							2009-07-24 18:13:53 +00:00  
				
					
						
							
							
								 
						
							
								47db941fd3 
								
							 
						 
						
							
							
								
								Get rid of the Pass+Context magic.  
							
							... 
							
							
							
							llvm-svn: 76702 
							
						 
						
							2009-07-22 00:24:57 +00:00  
				
					
						
							
							
								 
						
							
								c37bc69e91 
								
							 
						 
						
							
							
								
								Rename getConstantInt{True|False} to get{True|False} at Chris' behest.  
							
							... 
							
							
							
							llvm-svn: 76598 
							
						 
						
							2009-07-21 18:03:38 +00:00  
				
					
						
							
							
								 
						
							
								4fdeba9706 
								
							 
						 
						
							
							
								
								Revert yesterday's change by removing the LLVMContext parameter to AllocaInst and MallocInst.  
							
							... 
							
							
							
							llvm-svn: 75863 
							
						 
						
							2009-07-15 23:53:25 +00:00  
				
					
						
							
							
								 
						
							
								b6b2530000 
								
							 
						 
						
							
							
								
								Move EVER MORE stuff over to LLVMContext.  
							
							... 
							
							
							
							llvm-svn: 75703 
							
						 
						
							2009-07-14 23:09:55 +00:00  
				
					
						
							
							
								 
						
							
								1e5f00e7a7 
								
							 
						 
						
							
							
								
								This started as a small change, I swear.  Unfortunately, lots of things call the [I|F]CmpInst constructors.  Who knew!?  
							
							... 
							
							
							
							llvm-svn: 75200 
							
						 
						
							2009-07-09 23:48:35 +00:00  
				
					
						
							
							
								 
						
							
								38264b1554 
								
							 
						 
						
							
							
								
								"LLVMContext* " --> "LLVMContext *"  
							
							... 
							
							
							
							llvm-svn: 74878 
							
						 
						
							2009-07-06 23:00:19 +00:00  
				
					
						
							
							
								 
						
							
								39f00cc1d4 
								
							 
						 
						
							
							
								
								Thread LLVMContext through the constant folding APIs, which touches a lot of files.  
							
							... 
							
							
							
							llvm-svn: 74844 
							
						 
						
							2009-07-06 18:42:36 +00:00  
				
					
						
							
							
								 
						
							
								80baed63b4 
								
							 
						 
						
							
							
								
								Second batch of passes using LLVMContext.  
							
							... 
							
							
							
							llvm-svn: 74753 
							
						 
						
							2009-07-03 00:54:20 +00:00  
				
					
						
							
							
								 
						
							
								f3f6aaa2c3 
								
							 
						 
						
							
							
								
								fix inverted logic pointed out by John McCall, noticed by inspection.  
							
							... 
							
							
							
							This was considering vector intrinsics to have cost 2, but non-vector
intrinsics to have cost 1, which is backward.
llvm-svn: 74698 
							
						 
						
							2009-07-02 15:39:39 +00:00  
				
					
						
							
							
								 
						
							
								43f33dd550 
								
							 
						 
						
							
							
								
								Fix a bunch of other places that used operator[] to test whether  
							
							... 
							
							
							
							a key is present in a std::map or DenseMap to use find instead.
llvm-svn: 74676 
							
						 
						
							2009-07-02 00:17:47 +00:00  
				
					
						
							
							
								 
						
							
								d0a363e03b 
								
							 
						 
						
							
							
								
								make jump threading handle lexically identical compare instructions  
							
							... 
							
							
							
							as if they were multiple uses of the same instruction.  This interacts
well with the existing loadpre that j-t does to open up many new jump
threads earlier.
llvm-svn: 73768 
							
						 
						
							2009-06-19 16:27:56 +00:00  
				
					
						
							
							
								 
						
							
								77585a24ac 
								
							 
						 
						
							
							
								
								Teach jump threading to look at comparisons between phi nodes and non-constants.  
							
							... 
							
							
							
							llvm-svn: 73755 
							
						 
						
							2009-06-19 04:56:29 +00:00  
				
					
						
							
							
								 
						
							
								fa552d728d 
								
							 
						 
						
							
							
								
								fix some problems spotted by Duncan and Nicolas Geoffray  
							
							... 
							
							
							
							llvm-svn: 70872 
							
						 
						
							2009-05-04 16:29:24 +00:00  
				
					
						
							
							
								 
						
							
								d579cb1167 
								
							 
						 
						
							
							
								
								* Sink 4 duplicates of edge threading validity checks and DOUT prints into  
							
							... 
							
							
							
							ThreadEdge directly.  This shares the code, but is just a refactoring.
* Make JumpThreading compute the set of loop headers and avoid threading
  across them.  This prevents jump threading from forming irreducible 
  loops (goodness) but also prevents it from threading in other cases that
  are beneficial (see the comment above FindFunctionBackedges).
llvm-svn: 70820 
							
						 
						
							2009-05-04 02:28:08 +00:00  
				
					
						
							
							
								 
						
							
								87077356be 
								
							 
						 
						
							
							
								
								Fix a debug info dependency in jump threading.  
							
							... 
							
							
							
							llvm-svn: 67064 
							
						 
						
							2009-03-17 00:38:24 +00:00  
				
					
						
							
							
								 
						
							
								e6d1e8d0cc 
								
							 
						 
						
							
							
								
								this wasn't intended to go in.  
							
							... 
							
							
							
							llvm-svn: 66252 
							
						 
						
							2009-03-06 05:42:30 +00:00  
				
					
						
							
							
								 
						
							
								e3fc2d13be 
								
							 
						 
						
							
							
								
								Change various llvm utilities to use PrettyStackTraceProgram in  
							
							... 
							
							
							
							their main routines.  This makes the tools print their argc/argv
commands if they crash.
llvm-svn: 66248 
							
						 
						
							2009-03-06 05:34:10 +00:00  
				
					
						
							
							
								 
						
							
								6f34e317e9 
								
							 
						 
						
							
							
								
								Fix PR3353, infinitely jump threading an infinite loop make from switches.  
							
							... 
							
							
							
							llvm-svn: 62529 
							
						 
						
							2009-01-19 21:20:34 +00:00  
				
					
						
							
							
								 
						
							
								482eb70a10 
								
							 
						 
						
							
							
								
								Fix PR3298, a crash in Jump Threading.  Apparently even  
							
							... 
							
							
							
							jump threading can have bugs, who knew? ;-)
llvm-svn: 61983 
							
						 
						
							2009-01-09 06:08:12 +00:00  
				
					
						
							
							
								 
						
							
								e598370ae9 
								
							 
						 
						
							
							
								
								remove DebugIterations option.  Despite the accusations,  
							
							... 
							
							
							
							jump threading has been shown to only expose problems not
have bugs itself.  I'm sure it's completely bug free! ;-)
llvm-svn: 60725 
							
						 
						
							2008-12-08 22:44:07 +00:00  
				
					
						
							
							
								 
						
							
								8f723670ce 
								
							 
						 
						
							
							
								
								Start simplifying a switch that has a successor that is a switch.  
							
							... 
							
							
							
							llvm-svn: 60534 
							
						 
						
							2008-12-04 06:31:07 +00:00  
				
					
						
							
							
								 
						
							
								75c2661d24 
								
							 
						 
						
							
							
								
								add a debugging option to help track down j-t problems.  
							
							... 
							
							
							
							llvm-svn: 60514 
							
						 
						
							2008-12-04 00:07:59 +00:00  
				
					
						
							
							
								 
						
							
								595c7279bd 
								
							 
						 
						
							
							
								
								Teach jump threading some more simple tricks:  
							
							... 
							
							
							
							1) have it fold "br undef", which does occur with
   surprising frequency as jump threading iterates.
2) teach j-t to delete dead blocks.  This removes the successor
   edges, reducing the in-edges of other blocks, allowing 
   recursive simplification.
3) Fold things like:
     br COND, BBX, BBY
  BBX:
     br COND, BBZ, BBW
   which also happens because jump threading iterates.
llvm-svn: 60470 
							
						 
						
							2008-12-03 07:48:08 +00:00  
				
					
						
							
							
								 
						
							
								2b07d3ccde 
								
							 
						 
						
							
							
								
								switch a couple more calls to use array_pod_sort.  
							
							... 
							
							
							
							llvm-svn: 60337 
							
						 
						
							2008-12-01 06:52:57 +00:00  
				
					
						
							
							
								 
						
							
								88a1f0213d 
								
							 
						 
						
							
							
								
								Teach jump threading to clean up after itself, DCE and constfolding the  
							
							... 
							
							
							
							new instructions it simplifies.  Because we're threading jumps on edges
with constants coming in from PHI's, we inherently are exposing a lot more
constants to the new block.  Folding them and deleting dead conditions
allows the cost model in jump threading to be more accurate as it iterates.
llvm-svn: 60327 
							
						 
						
							2008-12-01 04:48:07 +00:00  
				
					
						
							
							
								 
						
							
								8a172daa55 
								
							 
						 
						
							
							
								
								don't call MergeBasicBlockIntoOnlyPred on a block whose only  
							
							... 
							
							
							
							predecessor is itself.  This doesn't make sense, and this is
a dead infinite loop anyway.
llvm-svn: 60210 
							
						 
						
							2008-11-28 19:54:49 +00:00  
				
					
						
							
							
								 
						
							
								5dfbfcd80d 
								
							 
						 
						
							
							
								
								Fix PR3138: if we merge the entry block into another block, make sure to  
							
							... 
							
							
							
							move the other block back up into the entry position!
llvm-svn: 60179 
							
						 
						
							2008-11-27 19:25:19 +00:00  
				
					
						
							
							
								 
						
							
								72f16e70f0 
								
							 
						 
						
							
							
								
								move FindAvailableLoadedValue from JumpThreading to Transforms/Utils.  
							
							... 
							
							
							
							llvm-svn: 60166 
							
						 
						
							2008-11-27 08:10:05 +00:00  
				
					
						
							
							
								 
						
							
								99d6809ac1 
								
							 
						 
						
							
							
								
								move MergeBasicBlockIntoOnlyPred to Transforms/Utils.  
							
							... 
							
							
							
							llvm-svn: 60162 
							
						 
						
							2008-11-27 07:43:12 +00:00  
				
					
						
							
							
								 
						
							
								240051aace 
								
							 
						 
						
							
							
								
								rename ThreadBlock to ProcessBlock, since it does other things than  
							
							... 
							
							
							
							just simple threading.
llvm-svn: 60157 
							
						 
						
							2008-11-27 07:20:04 +00:00  
				
					
						
							
							
								 
						
							
								98d89d1b1b 
								
							 
						 
						
							
							
								
								Make jump threading substantially more powerful, in the following ways:  
							
							... 
							
							
							
							1. Make it fold blocks separated by an unconditional branch.  This enables
   jump threading to see a broader scope.
2. Make jump threading able to eliminate locally redundant loads when they
   feed the branch condition of a block.  This frequently occurs due to
   reg2mem running.
3. Make jump threading able to eliminate *partially redundant* loads when
   they feed the branch condition of a block.  This is common in code with
   lots of loads and stores like C++ code and 255.vortex.
This implements thread-loads.ll and rdar://6402033.
Per the fixme's, several pieces of this should be moved into Transforms/Utils.
llvm-svn: 60148 
							
						 
						
							2008-11-27 05:07:53 +00:00  
				
					
						
							
							
								 
						
							
								a79db30d28 
								
							 
						 
						
							
							
								
								Tidy up several unbeseeming casts from pointer to intptr_t.  
							
							... 
							
							
							
							llvm-svn: 55779 
							
						 
						
							2008-09-04 17:05:41 +00:00  
				
					
						
							
							
								 
						
							
								fa1211f69b 
								
							 
						 
						
							
							
								
								Enable first-class aggregates support.  
							
							... 
							
							
							
							Remove the GetResultInst instruction. It is still accepted in LLVM assembly
and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove
support for return instructions with multiple values. These are auto-upgraded
to use InsertValueInst instructions.
The IRBuilder still accepts multiple-value returns, and auto-upgrades them
to InsertValueInst instructions.
llvm-svn: 53941 
							
						 
						
							2008-07-23 00:34:11 +00:00  
				
					
						
							
							
								 
						
							
								698348dfac 
								
							 
						 
						
							
							
								
								Fix some constructs that gcc-4.4 warns about.  
							
							... 
							
							
							
							llvm-svn: 51591 
							
						 
						
							2008-05-27 11:50:51 +00:00  
				
					
						
							
							
								 
						
							
								f96e1371e8 
								
							 
						 
						
							
							
								
								Tidy up BasicBlock::getFirstNonPHI, and change a bunch of places to  
							
							... 
							
							
							
							use it instead of duplicating its functionality.
llvm-svn: 51499 
							
						 
						
							2008-05-23 21:05:58 +00:00  
				
					
						
							
							
								 
						
							
								5148a4ba66 
								
							 
						 
						
							
							
								
								Fix typo.  
							
							... 
							
							
							
							llvm-svn: 51303 
							
						 
						
							2008-05-20 07:26:45 +00:00  
				
					
						
							
							
								 
						
							
								d78c400b5b 
								
							 
						 
						
							
							
								
								Clean up the use of static and anonymous namespaces. This turned up  
							
							... 
							
							
							
							several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017 
							
						 
						
							2008-05-13 00:00:25 +00:00  
				
					
						
							
							
								 
						
							
								e7f0afe168 
								
							 
						 
						
							
							
								
								restore doxygen comment.  
							
							... 
							
							
							
							llvm-svn: 50881 
							
						 
						
							2008-05-09 04:43:13 +00:00  
				
					
						
							
							
								 
						
							
								829046b0b4 
								
							 
						 
						
							
							
								
								Improve pass documentation and comments.  
							
							... 
							
							
							
							Patch by Matthijs Kooijman!
llvm-svn: 50861 
							
						 
						
							2008-05-08 17:46:35 +00:00  
				
					
						
							
							
								 
						
							
								de68fabb35 
								
							 
						 
						
							
							
								
								fix typo Duncan noticed  
							
							... 
							
							
							
							llvm-svn: 50699 
							
						 
						
							2008-05-06 02:31:18 +00:00  
				
					
						
							
							
								 
						
							
								8ed8e3d0e6 
								
							 
						 
						
							
							
								
								Fix a crash when threading a block that includes a MRV call result.  
							
							... 
							
							
							
							DemoteRegToStack doesn't work with MRVs yet, because it relies on the
ability to load/store things.
This fixes PR2285.
llvm-svn: 50667 
							
						 
						
							2008-05-05 20:21:22 +00:00  
				
					
						
							
							
								 
						
							
								f7de528463 
								
							 
						 
						
							
							
								
								Don't infininitely thread branches when a threaded edge  
							
							... 
							
							
							
							goes back to the block, e.g.:
  Threading edge through bool from 'bb37.us.thread3829' to 'bb37.us' with cost: 1, across block:
bb37.us:		; preds = %bb37.us.thread3829, %bb37.us, %bb33
	%D1361.1.us = phi i32 [ %tmp36, %bb33 ], [ %D1361.1.us, %bb37.us ], [ 0, %bb37.us.thread3829 ]		; <i32> [#uses=2]
	%tmp39.us = icmp eq i32 %D1361.1.us, 0		; <i1> [#uses=1]
	br i1 %tmp39.us, label %bb37.us, label %bb42.us
llvm-svn: 50251 
							
						 
						
							2008-04-25 04:12:29 +00:00  
				
					
						
							
							
								 
						
							
								37e9c187b0 
								
							 
						 
						
							
							
								
								Start doing the significantly useful part of jump threading: handle cases  
							
							... 
							
							
							
							where a comparison has a phi input and that phi is a constant.  For example,
stuff like:
  Threading edge through bool from 'bb2149' to 'bb2231' with cost: 1, across block:
bb2237:		; preds = %bb2231, %bb2149
	%tmp2328.rle = phi i32 [ %tmp2232, %bb2231 ], [ %tmp2232439, %bb2149 ]		; <i32> [#uses=2]
	%done.0 = phi i32 [ %done.2, %bb2231 ], [ 0, %bb2149 ]		; <i32> [#uses=1]
	%tmp2239 = icmp eq i32 %done.0, 0		; <i1> [#uses=1]
	br i1 %tmp2239, label %bb2231, label %bb2327
or
bb38.i298:		; preds = %bb33.i295, %bb1693
	%tmp39.i296.rle = phi %struct.ibox* [ null, %bb1693 ], [ %tmp39.i296.rle1109, %bb33.i295 ]		; <%struct.ibox*> [#uses=2]
	%minspan.1.i291.reg2mem.1 = phi i32 [ 32000, %bb1693 ], [ %minspan.0.i288, %bb33.i295 ]		; <i32> [#uses=1]
	%tmp40.i297 = icmp eq %struct.ibox* %tmp39.i296.rle, null		; <i1> [#uses=1]
	br i1 %tmp40.i297, label %implfeeds.exit311, label %bb43.i301
This triggers thousands of times in spec.
llvm-svn: 50110 
							
						 
						
							2008-04-22 21:40:39 +00:00  
				
					
						
							
							
								 
						
							
								d5425e8f8d 
								
							 
						 
						
							
							
								
								Dig through multiple levels of AND to thread jumps if needed.  
							
							... 
							
							
							
							llvm-svn: 50106 
							
						 
						
							2008-04-22 20:46:09 +00:00  
				
					
						
							
							
								 
						
							
								3df4c15dc7 
								
							 
						 
						
							
							
								
								Teach jump threading to thread through blocks like:  
							
							... 
							
							
							
							br (and X, phi(Y, Z, false)), label L1, label L2
This triggers once on 252.eon and 6 times on 176.gcc.  Blocks 
in question often look like this:
bb262:		; preds = %bb261, %bb248
	%iftmp.251.0 = phi i1 [ true, %bb261 ], [ false, %bb248 ]		; <i1> [#uses=4]
	%tmp270 = icmp eq %struct.rtx_def* %tmp.0.i, null		; <i1> [#uses=1]
	%bothcond = or i1 %iftmp.251.0, %tmp270		; <i1> [#uses=1]
	br i1 %bothcond, label %bb288, label %bb273
In this case, it is clear that it doesn't matter if tmp.0.i is null when coming from bb261.  When coming from bb248, it is all that matters.
Another random example:
check_asm_operands.exit:		; preds = %check_asm_operands.exit.thr_comm, %bb30.i, %bb12.i, %bb6.i413
	%tmp.0.i420 = phi i1 [ true, %bb6.i413 ], [ true, %bb12.i ], [ true, %bb30.i ], [ false, %check_asm_operands.exit.thr_comm ; <i1> [#uses=1]
	call void @llvm.stackrestore( i8* %savedstack ) nounwind 
	%tmp4389 = icmp eq i32 %added_sets_1.0, 0		; <i1> [#uses=1]
	%tmp4394 = icmp eq i32 %added_sets_2.0, 0		; <i1> [#uses=1]
	%bothcond80 = and i1 %tmp4389, %tmp4394		; <i1> [#uses=1]
	%bothcond81 = and i1 %bothcond80, %tmp.0.i420		; <i1> [#uses=1]
	br i1 %bothcond81, label %bb4398, label %bb4397
Here is the case from 252.eon:
bb290.i.i:		; preds = %bb23.i57.i.i, %bb8.i39.i.i, %bb100.i.i, %bb100.i.i, %bb85.i.i110
	%myEOF.1.i.i = phi i1 [ true, %bb100.i.i ], [ true, %bb100.i.i ], [ true, %bb85.i.i110 ], [ true, %bb8.i39.i.i ], [ false, %bb23.i57.i.i ]		; <i1> [#uses=2]
	%i.4.i.i = phi i32 [ %i.1.i.i, %bb85.i.i110 ], [ %i.0.i.i, %bb100.i.i ], [ %i.0.i.i, %bb100.i.i ], [ %i.3.i.i, %bb8.i39.i.i ], [ %i.3.i.i, %bb23.i57.i.i ]		; <i32> [#uses=3]
	%tmp292.i.i = load i8* %tmp16.i.i100, align 1		; <i8> [#uses=1]
	%tmp293.not.i.i = icmp ne i8 %tmp292.i.i, 0		; <i1> [#uses=1]
	%bothcond.i.i = and i1 %tmp293.not.i.i, %myEOF.1.i.i		; <i1> [#uses=1]
	br i1 %bothcond.i.i, label %bb202.i.i, label %bb301.i.i
  Factoring out 3 common predecessors.
On the path from any blocks other than bb23.i57.i.i, the load and compare 
are dead.
llvm-svn: 50096 
							
						 
						
							2008-04-22 07:05:46 +00:00  
				
					
						
							
							
								 
						
							
								e369c35a84 
								
							 
						 
						
							
							
								
								refactor some code, no functionality change.  
							
							... 
							
							
							
							llvm-svn: 50094 
							
						 
						
							2008-04-22 06:36:15 +00:00  
				
					
						
							
							
								 
						
							
								bab7bec9c8 
								
							 
						 
						
							
							
								
								fix grammar-o, thanks to Duncan for noticing.  
							
							... 
							
							
							
							llvm-svn: 50047 
							
						 
						
							2008-04-21 18:25:01 +00:00  
				
					
						
							
							
								 
						
							
								f6236cc2e9 
								
							 
						 
						
							
							
								
								Use the new SplitBlockPredecessors to implement a todo.  
							
							... 
							
							
							
							llvm-svn: 50022 
							
						 
						
							2008-04-21 02:57:57 +00:00  
				
					
						
							
							
								 
						
							
								ff1c6e388c 
								
							 
						 
						
							
							
								
								finish the first cut of a jump threading pass implementation.  
							
							... 
							
							
							
							llvm-svn: 50006 
							
						 
						
							2008-04-20 22:39:42 +00:00  
				
					
						
							
							
								 
						
							
								9c1f1a82bf 
								
							 
						 
						
							
							
								
								we can only thread blocks when there is a pred we can determine the succ of.  
							
							... 
							
							
							
							llvm-svn: 50003 
							
						 
						
							2008-04-20 21:18:09 +00:00  
				
					
						
							
							
								 
						
							
								2115722ffa 
								
							 
						 
						
							
							
								
								improve comments, infrastructure, and add some validity checks for threading.  
							
							... 
							
							
							
							Add a cost function.
llvm-svn: 50002 
							
						 
						
							2008-04-20 21:13:06 +00:00  
				
					
						
							
							
								 
						
							
								b3b6007c8b 
								
							 
						 
						
							
							
								
								Add a new Jump Threading pass, which will handle cases  
							
							... 
							
							
							
							such as those in PR2235.  Right now the pass is not very
effective. :)
llvm-svn: 50000 
							
						 
						
							2008-04-20 20:35:01 +00:00