Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f594ecc453 
								
							 
						 
						
							
							
								
								Add a new LargeBlockInfo helper, which is just a wrapper around  
							
							 
							
							... 
							
							
							
							a trivial dense map.  Use this in RewriteSingleStoreAlloca to
avoid aggressively rescanning blocks over and over again.  This
fixes PR2925, speeding up mem2reg on the testcase in that bug
from 4.56s to 0.02s in a debug build on my machine.
llvm-svn: 58227 
							
						 
						
							2008-10-27 06:05:26 +00:00  
						
					 
				
					
						
							
							
								 
								Gabor Greif
							
						 
						
							 
							
							
							
							
								
							
							
								e9ecc68d8f 
								
							 
						 
						
							
							
								
								API changes for class Use size reduction, wave 1.  
							
							 
							
							... 
							
							
							
							Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.
llvm-svn: 49277 
							
						 
						
							2008-04-06 20:25:17 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								7698bfbe16 
								
							 
						 
						
							
							
								
								Update -mem2reg to use succ_iterator instead of iterating across TerminatorInst  
							
							 
							
							... 
							
							
							
							successors. This makes it support nounwind.
llvm-svn: 48320 
							
						 
						
							2008-03-13 02:42:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a838141957 
								
							 
						 
						
							
							
								
								Make RenamePass faster by making the 'is this a new phi node'  
							
							 
							
							... 
							
							
							
							check more intelligent.  This speeds up mem2reg from 5.29s to 
0.79s on a synthetic testcase with tons of predecessors and
phi nodes.
llvm-svn: 46767 
							
						 
						
							2008-02-05 21:26:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f3ebc3f3d2 
								
							 
						 
						
							
							
								
								Remove attribution from file headers, per discussion on llvmdev.  
							
							 
							
							... 
							
							
							
							llvm-svn: 45418 
							
						 
						
							2007-12-29 20:36:04 +00:00  
						
					 
				
					
						
							
							
								 
								Gordon Henriksen
							
						 
						
							 
							
							
							
							
								
							
							
								d568767ecb 
								
							 
						 
						
							
							
								
								Finishing initial docs for all transformations in Passes.html.  
							
							 
							
							... 
							
							
							
							Also cleaned up some comments in source files.
llvm-svn: 43674 
							
						 
						
							2007-11-04 16:15:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0625bd6472 
								
							 
						 
						
							
							
								
								Merge DenseMapKeyInfo & DenseMapValueInfo into DenseMapInfo  
							
							 
							
							... 
							
							
							
							Add a new DenseMapInfo::isEqual method to allow clients to redefine
the equality predicate used when probing the hash table.
llvm-svn: 42042 
							
						 
						
							2007-09-17 18:34:04 +00:00  
						
					 
				
					
						
							
							
								 
								Anton Korobeynikov
							
						 
						
							 
							
							
							
							
								
							
							
								24fb6b2f8c 
								
							 
						 
						
							
							
								
								Don't promote volatile loads/stores. This is needed (for example) to handle setjmp/longjmp properly.  
							
							 
							
							... 
							
							
							
							This fixes PR1520.
llvm-svn: 41461 
							
						 
						
							2007-08-26 21:43:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								edce70d2fe 
								
							 
						 
						
							
							
								
								rewrite the code used to construct pruned SSA form with the IDF method.  
							
							 
							
							... 
							
							
							
							In the old way, we computed and inserted phi nodes for the whole IDF of 
the definitions of the alloca, then computed which ones were dead and
removed them.
In the new method, we first compute the region where the value is live,
and use that information to only insert phi nodes that are live.  This
eliminates the need to compute liveness later, and stops the algorithm
from inserting a bunch of phis which it then later removes.
This speeds up the testcase in PR1432 from 2.00s to 0.15s (14x) in a
release build and 6.84s->0.50s (14x) in a debug build.
llvm-svn: 40825 
							
						 
						
							2007-08-04 22:50:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d91576b01e 
								
							 
						 
						
							
							
								
								Factor out a whole bunch of code into it's own method.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40824 
							
						 
						
							2007-08-04 21:14:29 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4e1b4140eb 
								
							 
						 
						
							
							
								
								Use getNumPreds(BB) instead of computing them manually. This is a very small but  
							
							 
							
							... 
							
							
							
							measurable speedup.
