53280cd26e 
								
							 
						 
						
							
							
								
								Improve comments a bit  
							
							... 
							
							
							
							Use an explicit LiveRange class to represent ranges instead of an std::pair.
This is a minor cleanup, but is really intended to make a future patch simpler
and less invasive.
Alkis, could you please take a look at LiveInterval::liveAt?  I suspect that
you can add an operator<(unsigned) to LiveRange, allowing us to speed up the
upper_bound call by quite a bit (this would also apply to other callers of
upper/lower_bound).  I would do it myself, but I still don't understand that
crazy liveAt function, despite the comment. :)
Basically I would like to see this:
    LiveRange dummy(index, index+1);
    Ranges::const_iterator r = std::upper_bound(ranges.begin(),
                                                ranges.end(),
                                                dummy);
Turn into:
    Ranges::const_iterator r = std::upper_bound(ranges.begin(),
                                                ranges.end(),
                                                index);
llvm-svn: 15130 
							
						 
						
							2004-07-23 08:24:23 +00:00  
				
					
						
							
							
								 
						
							
								2d75978bc6 
								
							 
						 
						
							
							
								
								Update live intervals more accurately for PHI elim.  This slightly reduces  
							
							... 
							
							
							
							the live intervals for some registers.
llvm-svn: 15125 
							
						 
						
							2004-07-23 05:27:43 +00:00  
				
					
						
							
							
								 
						
							
								b549420cd0 
								
							 
						 
						
							
							
								
								Force coallescing of live ranges that have a single definition, even if they  
							
							... 
							
							
							
							interfere.  Because these intervals have a single definition, and one of them
is a copy instruction, they are always safe to merge even if their lifetimes
interfere.  This slightly reduces the amount of spill code, for example on
252.eon, from:
 12837 spiller               - Number of loads added
  7604 spiller               - Number of stores added
  5842 spiller               - Number of register spills
 18155 liveintervals         - Number of identity moves eliminated after coalescing
to:
  12754 spiller               - Number of loads added
   7585 spiller               - Number of stores added
   5803 spiller               - Number of register spills
  18262 liveintervals         - Number of identity moves eliminated after coalescing
The much much bigger win would be to merge intervals with multiple definitions
(aka phi nodes) but this is not that day.
llvm-svn: 15124 
							
						 
						
							2004-07-23 05:26:05 +00:00  
				
					
						
							
							
								 
						
							
								84b93bb107 
								
							 
						 
						
							
							
								
								costmetic changes  
							
							... 
							
							
							
							llvm-svn: 15118 
							
						 
						
							2004-07-22 23:05:12 +00:00  
				
					
						
							
							
								 
						
							
								6b2b26c6f2 
								
							 
						 
						
							
							
								
								Fix broken -debug printing  
							
							... 
							
							
							
							llvm-svn: 15115 
							
						 
						
							2004-07-22 21:54:22 +00:00  
				
					
						
							
							
								 
						
							
								8799dd9e2e 
								
							 
						 
						
							
							
								
								The default has not been 'simple' for AGES!  
							
							... 
							
							
							
							llvm-svn: 15114 
							
						 
						
							2004-07-22 21:46:02 +00:00  
				
					
						
							
							
								 
						
							
								68426e5ba6 
								
							 
						 
						
							
							
								
								Make linear scan the default  
							
							... 
							
							
							
							llvm-svn: 15111 
							
						 
						
							2004-07-22 18:42:00 +00:00  
				
					
						
							
							
								 
						
							
								c73b76a0a8 
								
							 
						 
						
							
							
								
								Put variable name to a separate line.  
							
							... 
							
							
							
							llvm-svn: 15108 
							
						 
						
							2004-07-22 15:30:33 +00:00  
				
					
						
							
							
								 
						
							
								6dd644e017 
								
							 
						 
						
							
							
								
								Fix indentation and wrap code at 80 cols  
							
							... 
							
							
							
							llvm-svn: 15107 
							
						 
						
							2004-07-22 15:26:23 +00:00  
				
					
						
							
							
								 
						
							
								61546f3e5b 
								
							 
						 
						
							
							
								
								Sorting is now handled by both linearscan and iterative scan so live  
							
							... 
							
							
							
							intervals need not be sorted anymore. Removing this redundant step
improves LiveIntervals running time by 5% on 176.gcc.
llvm-svn: 15106 
							
						 
						
							2004-07-22 15:18:10 +00:00  
				
					
						
							
							
								 
						
							
								52cff0adf0 
								
							 
						 
						
							
							
								
								Fit to 80 columns.  
							
							... 
							
							
							
							llvm-svn: 15105 
							
						 
						
							2004-07-22 14:29:31 +00:00  
				
					
						
							
							
								 
						
							
								1a876fab64 
								
							 
						 
						
							
							
								
								Some compile time improvements resulting in a 1sec speedup in the 5sec  
							
							... 
							
							
							
							compilation of gcc:
* Use vectors instead of lists for the intervals sets
* Use a heap for the unhandled set to keep intervals always sorted and
  makes insertions back to the heap very fast (compared to scanning a
  list)
llvm-svn: 15103 
							
						 
						
							2004-07-22 08:14:44 +00:00  
				
					
						
							
							
								 
						
							
								f2b976bdd5 
								
							 
						 
						
							
							
								
								Remove extraneous punctuation  
							
							... 
							
							
							
							llvm-svn: 15098 
							
						 
						
							2004-07-22 05:51:56 +00:00  
				
					
						
							
							
								 
						
							
								120187935d 
								
							 
						 
						
							
							
								
								Use reverse iterators when updating the vector, since scanning from  
							
							... 
							
							
							
							the end will reduce erase() runtimes.
llvm-svn: 15093 
							
						 
						
							2004-07-22 02:16:53 +00:00  
				
					
						
							
							
								 
						
							
								6ff6021712 
								
							 
						 
						
							
							
								
								That funny 2-address lowering pass can also cause multiple definitions,  
							
							... 
							
							
							
							fortunately, they are easy to handle if we know about them.  This patch fixes
