Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								471ba48cb9 
								
							 
						 
						
							
							
								
								remove some uses of llvm/Support/Streams.h  
							
							 
							
							... 
							
							
							
							llvm-svn: 79842 
							
						 
						
							2009-08-23 08:43:55 +00:00  
						
					 
				
					
						
							
							
								 
								Daniel Dunbar
							
						 
						
							 
							
							
							
							
								
							
							
								796e43eede 
								
							 
						 
						
							
							
								
								Move more to raw_ostream, provide support for writing MachineBasicBlock,  
							
							 
							
							... 
							
							
							
							LiveInterval, etc to raw_ostream.
llvm-svn: 76965 
							
						 
						
							2009-07-24 10:36:58 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								1283c6a066 
								
							 
						 
						
							
							
								
								Part 1.  
							
							 
							
							... 
							
							
							
							- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent.
- Allow targets to specify alternative register allocation orders based on allocation hint.
Part 2.
- Use the register allocation hint system to implement more aggressive load / store multiple formation.
- Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g.
v1025 = LDR v1024, 0
v1026 = LDR v1024, 0
=>
v1025,v1026 = LDRD v1024, 0
If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair.
- Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions.
This is work in progress, not yet enabled.
llvm-svn: 73381 
							
						 
						
							2009-06-15 08:28:29 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								085caf10be 
								
							 
						 
						
							
							
								
								Move register allocation preference (or hint) from LiveInterval to MachineRegisterInfo. This allows more passes to set them.  
							
							 
							
							... 
							
							
							
							llvm-svn: 73346 
							
						 
						
							2009-06-14 20:22:55 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								3f77805642 
								
							 
						 
						
							
							
								
								Make sure to color with only allocatable registers for the specific register class.  
							
							 
							
							... 
							
							
							
							llvm-svn: 70821 
							
						 
						
							2009-05-04 03:30:11 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								210fc62a91 
								
							 
						 
						
							
							
								
								In some rare cases, the register allocator can spill registers but end up not utilizing registers at all. The fundamental problem is linearscan's backtracking can end up freeing more than one allocated registers. However,  reloads and restores might be folded into uses / defs and freed registers might not be used at all.  
							
							 
							
							... 
							
							
							
							VirtRegMap keeps track of allocations so it knows what's not used. As a horrible hack, the stack coloring can color spill slots with *free* registers. That is, it replace reload and spills with copies from and to the free register. It unfold instructions that load and store the spill slot and replace them with register using variants.
