Jakob Stoklund Olesen 
							
						 
					 
					
						
						
							
						
						0bc25f4040 
					 
					
						
						
							
							Convert EXTRACT_SUBREG to COPY when emitting machine instrs.  
						
						... 
						
						
						
						EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead.
Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg().
The isMoveInstr hook will be removed later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107879  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-08 16:40:22 +00:00 
						 
				 
			
				
					
						
							
							
								Jakob Stoklund Olesen 
							
						 
					 
					
						
						
							
						
						273f7e4299 
					 
					
						
						
							
							Detect and handle COPY in many places.  
						
						... 
						
						
						
						This code is transitional, it will soon be possible to eliminate
isExtractSubreg, isInsertSubreg, and isMoveInstr in most places.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107547  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-03 00:04:37 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						2b4e727c6f 
					 
					
						
						
							
							Re-apply 105308 with fix.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105502  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-06-04 23:28:13 +00:00 
						 
				 
			
				
					
						
							
							
								Bob Wilson 
							
						 
					 
					
						
						
							
						
						3844173f6e 
					 
					
						
						
							
							Revert 105308.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105399  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-06-03 18:28:31 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						9d709a8edb 
					 
					
						
						
							
							Enable machine cse of instructions which define physical registers.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105308  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-06-02 01:08:27 +00:00 
						 
				 
			
				
					
						
							
							
								Eric Christopher 
							
						 
					 
					
						
						
							
						
						e81d010589 
					 
					
						
						
							
							Make this LookAheadLimit, not the uninitialized LookAheadLeft.  
						
						... 
						
						
						
						Evan please verify!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104408  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-21 23:40:03 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						835810bbf8 
					 
					
						
						
							
							Allow machine cse to cse instructions which define physical registers. Controlled by option -machine-cse-phys-defs.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104385  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-21 21:22:19 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						49b4589978 
					 
					
						
						
							
							Add a utility function for conservatively clearing kill flags, and make  
						
						... 
						
						
						
						use of it in MachineCSE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103726  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-13 19:24:00 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						3115698611 
					 
					
						
						
							
							Rewrite machine cse to avoid recursion.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101964  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-04-21 00:21:07 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						d6060a4ce9 
					 
					
						
						
							
							Typo.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101914  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-04-20 17:27:38 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						db8771af28 
					 
					
						
						
							
							After trivial coalescing, the MI being visited may have become a copy. Avoid adding it to CSE hash table since copies aren't being considered for CSE and they may be deleted.  
						
						... 
						
						
						
						rdar://7819990
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100170  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-04-02 02:21:24 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						2250425d6e 
					 
					
						
						
							
							dbg_value may end a block.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99378  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-24 01:50:28 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						112e5e7eff 
					 
					
						
						
							
							Code clean up.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99319  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-23 20:33:48 +00:00 
						 
				 
			
				
					
						
							
							
								Dale Johannesen 
							
						 
					 
					
						
						
							
						
						e68ea060c7 
					 
					
						
						
							
							Fix debug_value handling.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98224  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-11 02:10:24 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						2938a00f29 
					 
					
						
						
							
							Add a couple more heuristics to neuter machine cse some more.  
						
						... 
						
						
						
						1. Be careful with cse "cheap" expressions. e.g. constant materialization. Only cse them when the common expression is local or in a direct predecessor. We don't want cse of cheap instruction causing other expressions to be spilled.
2. Watch out for the case where the expression doesn't itself uses a virtual register. e.g. lea of frame object. If the common expression itself is used by copies (common for passing addresses to function calls), don't perform the cse. Since these expressions do not use a register, it creates a live range but doesn't close any, we want to be very careful with increasing register pressure.
Note these are heuristics so machine cse doesn't make register allocator unhappy. Once we have proper live range splitting and re-materialization support in place, these should be evaluated again.
Now machine cse is almost always a win on llvm nightly tests on x86 and x86_64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98121  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-10 02:12:03 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						bfc9999563 
					 
					
						
						
							
							Allow more cross-rc coalescing.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98048  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-09 06:38:17 +00:00 
						 
				 
			
				
					
						
							
							
								Jakob Stoklund Olesen 
							
						 
					 
					
						
						
							
						
						1552cccc76 
					 
					
						
						
							
							Don't do illegal cross-class coalescing.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98044  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-09 03:56:06 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						31f94c7c22 
					 
					
						
						
							
							- Make the machine cse dumb coalescer (as opposed to the more awesome simple  
						
						... 
						
						
						
						coalescer) handle sub-register classes.
- Add heuristics to avoid non-profitable cse. Given the current lack of live
  range splitting, avoid cse when an expression has PHI use and the would be
  new use is in a BB where the expression wasn't already being used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98043  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-09 03:21:12 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						5196018d9c 
					 
					
						
						
							
							Don't waste time trying to CSE labels, phis, inline asm. Definitely avoid cse implicit-def for obvious performance reason.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98009  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-08 23:49:12 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						6c3b8ac6c9 
					 
					
						
						
							
							Restrict machine cse to really trivial coalescing. Leave the heavy lifting to a real coalescer.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98007  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-08 23:28:08 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						6cc1aeaad2 
					 
					
						
						
							
							Don't update physical register def.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97861  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-06 01:14:19 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						a5f32cb3d3 
					 
					
						
						
							
							Avoid cse load instructions unless they are known to be invariant loads.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97747  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-04 21:18:08 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						b3958e8032 
					 
					
						
						
							
							Look ahead a bit to determine if a physical register def that is not marked dead is really alive. This is necessary to catch a lot of common cse opportunities for targets like x86.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97706  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-04 01:33:55 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						67bda7215b 
					 
					
						
						
							
							Fix a logic error. An instruction that has a live physical register def cannot be CSE'ed, but it *can* be used to replace a common subexpression.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97688  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 23:59:08 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						05bdcbb1ae 
					 
					
						
						
							
							Re-apply r97667 but with a little bit of thought put into the patch. This implements a special DenseMapInfo trait for DenseMap<MachineInstr*> that compare the value of the MachineInstr rather than the pointer value. Since the hashing and equality test functions ignore defs it's useful for doing CSE kind optimization.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97678  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 23:27:36 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						319dfa3fb3 
					 
					
						
						
							
							Revert 97667. It broke a bunch of tests.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97673  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 22:40:03 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						a054ae02fd 
					 
					
						
						
							
							Move DenseMapInfo for MachineInstr* to MachineInstr.h  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97667  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 21:47:16 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						16b48b8a05 
					 
					
						
						
							
							Machine CSE work in progress. It's doing some CSE now. But implicit def of physical registers are getting in the way.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97664  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 21:20:05 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						6ba9554988 
					 
					
						
						
							
							Work in progress. Finding some cse now.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97635  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 02:48:20 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						c5bbba1e49 
					 
					
						
						
							
							Fix typo.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97577  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-02 19:02:27 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						c6fe333688 
					 
					
						
						
							
							Add skeleton of a machine level cse pass.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97543  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-02 02:38:24 +00:00