some serious pessimization of code produced by the linscan register allocator.
llvm-svn: 15092 
							
						 
						
							2004-07-22 00:04:14 +00:00  
				
					
						
							
							
								 
						
							
								adbbc62f82 
								
							 
						 
						
							
							
								
								Minor cleanups  
							
							... 
							
							
							
							llvm-svn: 15091 
							
						 
						
							2004-07-21 23:17:57 +00:00  
				
					
						
							
							
								 
						
							
								902dcf0729 
								
							 
						 
						
							
							
								
								These files don't need to include <iostream> since they include "Support/Debug.h".  
							
							... 
							
							
							
							llvm-svn: 15089 
							
						 
						
							2004-07-21 20:50:33 +00:00  
				
					
						
							
							
								 
						
							
								c74c7d1101 
								
							 
						 
						
							
							
								
								Fix analysis name.  
							
							... 
							
							
							
							llvm-svn: 15078 
							
						 
						
							2004-07-21 17:23:44 +00:00  
				
					
						
							
							
								 
						
							
								701071a144 
								
							 
						 
						
							
							
								
								Clear spilled list at once. Remove unused vector.  
							
							... 
							
							
							
							llvm-svn: 15073 
							
						 
						
							2004-07-21 12:00:10 +00:00  
				
					
						
							
							
								 
						
							
								a3efc03731 
								
							 
						 
						
							
							
								
								Change std::list into a std::vector for IntervalSets. This reduces  
							
							... 
							
							
							
							compile time for 176.gcc from 5.6 secs to 4.7 secs.
llvm-svn: 15072 
							
						 
						
							2004-07-21 09:46:55 +00:00  
				
					
						
							
							
								 
						
							
								fbc436bbce 
								
							 
						 
						
							
							
								
								Improve file comment.  
							
							... 
							
							
							
							llvm-svn: 15069 
							
						 
						
							2004-07-21 08:28:39 +00:00  
				
					
						
							
							
								 
						
							
								d524e5bdf2 
								
							 
						 
						
							
							
								
								Add Iterative scan register allocator.  
							
							... 
							
							
							
							llvm-svn: 15068 
							
						 
						
							2004-07-21 08:24:35 +00:00  
				
					
						
							
							
								 
						
							
								c03ccc225b 
								
							 
						 
						
							
							
								
								Linearscan is no longer experimental.  
							
							... 
							
							
							
							llvm-svn: 15067 
							
						 
						
							2004-07-21 08:18:50 +00:00  
				
					
						
							
							
								 
						
							
								7eb2b1892b 
								
							 
						 
						
							
							
								
								Add function to clear all virtual->physical mappings but not assigned  
							
							... 
							
							
							
							stack slots. This is in preparation for the iterative linear scan.
llvm-svn: 15032 
							
						 
						
							2004-07-20 13:28:17 +00:00  
				
					
						
							
							
								 
						
							
								f616d8328c 
								
							 
						 
						
							
							
								
								Remove unneeded functor. LiveInterval has a < operator.  
							
							... 
							
							
							
							llvm-svn: 15031 
							
						 
						
							2004-07-20 10:20:03 +00:00  
				
					
						
							
							
								 
						
							
								12a71ea03e 
								
							 
						 
						
							
							
								
								Remove dead code.  
							
							... 
							
							
							
							llvm-svn: 15011 
							
						 
						
							2004-07-19 23:35:55 +00:00  
				
					
						
							
							
								 
						
							
								15dfdb4e01 
								
							 
						 
						
							
							
								
								Fix a bug that occurs when the last instruction in a range is dead  
							
							... 
							
							
							
							llvm-svn: 15005 
							
						 
						
							2004-07-19 15:16:53 +00:00  
				
					
						
							
							
								 
						
							
								c8fb1fb5bb 
								
							 
						 
						
							
							
								
								When joining intervals, join intervals in deeply nested loops first.  This  
							
							... 
							
							
							
							is a simple change, but seems to improve code a little.  For example, on
256.bzip2, we went from 75.0s -> 73.33s (2% speedup).
llvm-svn: 15004 
							
						 
						
							2004-07-19 14:40:29 +00:00  
				
					
						
							
							
								 
						
							
								d10d373ce9 
								
							 
						 
						
							
							
								
								Split joinIntervals into two methods  
							
							... 
							
							
							
							llvm-svn: 15003 
							
						 
						
							2004-07-19 14:08:10 +00:00  
				
					
						
							
							
								 
						
							
								aef6c2a350 
								
							 
						 
						
							
							
								
								There is no need to store the MBB along with the MI any more, we can now  
							
							... 
							
							
							
							ask instructions for their parent.
llvm-svn: 14998 
							
						 
						
							2004-07-19 07:04:55 +00:00  
				
					
						
							
							
								 
						
							
								a74cf5a7d9 
								
							 
						 
						
							
							
								
								Simplify the interface to LiveVariables::addVirtualRegister(Killed|Dead)  
							
							... 
							
							
							
							llvm-svn: 14997 
							
						 
						
							2004-07-19 06:55:21 +00:00  
				
					
						
							
							
								 
						
							
								5027de35ed 
								
							 
						 
						
							
							
								
								Remove the DefBlock element of VarInfo.  DefBlock is always DefInst->getParent()  
							
							... 
							
							
							
							llvm-svn: 14996 
							
						 
						
							2004-07-19 06:26:50 +00:00  
				
					
						
							
							
								 
						
							
								a618e13c83 
								
							 
						 
						
							
							
								
								Two changes, both very significant:  
							
							... 
							
							
							
							* vreg <-> vreg joining now works, enable it unconditionally when joining
  is enabled (which is the default).
* Fix a serious pessimization of spill code where we were saying that a
  spilled DEF operand was live into the subsequent instruction.  This allows
  for substantially better code when spilling starts to happen.
llvm-svn: 14993 
							
						 
						
							2004-07-19 05:55:50 +00:00  
				
					
						
							
							
								 
						
							
								c56f90d156 
								
							 
						 
						
							
							
								
								See comments.  The live intervals were not coming out of the spiller in sorted  
							
							... 
							
							
							
							order, causing the inactive list in the linearscan list to get unsorted, which
basically fuxored everything up severely.
These seems to fix the joiner, so with more testing I will enable it by default.
llvm-svn: 14992 
							
						 
						
							2004-07-19 05:15:10 +00:00  
				
					
						
							
							
								 
						
							
								8c8144b958 
								
							 
						 
						
							
							
								
								Fix assertion to not dereference end!  
							
							... 
							
							
							
							llvm-svn: 14991 
							
						 
						
							2004-07-19 05:02:09 +00:00  
				
					
						
							
							
								 
						
							
								70f8dca59b 
								
							 
						 
						
							
							
								
								Add some asserts that the list of intervals returned by addIntervalsForSpills  
							
							... 
							
							
							
							is sorted.  This is not the case currently, which is causing no end of