llvm-svn: 40823 
							
						 
						
							2007-08-04 21:06:15 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b6a4ba808b 
								
							 
						 
						
							
							
								
								Change the rename pass to be "tail recursive", only adding N-1 successors  
							
							 
							
							... 
							
							
							
							to the worklist, and handling the last one with a 'tail call'.  This speeds
up PR1432 from 2.0578s to 2.0012s (2.8%)
llvm-svn: 40822 
							
						 
						
							2007-08-04 20:40:27 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								840259c8d3 
								
							 
						 
						
							
							
								
								cache computation of #preds for a BB.  This speeds up  
							
							 
							
							... 
							
							
							
							mem2reg from 2.0742->2.0522s on PR1432.
llvm-svn: 40821 
							
						 
						
							2007-08-04 20:24:50 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								050bac4bed 
								
							 
						 
						
							
							
								
								reserve operand space for phi nodes when we insert them.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40820 
							
						 
						
							2007-08-04 20:14:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9318785df5 
								
							 
						 
						
							
							
								
								use continue to avoid nesting, no functionality change.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40819 
							
						 
						
							2007-08-04 20:07:06 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								6b04ecbaf9 
								
							 
						 
						
							
							
								
								Promoting allocas with the 'single store' fastpath is  
							
							 
							
							... 
							
							
							
							faster than with the 'local to a block' fastpath.  This speeds
up PR1432 from 2.1232 to 2.0686s (2.6%)
llvm-svn: 40818 
							
						 
						
							2007-08-04 20:03:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4a930f9444 
								
							 
						 
						
							
							
								
								When PromoteLocallyUsedAllocas promoted allocas, it didn't remember  
							
							 
							
							... 
							
							
							
							to increment NumLocalPromoted, and didn't actually delete the
dead alloca, leading to an extra iteration of mem2reg.
llvm-svn: 40817 
							
						 
						
							2007-08-04 20:01:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								63c039780c 
								
							 
						 
						
							
							
								
								std::map -> DenseMap  
							
							 
							
							... 
							
							
							
							llvm-svn: 40816 
							
						 
						
							2007-08-04 19:52:20 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7d382f7680 
								
							 
						 
						
							
							
								
								fix a logic bug where we wouldn't promote single store allocas if the  
							
							 
							
							... 
							
							
							
							stored value was a non-instruction value.  Doh.
This increase the # single store allocas from 8982 to 9026, and
speeds up mem2reg on the testcase in PR1432 from 2.17 to 2.13s.
llvm-svn: 40813 
							
						 
						
							2007-08-04 02:45:02 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1b215f0661 
								
							 
						 
						
							
							
								
								When we do the single-store optimization, delete both the store  
							
							 
							
							... 
							
							
							
							and the alloca so they don't get reprocessed.
This speeds up PR1432 from 2.20s to 2.17s.
llvm-svn: 40812 
							
						 
						
							2007-08-04 02:38:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								862f125457 
								
							 
						 
						
							
							
								
								Three improvements:  
							
							 
							
							... 
							
							
							
							1. Check for revisiting a block before checking domination, which is faster.
  2. If the stored value isn't an instruction, we don't have to check for domination.
  3. If we have a value used in the same block more than once, make sure to remove the
     block from the UsingBlocks vector.  Not doing so forces us to go through the slow
     path for the alloca.
The combination of these improvements increases the number of allocas on the fastpath
from 8935 to 8982 on PR1432.  This speeds it up from 2.90s to 2.20s (31%)
llvm-svn: 40811 
							
						 
						
							2007-08-04 02:32:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ae1e00eb36 
								
							 
						 
						
							
							
								
								switch from using a std::set to using a SmallPtrSet.  This speeds up the  
							
							 
							
							... 
							
							
							
							testcase in PR1432 from 6.33s to 2.90s (2.22x)