Not yet enabled. This is part 1. More coming.
llvm-svn: 70787 
							
						 
						
							2009-05-03 18:32:42 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								b8017e02ca 
								
							 
						 
						
							
							
								
								Oy! When reverting r68073, I added in experimental code. Sorry...  
							
							 
							
							... 
							
							
							
							llvm-svn: 68099 
							
						 
						
							2009-03-31 08:41:31 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								c4b08e5eb0 
								
							 
						 
						
							
							
								
								Revert r68073. It's causing a failure in the Apple-style builds.  
							
							 
							
							... 
							
							
							
							llvm-svn: 68092 
							
						 
						
							2009-03-31 08:26:26 +00:00  
						
					 
				
					
						
							
							
								 
								Daniel Dunbar
							
						 
						
							 
							
							
							
							
								
							
							
								f24f26c75a 
								
							 
						 
						
							
							
								
								Add newlines at end of file (this can annoy gcov)  
							
							 
							
							... 
							
							
							
							llvm-svn: 67000 
							
						 
						
							2009-03-14 01:53:05 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								d37ddf5b5b 
								
							 
						 
						
							
							
								
								Convert VirtRegMap to a MachineFunctionPass.  
							
							 
							
							... 
							
							
							
							llvm-svn: 66870 
							
						 
						
							2009-03-13 05:55:11 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								aabe06d92a 
								
							 
						 
						
							
							
								
								Reorganization: Move the Spiller out of VirtRegMap.cpp into its own files.  No (intended) functionality change.  
							
							 
							
							... 
							
							
							
							llvm-svn: 66720 
							
						 
						
							2009-03-11 22:31:21 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								fb8ded911e 
								
							 
						 
						
							
							
								
								Yet another case where the spiller marked two uses of the same register on the same instruction as kill. This fixes PR3706.  
							
							 
							
							... 
							
							
							
							llvm-svn: 66428 
							
						 
						
							2009-03-09 19:00:05 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								de22116f39 
								
							 
						 
						
							
							
								
								If a MI uses the same register more than once, only mark one of them as 'kill'.  
							
							 
							
							... 
							
							
							
							llvm-svn: 66363 
							
						 
						
							2009-03-08 03:58:35 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								398dee1c4a 
								
							 
						 
						
							
							
								
								Last commit accidentially deleted this code.  
							
							 
							
							... 
							
							
							
							llvm-svn: 65679 
							
						 
						
							2009-02-28 06:02:14 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								ca2d65467b 
								
							 
						 
						
							
							
								
								The last commit was overly conservative. It's ok to reuse value that's already marked livein.  
							
							 
							
							... 
							
							
							
							llvm-svn: 65498 
							
						 
						
							2009-02-26 03:02:21 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								ee5fd035e2 
								
							 
						 
						
							
							
								
								If an available register falls through to a succ block, unset the last kill. Sorry, it's impossible to reduce a sensible test case. It basically requires the moon and stars to align in order to cause a failure.  
							
							 
							
							... 
							
							
							
							llvm-svn: 65497 
							
						 
						
							2009-02-26 02:30:42 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								f505cd5ebb 
								
							 
						 
						
							
							
								
								A couple of places where reused use operands should be marked kill. This is exposed by recent availability fallthrough changes.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64745 
							
						 
						
							2009-02-17 06:41:03 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								65c0fd4c44 
								
							 
						 
						
							
							
								
								Revert this. It was breaking stuff.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64428 
							
						 
						
							2009-02-13 02:16:35 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								1c21ac3066 
								
							 
						 
						
							
							
								
								Turn off the old way of handling debug information in the code generator. Use  
							
							 
							
							... 
							
							
							
							the new way, where all of the information is passed on SDNodes and machine
instructions.
llvm-svn: 64427 
							
						 
						
							2009-02-13 02:01:04 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								e366c29fa0 
								
							 
						 
						
							
							
								
								Adjust the sizes for a few SmallVectors to reflect their usage.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64381 
							
						 
						
							2009-02-12 17:29:01 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								cf5cd6ecfe 
								
							 
						 
						
							
							
								
								It's (currently) not safe to keep certain physical registers live across basic blocks, e.g. x86 fp stack registers.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64374 
							
						 
						
							2009-02-12 10:32:17 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								8b39b545a9 
								
							 
						 
						
							
							
								
								If availability info is kept when fallthrough into a bb, add the available registers to live-in set.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64372 
							
						 
						
							2009-02-12 09:43:23 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								eb5ec4a0db 
								
							 
						 
						
							
							
								
								Remove a bogus assertion. It's possible a live-in available value is used by a previous instruction.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64339 
							
						 
						
							2009-02-11 23:41:57 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								a1968b0fc7 
								
							 
						 
						
							
							
								
								Implement PR3495: local spiller optimization. The local spiller can now keep availability information over BB boundaries. It visits BB's in depth first order. After visiting a BB if it find a successor which has a single predecessor it visits the successor next without clearing the availability information. This allows the successor to omit reloads or change them into copies.  
							
							 
							
							... 
							
							
							
							llvm-svn: 64298 
							
						 
						
							2009-02-11 08:24:21 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								67cd395d45 
								
							 
						 
						
							
							
								
								Explicitly pass in debug location information to BuildMI.  
							
							 
							
							... 
							
							
							
							llvm-svn: 63599 
							
						 
						
							2009-02-03 02:29:34 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								c544cb0eca 
								
							 
						 
						
							
							
								
								Change TargetInstrInfo::isMoveInstr to return source and destination sub-register indices as well.  
							
							 
							
							... 
							
							
							
							llvm-svn: 62600 
							
						 
						
							2009-01-20 19:12:24 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								1718fd4375 
								
							 
						 
						
							
							
								
								Fix PR3124: overly strict assert.  
							
							 
							
							... 
							
							
							
							llvm-svn: 60392 
							
						 
						
							2008-12-02 02:15:36 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								94169f1021 
								
							 
						 
						
							
							
								
								Fix PR2898. Spiller delete a store for reuse before it knows for sure the reuse happened.  
							
							 
							
							... 
							
							
							
							Patch by Lang Hames!