problems.
llvm-svn: 14990 
							
						 
						
							2004-07-19 04:47:36 +00:00  
				
					
						
							
							
								 
						
							
								4f2e2a3f80 
								
							 
						 
						
							
							
								
								remove the mbbi2mbbMap_, which was just keeping track of mbb order anyway.  
							
							... 
							
							
							
							Heavily refactor handleVirtualRegisterDef, adding comments and making it more
efficient.  It is also much easier to follow and convince ones self that it is
correct :)
Add -debug output to the joine, showing the result of joining the intervals.
llvm-svn: 14989 
							
						 
						
							2004-07-19 02:15:56 +00:00  
				
					
						
							
							
								 
						
							
								05920e7a70 
								
							 
						 
						
							
							
								
								fill comment to 80 cols  
							
							... 
							
							
							
							remove map that is not needed
llvm-svn: 14988 
							
						 
						
							2004-07-19 02:13:59 +00:00  
				
					
						
							
							
								 
						
							
								e62af95bef 
								
							 
						 
						
							
							
								
								It looks like physref->virtreg joining is working fine.  Enable it by default  
							
							... 
							
							
							
							but make virtreg->virtreg joining stay off by default
llvm-svn: 14916 
							
						 
						
							2004-07-17 21:51:25 +00:00  
				
					
						
							
							
								 
						
							
								34afafc190 
								
							 
						 
						
							
							
								
								Fix IA64 compatibility  
							
							... 
							
							
							
							llvm-svn: 14866 
							
						 
						
							2004-07-16 00:06:01 +00:00  
				
					
						
							
							
								 
						
							
								cc36c670e8 
								
							 
						 
						
							
							
								
								Use new macro  
							
							... 
							
							
							
							llvm-svn: 14865 
							
						 
						
							2004-07-16 00:04:54 +00:00  
				
					
						
							
							
								 
						
							
								fcdab1b5f5 
								
							 
						 
						
							
							
								
								Fix for PR341  
							
							... 
							
							
							
							llvm-svn: 14845 
							
						 
						
							2004-07-15 02:40:04 +00:00  
				
					
						
							
							
								 
						
							
								d47909e00a 
								
							 
						 
						
							
							
								
								Add checks to ensure that there are no unreachable blocks in the function  
							
							... 
							
							
							
							llvm-svn: 14725 
							
						 
						
							2004-07-09 16:44:37 +00:00  
				
					
						
							
							
								 
						
							
								b47ab7ae1c 
								
							 
						 
						
							
							
								
								* Doxygenify comments  
							
							... 
							
							
							
							* Fix spacing, grammar in comment
* Make code layout consistent
* Wrap code at 80 cols
* Delete spurious blank lines
No functional changes.
llvm-svn: 14721 
							
						 
						
							2004-07-09 14:45:17 +00:00  
				
					
						
							
							
								 
						
							
								7300963c66 
								
							 
						 
						
							
							
								
								Fix typo.  
							
							... 
							
							
							
							llvm-svn: 14720 
							
						 
						
							2004-07-09 11:25:27 +00:00  
				
					
						
							
							
								 
						
							
								132ece8925 
								
							 
						 
						
							
							
								
								Improve code comments.  
							
							... 
							
							
							
							llvm-svn: 14719 
							
						 
						
							2004-07-09 11:10:00 +00:00  
				
					
						
							
							
								 
						
							
								2c422bbefb 
								
							 
						 
						
							
							
								
								Add viewCFG() and viewCFGOnly() APIs.  
							
							... 
							
							
							
							llvm-svn: 14679 
							
						 
						
							2004-07-08 00:47:58 +00:00  
				
					
						
							
							
								 
						
							
								8a1be03090 
								
							 
						 
						
							
							
								
								Disable coalescing.  
							
							... 
							
							
							
							llvm-svn: 14655 
							
						 
						
							2004-07-07 02:03:12 +00:00  
				
					
						
							
							
								 
						
							
								3be9c5fbe7 
								
							 
						 
						
							
							
								
								Do not crash when joining two intervals of registers of different  
							
							... 
							
							
							
							classes: just ignore that move. Thanks to Vladimir Prus who found the
bug!
llvm-svn: 14644 
							
						 
						
							2004-07-06 16:03:21 +00:00  
				
					
						
							
							
								 
						
							
								520df8464b 
								
							 
						 
						
							
							
								
								Fix a bug in the unreachable block elim pass.  Dropping all references on a  
							
							... 
							
							
							
							basic block clear()'s all of the operands lists, including phis.  This
caused removePredecessor to get confused later.  Because of this, we just
nuke (without prejudice) PHI nodes in unreachable blocks.
llvm-svn: 14635 
							
						 
						
							2004-07-06 06:36:11 +00:00  
				
					
						
							
							
								 
						
							
								21b3a5b0de 
								
							 
						 
						
							
							
								
								Correctly compute the ration of iterations/#intervals.  
							
							... 
							
							
							
							llvm-svn: 14626 
							
						 
						
							2004-07-04 17:23:35 +00:00  
				
					
						
							
							
								 
						
							
								eb04d9bcb4 
								
							 
						 
						
							
							
								
								Add #include <iostream> since Value.h does not #include it any more.  
							
							... 
							
							
							
							llvm-svn: 14622 
							
						 
						
							2004-07-04 12:19:56 +00:00  
				
					
						
							
							
								 
						
							
								8f3cc0316c 
								
							 
						 
						
							
							
								
								Add efficiency statistic.  
							
							... 
							
							
							
							llvm-svn: 14590 
							
						 
						
							2004-07-04 07:59:06 +00:00  
				
					
						
							
							
								 
						
							
								a65b4eac3b 
								
							 
						 
						
							
							
								
								Revert patches 1.79 and 1.80 which had to do with dead MBB's.  Now that they  
							
							... 
							
							
							
							don't exist, we don't have to pretend to handle them.