llvm-svn: 40810 
							
						 
						
							2007-08-04 02:21:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9181801bb7 
								
							 
						 
						
							
							
								
								In mem2reg, when handling the single-store case, make sure to remove  
							
							 
							
							... 
							
							
							
							a using block from the list if we handle it.  Not doing this caused us
to not be able to promote (with the fast path) allocas which have uses (whoops).
This increases the # allocas hitting this fastpath from 4042 to 8935 on the
testcase in PR1432, speeding up mem2reg by 2.6x
llvm-svn: 40809 
							
						 
						
							2007-08-04 02:15:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								886a41a007 
								
							 
						 
						
							
							
								
								split rewriting of single-store allocas into its own  
							
							 
							
							... 
							
							
							
							method.
llvm-svn: 40806 
							
						 
						
							2007-08-04 01:47:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3cede09c67 
								
							 
						 
						
							
							
								
								refactor some code to shrink PromoteMem2Reg::run a bit  
							
							 
							
							... 
							
							
							
							llvm-svn: 40805 
							
						 
						
							2007-08-04 01:41:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d524537fe9 
								
							 
						 
						
							
							
								
								add a typedef, no other change.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40804 
							
						 
						
							2007-08-04 01:19:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								df138be527 
								
							 
						 
						
							
							
								
								avoid an unneeded vector copy.  This speeds up mem2reg on the testcase  
							
							 
							
							... 
							
							
							
							in PR1432 by 6%
llvm-svn: 40803 
							
						 
						
							2007-08-04 01:07:49 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fd838f0770 
								
							 
						 
						
							
							
								
								make RenamePassWorkList a local var instead of an ivar.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40802 
							
						 
						
							2007-08-04 01:04:40 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								fc7fdef7d2 
								
							 
						 
						
							
							
								
								Use DominatorTree instead of ETForest.  
							
							 
							
							... 
							
							
							
							This allows faster immediate domiantor walk.
llvm-svn: 37500 
							
						 
						
							2007-06-07 21:57:03 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								d3ccc073a2 
								
							 
						 
						
							
							
								
								Mem2Reg does not need TargetData.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36444 
							
						 
						
							2007-04-25 18:32:35 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								073be55d8e 
								
							 
						 
						
							
							
								
								Remove unused function argument.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36441 
							
						 
						
							2007-04-25 17:15:20 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								2965adb849 
								
							 
						 
						
							
							
								
								Fix a comment.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36299 
							
						 
						
							2007-04-21 07:12:44 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								2da606c757 
								
							 
						 
						
							
							
								
								Move more passes to using ETForest instead of DominatorTree.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36271 
							
						 
						
							2007-04-20 06:27:13 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								4398e242dd 
								
							 
						 
						
							
							
								
								Reduce malloc/free traffic.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35370 
							
						 
						
							2007-03-26 23:19:29 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								5f50e61d52 
								
							 
						 
						
							
							
								
								Remove dead comments.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35053 
							
						 
						
							2007-03-09 23:41:03 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								bda1250624 
								
							 
						 
						
							
							
								
								Avoid recursion. Use iterative algorithm for RenamePass().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35052 
							
						 
						
							2007-03-09 23:39:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								430c9217f0 
								
							 
						 
						
							
							
								
								redesign the primary datastructure used by mem2reg to eliminate an  
							
							 
							
							... 
							
							
							
							std::map of std::vector's (ouch!).  This speeds up mem2reg by 10% on 176.gcc.
llvm-svn: 33974 
							
						 
						
							2007-02-07 01:15:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c85e79f3e0 
								
							 
						 
						
							
							
								
								With the last change, we no longer need both directions of mapping from  
							
							 
							
							... 
							
							
							
							BBNumbers.  Instead of using a bi-directional mapping, just use a single