llvm-svn: 57720 
							
						 
						
							2008-10-17 20:56:41 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								08acb24225 
								
							 
						 
						
							
							
								
								Fix a very subtle spiller bug: UpdateKills should not forget to track defs of aliases.  
							
							 
							
							... 
							
							
							
							llvm-svn: 57673 
							
						 
						
							2008-10-17 06:16:07 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								9c4b7d5c4f 
								
							 
						 
						
							
							
								
								Fix command-line option printing to print two spaces where needed,  
							
							 
							
							... 
							
							
							
							instead of requiring all "short description" strings to begin with
two spaces. This makes these strings less mysterious, and it fixes
some cases where short description strings mistakenly did not
begin with two spaces.
llvm-svn: 57521 
							
						 
						
							2008-10-14 20:25:08 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								dfe979bcb0 
								
							 
						 
						
							
							
								
								Don't dereference the end() iterator. Thanks to  
							
							 
							
							... 
							
							
							
							ENABLE_EXPENSIVE_CHECKS for finding this.
llvm-svn: 57181 
							
						 
						
							2008-10-06 18:00:07 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								0d1e9a8e04 
								
							 
						 
						
							
							
								
								Switch the MachineOperand accessors back to the short names like  
							
							 
							
							... 
							
							
							
							isReg, etc., from isRegister, etc.
llvm-svn: 57006 
							
						 
						
							2008-10-03 15:45:36 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								b401449ceb 
								
							 
						 
						
							
							
								
								Propagate subreg index when promoting a load to a copy.  
							
							 
							
							... 
							
							
							
							llvm-svn: 56085 
							
						 
						
							2008-09-11 01:02:12 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								534fe1c405 
								
							 
						 
						
							
							
								
								Fix PR2664 - spiller GetRegForReload wasn't respecting sub-register indices on machine operands.  
							
							 
							
							... 
							
							
							
							llvm-svn: 56065 
							
						 
						
							2008-09-10 20:08:45 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								93d40ae1e1 
								
							 
						 
						
							
							
								
								Fix an overly strict assertion. Source register of a copy may not be killed, it may be killed by an implicit super-register use.  
							
							 
							
							... 
							
							
							
							llvm-svn: 55762 
							
						 
						
							2008-09-04 05:43:55 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								7f3bfbd23b 
								
							 
						 
						
							
							
								
								Make SimpleSpiller respect subregister indices.  
							
							 
							
							... 
							
							
							
							llvm-svn: 54968 
							
						 
						
							2008-08-19 01:05:33 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								aa33b932bd 
								
							 
						 
						
							
							
								
								Fix PR2596: out of bound reference.  
							
							 
							
							... 
							
							
							
							llvm-svn: 54375 
							
						 
						
							2008-08-05 21:51:46 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								597bd1633e 
								
							 
						 
						
							
							
								
								Fix a LocalSpiller leak. This fixes tramp3d-v4.  
							
							 
							
							... 
							
							
							
							llvm-svn: 53766 
							
						 
						
							2008-07-18 18:28:56 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								3b46030375 
								
							 
						 
						
							
							
								
								Pool-allocation for MachineInstrs, MachineBasicBlocks, and  
							
							 
							
							... 
							
							
							
							MachineMemOperands. The pools are owned by MachineFunctions.