llvm-svn: 14567 
							
						 
						
							2004-07-02 05:52:23 +00:00  
				
					
						
							
							
								 
						
							
								693244fb33 
								
							 
						 
						
							
							
								
								Add a trivially simple pass to delete unreachable blocks from the CFG.  This  
							
							... 
							
							
							
							pass is required to paper over problems in the code generator (primarily
live variables and its clients) which doesn't really have any well defined
semantics for unreachable code.
The proper solution to this problem is to have instruction selectors not
select blocks that are unreachable.  Until we have a instruction selection
framework available for use, however, we can't expect all instruction
selector writers to do this.  Until then, this pass should be used.
llvm-svn: 14563 
							
						 
						
							2004-07-02 05:46:10 +00:00  
				
					
						
							
							
								 
						
							
								9a60c532a8 
								
							 
						 
						
							
							
								
								Make sure that we destroy the MBB's, with all of their instructions, before  
							
							... 
							
							
							
							any other data structures
llvm-svn: 14524 
							
						 
						
							2004-07-01 06:29:07 +00:00  
				
					
						
							
							
								 
						
							
								c85535c8be 
								
							 
						 
						
							
							
								
								Now that MachineFunction/MachineBasicBlock keep a mapping of blocks to ID #'s  
							
							... 
							
							
							
							use them instead of a local LiveVariables numbering
llvm-svn: 14523 
							
						 
						
							2004-07-01 06:15:32 +00:00  
				
					
						
							
							
								 
						
							
								449af59c7e 
								
							 
						 
						
							
							
								
								Change MBB autonumber a bit to get the reverse mapping as well as a forward  
							
							... 
							
							
							
							mapping
llvm-svn: 14521 
							
						 
						
							2004-07-01 06:02:27 +00:00  
				
					
						
							
							
								 
						
							
								a47455dbd3 
								
							 
						 
						
							
							
								
								Instance var no longer exists  
							
							... 
							
							
							
							llvm-svn: 14520 
							
						 
						
							2004-07-01 06:02:07 +00:00  
				
					
						
							
							
								 
						
							
								6c375e4926 
								
							 
						 
						
							
							
								
								Start using MBB numbers directly instead of going through the live variables  
							
							... 
							
							
							
							map.
llvm-svn: 14518 
							
						 
						
							2004-07-01 04:29:47 +00:00  
				
					
						
							
							
								 
						
							
								7c77fd50e7 
								
							 
						 
						
							
							
								
								Instead of building a private numbering of MBB's use brg's nifty auto-numbering.  
							
							... 
							
							
							
							Also convert df_iterator -> df_ext_iterator for subsequent stuff I'm doing.
llvm-svn: 14517 
							
						 
						
							2004-07-01 04:24:29 +00:00  
				
					
						
							
							
								 
						
							
								4cda555346 
								
							 
						 
						
							
							
								
								In line with the previous patch, do not assert out if analyzing a dead basic block.  
							
							... 
							
							
							
							llvm-svn: 14475 
							
						 
						
							2004-06-29 07:16:23 +00:00  
				
					
						
							
							
								 
						
							
								49b34f3f51 
								
							 
						 
						
							
							
								
								Do not dereference end iterators.  It hurts when you do that.  
							
							... 
							
							
							
							llvm-svn: 14474 
							
						 
						
							2004-06-29 06:56:51 +00:00  
				
					
						
							
							
								 
						
							
								d22d9cb800 
								
							 
						 
						
							
							
								
								Do not find these ugly sparc-specific objects by using the annotation API on  
							
							... 
							
							
							
							instructions.  Instead, keep a map of instructions -> MCFI objects in the
already sparc-specific class MachineFunctionInfo.  This will slow down the
sparc backend a bit, but it does not penalize the rest of LLVM!
llvm-svn: 14438 
							
						 
						
							2004-06-27 18:52:17 +00:00  
				
					
						
							
							
								 
						
							
								23dbc8170c 
								
							 
						 
						
							
							
								
								Made a fix so that you can print out MachineInstrs that belong to a MachineBasicBlock that is not yet attached to a MachineFunction. This change includes changing the third operand (TargetMachine) to a pointer for the MachineInstr::print function.  
							
							... 
							
							
							
							llvm-svn: 14389 
							
						 
						
							2004-06-25 00:13:11 +00:00  
				
					
						
							
							
								 
						
							
								7d11fbf971 
								
							 
						 
						
							
							
								
								Convert tabs to spaces.  
							
							... 
							
							
							
							llvm-svn: 14373 
							
						 
						
							2004-06-24 21:31:16 +00:00  
				
					
						
							
							
								 
						
							
								cec9d0bcad 
								
							 
						 
						
							
							
								
								Making an archive version of the CodeGen library is unnecessary if we just  
							
							... 
							
							
							
							move InstructionLowering itself.
llvm-svn: 14324 
							
						 
						
							2004-06-22 17:52:30 +00:00  
				
					
						
							
							
								 
						
							
								be667731ae 
								
							 
						 
						
							
							
								
								Provide archive version of CodeGen library (for those tools that only need  
							
							... 
							
							
							
							IntrinsicLowering, for instance).
llvm-svn: 14323 
							
						 
						
							2004-06-22 17:28:43 +00:00  
				
					
						
							
							
								 
						
							
								4fbff990b0 
								
							 
						 
						
							
							
								
								Rename Interval class to LiveInterval to avoid conflicting with the already  
							
							... 
							
							
							
							existing llvm::Interval class.
Patch contributed by Vladimir Prus!
http://mail.cs.uiuc.edu/pipermail/llvmbugs/2004-June/000710.html 
llvm-svn: 14281 
							
						 
						
							2004-06-21 13:10:56 +00:00  
				
					
						
							
							
								 
						
							
								bcdadf3765 
								
							 
						 
						
							
							
								
								Move the IntrinsicLowering header into the CodeGen directory, as per PR346  
							
							... 
							
							
							
							llvm-svn: 14266 
							
						 
						
							2004-06-20 07:49:54 +00:00  
				
					
						
							
							
								 
						
							
								4300ca9d32 
								
							 
						 
						
							
							
								
								Make debugging dumps w/ multiple MachineBBs for a given LLVM BB readable.  
							
							... 
							
							
							
							llvm-svn: 14205 
							
						 
						
							2004-06-17 22:26:53 +00:00  
				
					
						
							
							
								 
						
							
								6b7275996c 
								
							 
						 
						
							
							
								
								Rename Type::PrimitiveID to TypeId and ::getPrimitiveID() to ::getTypeID()  
							
							... 
							
							
							
							llvm-svn: 14201 
							
						 
						
							2004-06-17 18:19:28 +00:00  
				
					
						
							
							
								 
						
							
								6f4a596234 
								
							 
						 
						
							
							
								
								Fix a recent regression in Applications/sgefa that Alkis pointed out to me.  
							
							... 
							
							
							
							The vector may actually be empty if the register that we are marking as