densemap.  This speeds up mem2reg on 176.gcc by 8%, from  1.3489 to
1.2485s.
llvm-svn: 33940 
							
						 
						
							2007-02-05 23:37:20 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								52da61fb5c 
								
							 
						 
						
							
							
								
								Simplify use of DFBlocks, this makes no noticable performance difference,  
							
							 
							
							... 
							
							
							
							but paves the way to eliminate BBNumbers.
llvm-svn: 33938 
							
						 
						
							2007-02-05 23:31:26 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bf67b1229b 
								
							 
						 
						
							
							
								
								Switch InsertedPHINodes back to SmallPtrSet now that the SmallPtrSet::erase  
							
							 
							
							... 
							
							
							
							bug is fixed.
llvm-svn: 33932 
							
						 
						
							2007-02-05 23:11:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								606dde0093 
								
							 
						 
						
							
							
								
								switch a SmallPtrSet back to an std::set for now, this caused problems.  
							
							 
							
							... 
							
							
							
							llvm-svn: 33930 
							
						 
						
							2007-02-05 22:28:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1ed84bbd2d 
								
							 
						 
						
							
							
								
								switch an std::set over to a SmallPtrSet, speeding up mem2reg 6% on 176.gcc.  
							
							 
							
							... 
							
							
							
							llvm-svn: 33929 
							
						 
						
							2007-02-05 22:15:21 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								70fbb9de4c 
								
							 
						 
						
							
							
								
								switch an std::set over to SmallPtrSet, speeding up mem2reg 3.4% on 176.gcc.  
							
							 
							
							... 
							
							
							
							llvm-svn: 33928 
							
						 
						
							2007-02-05 22:13:11 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8fbc888d91 
								
							 
						 
						
							
							
								
								eliminate some malloc traffic, this speeds up mem2reg by 3.4%.  
							
							 
							
							... 
							
							
							
							llvm-svn: 33927 
							
						 
						
							2007-02-05 21:58:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3d27be1333 
								
							 
						 
						
							
							
								
								s|llvm/Support/Visibility.h|llvm/Support/Compiler.h|  
							
							 
							
							... 
							
							
							
							llvm-svn: 29911 
							
						 
						
							2006-08-27 12:54:02 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								996795b0dd 
								
							 
						 
						
							
							
								
								Use hidden visibility to make symbols in an anonymous namespace get  
							
							 
							
							... 
							
							
							
							dropped.  This shrinks libllvmgcc.dylib another 67K
llvm-svn: 28975 
							
						 
						
							2006-06-28 23:17:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f98b4aa2e7 
								
							 
						 
						
							
							
								
								Fix some nondeterminstic behavior in the mem2reg pass that (in addition to  
							
							 
							
							... 
							
							
							
							nondeterminism being bad) could cause some trivial missed optimizations (dead
phi nodes being left around for later passes to clean up).
With this, llvm-gcc4 now bootstraps and correctly compares.  I don't know
why I never tried to do it before... :)
llvm-svn: 27984 
							
						 
						
							2006-04-27 01:14:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3e9e8bd25c 
								
							 
						 
						
							
							
								
								Implement a refinement to the mem2reg algorithm for cases where an alloca  
							
							 
							
							... 
							
							
							
							has a single def.  In this case, look for uses that are dominated by the def
and attempt to rewrite them to directly use the stored value.
This speeds up mem2reg on these values and reduces the number of phi nodes
inserted.  This should address PR665.
llvm-svn: 24411 
							
						 
						
							2005-11-18 07:31:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								31dc3827d3 
								
							 
						 
						
							
							
								
								This needs proper dominance  
							
							 
							
							... 
							
							
							
							llvm-svn: 24410 
							
						 
						
							2005-11-18 07:29:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								257efb2ad3 
								
							 
						 
						
							
							
								
								This code can handle non-dominating instructions  
							
							 
							
							... 
							
							
							
							llvm-svn: 22667 
							
						 
						
							2005-08-05 00:57:45 +00:00