This drastically reduces the number of calls to malloc/free made
during the "Emit" phase of scheduling, as well as later phases
in CodeGen. Combined with other changes, this speeds up the
"instruction selection" phase of CodeGen by 10% in some cases.
llvm-svn: 53212 
							
						 
						
							2008-07-07 23:14:23 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								50d59478da 
								
							 
						 
						
							
							
								
								Cosmetic.  
							
							 
							
							... 
							
							
							
							llvm-svn: 52450 
							
						 
						
							2008-06-18 07:47:28 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								51c75c0c95 
								
							 
						 
						
							
							
								
								Fix read after free found by valgrind.  
							
							 
							
							... 
							
							
							
							llvm-svn: 52309 
							
						 
						
							2008-06-16 07:34:17 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								fb79059b85 
								
							 
						 
						
							
							
								
								Teach the spiller to commute instructions in order to fold a reload. This hits 410 times on 444.namd and 122 times on 252.eon.  
							
							 
							
							... 
							
							
							
							llvm-svn: 52266 
							
						 
						
							2008-06-13 23:58:02 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								eecdf659e8 
								
							 
						 
						
							
							
								
								Move #include to right place.  
							
							 
							
							... 
							
							
							
							llvm-svn: 51932 
							
						 
						
							2008-06-04 09:16:33 +00:00  
						
					 
				
					
						
							
							
								 
								Bill Wendling
							
						 
						
							 
							
							
							
							
								
							
							
								6e326bf0fb 
								
							 
						 
						
							
							
								
								Remove warnings about comparison between signed and unsigned expressions.  
							
							 
							
							... 
							
							
							
							llvm-svn: 51465 
							
						 
						
							2008-05-23 01:29:08 +00:00  
						
					 
				
					
						
							
							
								 
								David Greene
							
						 
						
							 
							
							
							
							
								
							
							
								54b52fe13b 
								
							 
						 
						
							
							
								
								Don't attempt to update SpillSlotToUsesMap for stack slots that aren't  
							
							 
							
							... 
							
							
							
							generated by the spiller.
llvm-svn: 51439 
							
						 
						
							2008-05-22 21:12:21 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								0609ab646b 
								
							 
						 
						
							
							
								
								More local spiller complexity!  
							
							 
							
							... 
							
							
							
							If local spiller optimization turns some instruction into an identity copy, it will be removed. If the output register happens to be dead (and source is obviously killed), transfer the kill / dead information to last use / def in the same MBB.
llvm-svn: 51306 
							
						 
						
							2008-05-20 08:13:21 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								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  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								7ca4a67ca1 
								
							 
						 
						
							
							
								
								Yet another nasty spiller bug.  
							
							 
							
							... 
							
							
							
							%ecx = op
store %cl<kill>, (addr)
(addr) = op %al
It's not safe to unfold the last operand and eliminate store even though %cl is marked kill. It's a sub-register use which means one of its super-register(s) may be used below.
llvm-svn: 50794 
							
						 
						
							2008-05-07 00:49:28 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								499ffa9055 
								
							 
						 
						
							
							
								
								Use of implicit_def is not part of live interval. Create empty intervals for the uses when the live interval is being spilled.  
							
							 
							
							... 
							
							
							
							llvm-svn: 49542 
							
						 
						
							2008-04-11 17:53:36 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								ed6e34fe41 
								
							 
						 
						
							
							
								
								Move reMaterialize() from TargetRegisterInfo to TargetInstrInfo.  
							
							 
							
							... 
							
							
							
							llvm-svn: 48995 
							
						 
						
							2008-03-31 20:40:39 +00:00