recently used is not actually allocatable.  This happens for physical registers
that are not allocatable, like the ST(x) registers on X86.
llvm-svn: 14195 
							
						 
						
							2004-06-16 06:57:29 +00:00  
				
					
						
							
							
								 
						
							
								5888b5d4b1 
								
							 
						 
						
							
							
								
								Fix fallout from getOffsetOfLocalArea() being negated.  Debugging dumps were being  
							
							... 
							
							
							
							printed incorrectly, and we were reserving 8 extra bytes of stack space for functions
on X86.
llvm-svn: 14152 
							
						 
						
							2004-06-11 06:37:11 +00:00  
				
					
						
							
							
								 
						
							
								175532bb1e 
								
							 
						 
						
							
							
								
								Fix the prolog epilog code inserter to match the documentation and support  
							
							... 
							
							
							
							targets whose stack grows up.
Patch contributed by Vladimir Prus
llvm-svn: 14111 
							
						 
						
							2004-06-10 06:23:35 +00:00  
				
					
						
							
							
								 
						
							
								7b4d0f9c22 
								
							 
						 
						
							
							
								
								Oops, this was not to go in  
							
							... 
							
							
							
							llvm-svn: 13958 
							
						 
						
							2004-06-02 06:06:45 +00:00  
				
					
						
							
							
								 
						
							
								2805c189dc 
								
							 
						 
						
							
							
								
								Adjust to the new TargetMachine interface  
							
							... 
							
							
							
							llvm-svn: 13957 
							
						 
						
							2004-06-02 06:06:20 +00:00  
				
					
						
							
							
								 
						
							
								2150542af9 
								
							 
						 
						
							
							
								
								Adjust to new TargetMachine interface  
							
							... 
							
							
							
							llvm-svn: 13956 
							
						 
						
							2004-06-02 05:57:12 +00:00  
				
					
						
							
							
								 
						
							
								185fa54c68 
								
							 
						 
						
							
							
								
								Inline findOptimalStorageSize into it's caller, both of which are sparc specific  
							
							... 
							
							
							
							llvm-svn: 13955 
							
						 
						
							2004-06-02 05:56:52 +00:00  
				
					
						
							
							
								 
						
							
								560b5e42ab 
								
							 
						 
						
							
							
								
								Finegrainify namespacification  
							
							... 
							
							
							
							llvm-svn: 13948 
							
						 
						
							2004-06-02 04:28:06 +00:00  
				
					
						
							
							
								 
						
							
								71f1d6d9d8 
								
							 
						 
						
							
							
								
								Fix a trivial but blatant bug  
							
							... 
							
							
							
							llvm-svn: 13947 
							
						 
						
							2004-06-02 03:57:43 +00:00  
				
					
						
							
							
								 
						
							
								fbe799cfa2 
								
							 
						 
						
							
							
								
								Pull Interval class out of LiveIntervals.  
							
							... 
							
							
							
							llvm-svn: 13910 
							
						 
						
							2004-05-30 07:46:27 +00:00  
				
					
						
							
							
								 
						
							
								a5268e8199 
								
							 
						 
						
							
							
								
								When spilling an register, introduce a new temporary for each of its  
							
							... 
							
							
							
							spills. This allows for more flexibility when allocating registers for
spill code.
llvm-svn: 13907 
							
						 
						
							2004-05-30 07:24:39 +00:00  
				
					
						
							
							
								 
						
							
								a8b396fe29 
								
							 
						 
						
							
							
								
								Fix typo in head-of-file comment.  
							
							... 
							
							
							
							llvm-svn: 13903 
							
						 
						
							2004-05-30 03:33:48 +00:00  
				
					
						
							
							
								 
						
							
								fd735bcf28 
								
							 
						 
						
							
							
								
								Add method to assign stack slot to virtual register without creating a  
							
							... 
							
							
							
							new one.
llvm-svn: 13895 
							
						 
						
							2004-05-29 20:38:05 +00:00  
				
					
						
							
							
								 
						
							
								e3cec71bdc 
								
							 
						 
						
							
							
								
								Add grow() member that grows the maps when the number of virtual  
							
							... 
							
							
							
							registers in the function has changed.
llvm-svn: 13893 
							
						 
						
							2004-05-29 19:03:29 +00:00  
				
					
						
							
							
								 
						
							
								1010116a8f 
								
							 
						 
						
							
							
								
								Remove defs vector from live intervals.  
							
							... 
							
							
							
							llvm-svn: 13892 
							
						 
						
							2004-05-29 16:18:57 +00:00  
				
					
						
							
							
								 
						
							
								50cbb9ad3e 
								
							 
						 
						
							
							
								
								updates to ModuloSched  
							
							... 
							
							
							
							llvm-svn: 13881 
							
						 
						
							2004-05-28 20:14:12 +00:00  
				
					
						
							
							
								 
						
							
								642685a400 
								
							 
						 
						
							
							
								
								Adding scheduling class.  
							
							... 
							
							
							
							llvm-svn: 13783 
							
						 
						
							2004-05-26 06:27:36 +00:00  
				
					
						
							
							
								 
						
							
								a066df6bd7 
								
							 
						 
						
							
							
								
								Updating my cvs versions. THis is still in progress and much will be changed.  
							
							... 
							
							
							
							llvm-svn: 13782 
							
						 
						
							2004-05-26 06:27:18 +00:00  
				
					
						
							
							
								 
						
							
								91fa3a9908 
								
							 
						 
						
							
							
								
								Moved MachineBasicBlock deconstructor to cpp file and removed it from LeakDetector to fix memory leak bug.  
							
							... 
							
							
							
							llvm-svn: 13718 
							
						 
						
							2004-05-24 07:14:35 +00:00  
				
					
						
							
							
								 
						
							
								a578cb7a65 
								
							 
						 
						
							
							
								
								Added MachineFunction parent* to MachineBasicBlock. Customized ilist template  
							
							... 
							
							
							
							to set the parent when a MachineBasicBlock is added to a MachineFunction.
llvm-svn: 13716 
							
						 
						
							2004-05-24 06:11:51 +00:00  
				
					
						
							
							
								 
						
							
								18dad6ed52 
								
							 
						 
						
							
							
								
								Eliminate an explicit use of the LLVM basic block, using getParent instead,  
							
							... 
							
							
							
							which simplifies the code
llvm-svn: 13707 
							
						 
						
							2004-05-24 03:44:52 +00:00  
				
					
						
							
							
								 
						
							
								bcee21b491 
								
							 
						 
						
							
							
								
								Changed clone to be const.  
							
							... 
							
							
							
							Changed copy constructor to set parent, prev, and next pointers to null.
llvm-svn: 13706 
							
						 
						
							2004-05-24 03:14:18 +00:00  
				
					
						
							
							
								 
						
							
								9953d86e63 
								
							 
						 
						
							
							
								
								Fixed up my changes to add support for cloning Machine Instructions.  
							
							... 
							
							
							
							llvm-svn: 13665 
							
						 
						
							2004-05-23 20:58:02 +00:00  
				
					
						
							
							
								 
						
							
								e6a4a7dbcf 
								
							 
						 
						
							
							
								
								Adding support to clone MachineInstr  
							
							... 
							
							
							
							llvm-svn: 13661 
							
						 
						
							2004-05-23 19:35:12 +00:00  
				
					
						
							
							
								 
						
							
								6307b8d061 
								
							 
						 
						
							
							
								
								Fix a really nasty bug from my changes on Monday to PHIElim.  These changes  
							
							... 
							
							
							
							broke obsequi and a lot of other things.  It all boiled down to MBB being
overloaded in an inner scope and me confusing it with the one in the outer
scope.  Ugh!
llvm-svn: 13517 
							
						 
						
							2004-05-12 21:47:57 +00:00  
				
					
						
							
							
								 
						
							
								4cf17775e8 
								
							 
						 
						
							
							
								
								Start NextMBBNumber out at zero.  
							
							... 
							
							
							
							llvm-svn: 13515 
							
						 
						
							2004-05-12 21:35:23 +00:00  
				
					
						
							
							
								 
						
							
								cb5d22a0cb 
								
							 
						 
						
							
							
								
								Add non-const MachineBasicBlock::getParent() accessor method.  
							
							... 
							
							
							
							MBBs start out as #-1. When a MBB is added to a MachineFunction, it
gets the next available unique MBB number. If it is removed from a
MachineFunction, it goes back to being #-1.
llvm-svn: 13514 
							
						 
						
							2004-05-12 21:35:22 +00:00  
				
					
						
							
							
								 
						
							
								24f200ad7b 
								
							 
						 
						
							
							
								
								Switch this from using an std::map to using a DenseMap.  This speeds up  
							
							... 
							
							
							
							phi-elimination from 0.6 to 0.54s on kc++.
llvm-svn: 13454 
							
						 
						
							2004-05-10 19:17:36 +00:00  
				
					
						
							
							
								 
						
							
								39a1e0a33e 
								
							 
						 
						
							
							
								
								Use a new VRegPHIUseCount to compute uses of PHI values by other phi values  
							
							... 
							
							
							
							in the basic block being processed.  This fixes PhiElimination on kimwitu++
from taking 105s to taking a much more reasonable 0.6s (in a debug build).
llvm-svn: 13453 
							
						 
						
							2004-05-10 19:06:37 +00:00  
				
					
						
							
							
								 
						
							
								a2f7b9bddc 
								
							 
						 
						
							
							
								
								Now that we use an ilist of machine instructions, iterators are more robust  
							
							... 
							
							
							
							than before.  Because this is the case, we can compute the first non-phi
instruction once when de-phi'ing a block.  This shaves ~4s off of
phielimination of _Z7yyparsev in kimwitu++ from 109s -> 105s.  There are
still much more important gains to come.
llvm-svn: 13452 
							
						 
						
							2004-05-10 18:47:18 +00:00  
				
					
						
							
							
								 
						
							
								5eb8094c2d 
								
							 
						 
						
							
							
								
								Patch to fix PR337.  Make sure to mark all aliased physical registers as used  
							
							... 
							
							
							
							when we see a read of a register.  This is important in cases like:
AL = ...
AH = ...
   = AX
The read of AX must make both the AL and AH defs live until the use.
llvm-svn: 13444 
							
						 
						
							2004-05-10 05:12:43 +00:00  
				
					
						
							
							
								 
						
							
								a6820d6704 
								
							 
						 
						
							
							
								
								Updating my versions of ModuloScheduling in cvs. Still not complete.  
							
							... 
							
							
							
							llvm-svn: 13424 
							
						 
						
							2004-05-08 16:12:10 +00:00  
				
					
						
							
							
								 
						
							
								2a54b5d3e1 
								
							 
						 
						
							
							
								
								Add required header  
							
							... 
							
							
							
							llvm-svn: 13417 
							
						 
						
							2004-05-08 03:50:03 +00:00  
				
					
						
							
							
								 
						
							
								54a89b7c72 
								
							 
						 
						
							
							
								
								Remove unneeded header  
							
							... 
							
							
							
							llvm-svn: 13416 
							
						 
						
							2004-05-08 03:49:35 +00:00  
				
					
						
							
							
								 
						
							
								991425ae70 
								
							 
						 
						
							
							
								
								numeric_limits::infinity() apparently does not work on all systems.  As a  
							
							... 
							
							
							
							workaround, use the C HUGE_VAL macro instead.
llvm-svn: 13377 
							
						 
						
							2004-05-06 16:25:59 +00:00  
				
					
						
							
							
								 
						
							
								8c0bc68910 
								
							 
						 
						
							
							
								
								Operate on the Machine CFG instead of on the LLVM CFG  
							
							... 
							
							
							
							llvm-svn: 13302 
							
						 
						
							2004-05-01 21:24:39 +00:00  
				
					
						
							
							
								 
						
							
								c49a9a5d76 
								
							 
						 
						
							
							
								
								Stop LiveVariables from using BasicBlocks as part of the mapping, instead  
							
							... 
							
							
							
							use MachineBasicBlocks.  To do this, we traverse the Machine CFG instead of
the LLVM CFG, which is also *MUCH* more efficient by having fewer levels of
indirections and mappings.
llvm-svn: 13301 
							
						 
						
							2004-05-01 21:24:24 +00:00  
				
					
						
							
							
								 
						
							
								a411e07db0 
								
							 
						 
						
							
							
								
								Include SparcV9RegInfo.h instead of TargetRegInfo.h. This serves as a bit of  
							
							... 
							
							
							
							documentation that this module needs to be made independent of the
register file description of the current target.
llvm-svn: 13125 
							
						 
						
							2004-04-23 18:15:46 +00:00  
				
					
						
							
							
								 
						
							
								4aaa9c603a 
								
							 
						 
						
							
							
								
								Implement emitWordAt() for the debug emitter and the file printer emitter. (I  
							
							... 
							
							
							
							am not so sure about the file printer emitter, but the debug emitter change
should be harmless.)
llvm-svn: 13117 
							
						 
						
							2004-04-23 17:11:13 +00:00  
				
					
						
							
							
								 
						
							
								8f2df3aa3c 
								
							 
						 
						
							
							
								
								Fix bug introduced in previous commit.  
							
							... 
							
							
							
							llvm-svn: 12872 
							
						 
						
							2004-04-12 20:26:39 +00:00  
				
					
						
							
							
								 
						
							
								0ede7ec4f8 
								
							 
						 
						
							
							
								
								Correctly compute spill weights  
							
							... 
							
							
							
							llvm-svn: 12869 
							
						 
						
							2004-04-12 17:39:20 +00:00  
				
					
						
							
							
								 
						
							
								b753c8c9c5 
								
							 
						 
						
							
							
								
								Print def lists a bit more compactly  
							
							... 
							
							
							
							llvm-svn: 12866 
							
						 
						
							2004-04-12 15:57:58 +00:00  
				
					
						
							
							
								 
						
							
								237f203ca9 
								
							 
						 
						
							
							
								
								Add definition list to each live interval.  
							
							... 
							
							
							
							llvm-svn: 12791 
							
						 
						
							2004-04-09 18:07:57 +00:00  
				
					
						
							
							
								 
						
							
								afbafb55ea 
								
							 
						 
						
							
							
								
								MBB::remove should not modify the iterator passed in  
							
							... 
							
							
							
							llvm-svn: 12572 
							
						 
						
							2004-03-31 21:59:59 +00:00  
				
					
						
							
							
								 
						
							
								acccf32aa3 
								
							 
						 
						
							
							
								
								MachineBasicBlock::remove should not modify the iterator passed in  
							
							... 
							
							
							
							llvm-svn: 12571 
							
						 
						
							2004-03-31 21:59:29 +00:00  
				
					
						
							
							
								 
						
							
								a333b1382f 
								
							 
						 
						
							
							
								
								Correctly update LiveVariables when an instruction changes  
							
							... 
							
							
							
							llvm-svn: 12561 
							
						 
						
							2004-03-30 22:44:39 +00:00  
				
					
						
							
							
								 
						
							
								2fe0ac9ade 
								
							 
						 
						
							
							
								
								Change how the beginnings and ends of MachineFunctions are printed. Get  
							
							... 
							
							
							
							rid of the funny cast.
llvm-svn: 12537 
							
						 
						
							2004-03-29 21:58:31 +00:00  
				
					
						
							
							
								 
						
							
								02a5354d9b 
								
							 
						 
						
							
							
								
								Make the set of fixed (preallocated) intervals be a fixed superset of  
							
							... 
							
							
							
							unhandled + handled. So unhandled is now including all fixed intervals
and fixed intervals never changes when processing a function.
llvm-svn: 12462 
							
						 
						
							2004-03-17 00:48:59 +00:00  
				
					
						
							
							
								 
						
							
								e0b49952f6 
								
							 
						 
						
							
							
								
								Fix PR294  
							
							... 
							
							
							
							llvm-svn: 12425 
							
						 
						
							2004-03-16 01:45:55 +00:00  
				
					
						
							
							
								 
						
							
								48da2f8a6d 
								
							 
						 
						
							
							
								
								Change MRegisterInfo::foldMemoryOperand to return the folded  
							
							... 
							
							
							
							instruction to make the API more flexible.
llvm-svn: 12386 
							
						 
						
							2004-03-14 07:19:51 +00:00  
				
					
						
							
							
								 
						
							
								6623cd78f9 
								
							 
						 
						
							
							
								
								Spill explicit physical register defs as well.  
							
							... 
							
							
							
							llvm-svn: 12260 
							
						 
						
							2004-03-09 08:35:13 +00:00  
				
					
						
							
							
								 
						
							
								cb98644e9b 
								
							 
						 
						
							
							
								
								As I wrote in the docs, simple is the default spiller :-)  
							
							... 
							
							
							
							llvm-svn: 12189 
							
						 
						
							2004-03-06 23:08:44 +00:00  
				
					
						
							
							
								 
						
							
								79850121ad 
								
							 
						 
						
							
							
								
								Add simple spiller.  
							
							... 
							
							
							
							llvm-svn: 12188 
							
						 
						
							2004-03-06 22:38:29 +00:00  
				
					
						
							
							
								 
						
							
								015972103d 
								
							 
						 
						
							
							
								
								Make MachineOperand's value named 'contents'.  Make really, really sure  
							
							... 
							
							
							
							it is always completely initialized and copied.
Also, fix up many comments and asserts.
llvm-svn: 12100 
							
						 
						
							2004-03-03 19:07:27 +00:00  
				
					
						
							
							
								 
						
							
								31953c7a10 
								
							 
						 
						
							
							
								
								Add a spiller option to llc. A simple spiller will come soon. When we get CFG in the machine code represenation a global spiller will also be possible. Also document the linear scan register allocator but mark it as experimental for now.  
							
							... 
							
							
							
							llvm-svn: 12062 
							
						 
						
							2004-03-01 23:18:15 +00:00  
				
					
						
							
							
								 
						
							
								b76d234ee9 
								
							 
						 
						
							
							
								
								Add the long awaited memory operand folding support for linear scan  
							
							... 
							
							
							
							llvm-svn: 12058 
							
						 
						
							2004-03-01 20:05:10 +00:00  
				
					
						
							
							
								 
						
							
								427cec1395 
								
							 
						 
						
							
							
								
								TargetCacheInfo has been removed; its only uses were to propagate a constant  
							
							... 
							
							
							
							(16) into certain areas of the SPARC V9 back-end. I'm fairly sure the US IIIi's
dcache has 32-byte lines, so I'm not sure where the 16 came from. However, in
the interest of not breaking things any more than they already are, I'm going
to leave the constant alone.
llvm-svn: 12043 
							
						 
						
							2004-03-01 06:43:29 +00:00  
				
					
						
							
							
								 
						
							
								48a503be04 
								
							 
						 
						
							
							
								
								Adding new Modulo Scheduling graph files.  
							
							... 
							
							
							
							llvm-svn: 12031 
							
						 
						
							2004-03-01 02:50:57 +00:00  
				
					
						
							
							
								 
						
							
								dd10fbe775 
								
							 
						 
						
							
							
								
								Removing old graph files with new graph files that I wrote. Updated ModuloScheduling pass, but still in progress.  
							
							... 
							
							
							
							llvm-svn: 12030 
							
						 
						
							2004-03-01 02:50:01 +00:00  
				
					
						
							
							
								 
						
							
								604cc83933 
								
							 
						 
						
							
							
								
								Add an assert  
							
							... 
							
							
							
							llvm-svn: 12010 
							
						 
						
							2004-02-29 22:01:51 +00:00  
				
					
						
							
							
								 
						
							
								e0c3c18802 
								
							 
						 
						
							
							
								
								Add back #include I messed up  
							
							... 
							
							
							
							llvm-svn: 12009 
							
						 
						
							2004-02-29 21:40:53 +00:00  
				
					
						
							
							
								 
						
							
								90ecb92838 
								
							 
						 
						
							
							
								
								Urg, forgot to check this in.  
							
							... 
							
							
							
							llvm-svn: 12007 
							
						 
						
							2004-02-29 21:03:08 +00:00  
				
					
						
							
							
								 
						
							
								3859031b9b 
								
							 
						 
						
							
							
								
								Move the private MachineInstrAnnot.h into a private directory.  
							
							... 
							
							
							
							llvm-svn: 12003 
							
						 
						
							2004-02-29 19:12:51 +00:00  
				
					
						
							
							
								 
						
							
								d5a49c477d 
								
							 
						 
						
							
							
								
								Remove use of an ugly header  
							
							... 
							
							
							
							llvm-svn: 12002 
							
						 
						
							2004-02-29 19:04:31 +00:00  
				
					
						
							
							
								 
						
							
								6194ee84ba 
								
							 
						 
						
							
							
								
								Move methods out of .h file  
							
							... 
							
							
							
							llvm-svn: 12001 
							
						 
						
							2004-02-29 19:02:39 +00:00  
				
					
						
							
							
								 
						
							
								f20abac9bc 
								
							 
						 
						
							
							
								
								Eliminate the distinction between "real" and "unreal" instructions  
							
							... 
							
							
							
							llvm-svn: 11986 
							
						 
						
							2004-02-29 06:31:16 +00:00  
				
					
						
							
							
								 
						
							
								44b1b22a2d 
								
							 
						 
						
							
							
								
								int64_t -> int  
							
							... 
							
							
							
							llvm-svn: 11977 
							
						 
						
							2004-02-29 05:07:02 +00:00  
				
					
						
							
							
								 
						
							
								e669caafe0 
								
							 
						 
						
							
							
								
								Rename member function to be consistent with the rest.  
							
							... 
							
							
							
							llvm-svn: 11898 
							
						 
						
							2004-02-27 06:11:15 +00:00  
				
					
						
							
							
								 
						
							
								941f9310bb 
								
							 
						 
						
							
							
								
								Make spiller push stores right after the definition of a register so  
							
							... 
							
							
							
							that they are as far away from the loads as possible.
llvm-svn: 11895 
							
						 
						
							2004-02-27 04:51:35 +00:00  
				
					
						
							
							
								 
						
							
								519e1e8c92 
								
							 
						 
						
							
							
								
								Fix crash caused by passing register 0 to  
							
							... 
							
							
							
							MRegisterInfo::isPhysicalRegister().
llvm-svn: 11894 
							
						 
						
							2004-02-27 01:52:34 +00:00  
				
					
						
							
							
								 
						
							
								5a3bab9402 
								
							 
						 
						
							
							
								
								Clear maps right after basic block is processed.  
							
							... 
							
							
							
							llvm-svn: 11892 
							
						 
						
							2004-02-26 23:22:23 +00:00  
				
					
						
							
							
								 
						
							
								61719d48d2 
								
							 
						 
						
							
							
								
								Uncomment assertions that register# != 0 on calls to  
							
							... 
							
							
							
							MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes
to relevant files.
llvm-svn: 11882 
							
						 
						
							2004-02-26 22:00:20 +00:00  
				
					
						
							
							
								 
						
							
								28a0885929 
								
							 
						 
						
							
							
								
								No need to clear the map here, it will always be empty  
							
							... 
							
							
							
							llvm-svn: 11868 
							
						 
						
							2004-02-26 05:21:21 +00:00  
				
					
						
							
							
								 
						
							
								e62ddd405d 
								
							 
						 
						
							
							
								
								Fix bugs found with recent addition of assertions in  
							
							... 
							
							
							
							MRegisterInfo::is{Physical,Virtual}Register.
llvm-svn: 11849 
							
						 
						
							2004-02-25 23:21:52 +00:00  
				
					
						
							
							
								 
						
							
								84b76c9be0 
								
							 
						 
						
							
							
								
								Great sparc renaming fallout IV: Sparc --> SparcV9.  
							
							... 
							
							
							
							llvm-svn: 11844 
							
						 
						
							2004-02-25 22:09:36 +00:00  
				
					
						
							
							
								 
						
							
								a9f03fba9d 
								
							 
						 
						
							
							
								
								Remove asssert since it is breaking cases that it shouldn't.  
							
							... 
							
							
							
							llvm-svn: 11841 
							
						 
						
							2004-02-25 22:01:06 +00:00  
				
					
						
							
							
								 
						
							
								d8bace7f60 
								
							 
						 
						
							
							
								
								Add DenseMap template and actually use it for for mapping virtual regs  
							
							... 
							
							
							
							to objects.
llvm-svn: 11840 
							
						 
						
							2004-02-25 21:55:45 +00:00  
				
					
						
							
							
								 
						
							
								f5a393a133 
								
							 
						 
						
							
							
								
								Add an assertion  
							
							... 
							
							
							
							llvm-svn: 11830 
							
						 
						
							2004-02-25 19:37:44 +00:00