64dfcacd5f 
								
							 
						 
						
							
							
								
								Turns out AnalyzeBranch can modify the mbb being analyzed. This is a nasty  
							
							... 
							
							
							
							suprise to some callers, e.g. register coalescer. For now, add an parameter
that tells AnalyzeBranch whether it's safe to modify the mbb. A better
solution is out there, but I don't have time to deal with it right now.
llvm-svn: 64124 
							
						 
						
							2009-02-09 07:14:22 +00:00  
				
					
						
							
							
								 
						
							
								5a913d61e3 
								
							 
						 
						
							
							
								
								Rename getAnalysisToUpdate to getAnalysisIfAvailable.  
							
							... 
							
							
							
							llvm-svn: 63198 
							
						 
						
							2009-01-28 13:14:17 +00:00  
				
					
						
							
							
								 
						
							
								f87dc9264a 
								
							 
						 
						
							
							
								
								Delete unnecessary parens around return values.  
							
							... 
							
							
							
							llvm-svn: 61950 
							
						 
						
							2009-01-08 22:19:34 +00:00  
				
					
						
							
							
								 
						
							
								d8681df4e7 
								
							 
						 
						
							
							
								
								Add a newline after this debug output.  
							
							... 
							
							
							
							llvm-svn: 60861 
							
						 
						
							2008-12-10 23:24:43 +00:00  
				
					
						
							
							
								 
						
							
								ae3ba45eb2 
								
							 
						 
						
							
							
								
								Add a sanity-check to tablegen to catch the case where isSimpleLoad  
							
							... 
							
							
							
							is set but mayLoad is not set. Fix all the problems this turned up.
Change code to not use isSimpleLoad instead of mayLoad unless it
really wants isSimpleLoad.
llvm-svn: 60459 
							
						 
						
							2008-12-03 02:30:17 +00:00  
				
					
						
							
							
								 
						
							
								1d7e42c8fe 
								
							 
						 
						
							
							
								
								Increase default setting of tail-merge-threshold to  
							
							... 
							
							
							
							150, based on llvm-test measurements.
llvm-svn: 58225 
							
						 
						
							2008-10-27 02:10:21 +00:00  
				
					
						
							
							
								 
						
							
								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  
				
					
						
							
							
								 
						
							
								168f8f3916 
								
							 
						 
						
							
							
								
								Mark several codegen passes as preserving all analysis.  
							
							... 
							
							
							
							llvm-svn: 56469 
							
						 
						
							2008-09-22 20:58:04 +00:00  
				
					
						
							
							
								 
						
							
								38453eebdc 
								
							 
						 
						
							
							
								
								Remove isImm(), isReg(), and friends, in favor of  
							
							... 
							
							
							
							isImmediate(), isRegister(), and friends, to avoid confusion
about having two different names with the same meaning. I'm
not attached to the longer names, and would be ok with
changing to the shorter names if others prefer it.
llvm-svn: 56189 
							
						 
						
							2008-09-13 17:58:21 +00:00  
				
					
						
							
							
								 
						
							
								a79db30d28 
								
							 
						 
						
							
							
								
								Tidy up several unbeseeming casts from pointer to intptr_t.  
							
							... 
							
							
							
							llvm-svn: 55779 
							
						 
						
							2008-09-04 17:05:41 +00:00  
				
					
						
							
							
								 
						
							
								14714cb4fa 
								
							 
						 
						
							
							
								
								Fix SmallVector's size calculation so that a size of 0 is  
							
							... 
							
							
							
							handled correctly, and change a few SmallVector uses to use
size 0 to more clearly reflect their intent.
llvm-svn: 55181 
							
						 
						
							2008-08-22 16:07:55 +00:00  
				
					
						
							
							
								 
						
							
								4f6bf04616 
								
							 
						 
						
							
							
								
								Convert uses of std::vector in TargetInstrInfo to SmallVector.  This change had to be propoagated down into all the targets and up into all clients of this API.  
							
							... 
							
							
							
							llvm-svn: 54802 
							
						 
						
							2008-08-14 22:49:33 +00:00  
				
					
						
							
							
								 
						
							
								fa4120530e 
								
							 
						 
						
							
							
								
								Fix PR2609.  If a label is deleted, then it needs  
							
							... 
							
							
							
							to be marked invalid regardless of whether it is
a debug, an exception handling or (hopefully) a
GC label.
llvm-svn: 54172 
							
						 
						
							2008-07-29 20:56:02 +00:00  
				
					
						
							
							
								 
						
							
								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  
				
					
						
							
							
								 
						
							
								ad6b3a6ed2 
								
							 
						 
						
							
							
								
								Fix longstanding thinko:  don't exclude  
							
							... 
							
							
							
							predessors of exit blocks from tail merging
consideration.
llvm-svn: 52985 
							
						 
						
							2008-07-01 21:50:14 +00:00  
				
					
						
							
							
								 
						
							
								fb19f9402b 
								
							 
						 
						
							
							
								
								Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating  
							
							... 
							
							
							
							the need for a flavor operand, and add a new SDNode subclass,
LabelSDNode, for use with them to eliminate the need for a label id
operand.
Change instruction selection to let these label nodes through
unmodified instead of creating copies of them. Teach the MachineInstr
emitter how to emit a MachineInstr directly from an ISD label node.
This avoids the need for allocating SDNodes for the label id and
flavor value, as well as SDNodes for each of the post-isel label,
label id, and label flavor.
llvm-svn: 52943 
							
						 
						
							2008-07-01 00:05:16 +00:00  
				
					
						
							
							
								 
						
							
								6f880690b8 
								
							 
						 
						
							
							
								
								Use the transferSuccessors helper function.  
							
							... 
							
							
							
							llvm-svn: 52495 
							
						 
						
							2008-06-19 17:22:29 +00:00  
				
					
						
							
							
								 
						
							
								b28a17c346 
								
							 
						 
						
							
							
								
								Rewrite a loop to avoid using iterators pointing to  
							
							... 
							
							
							
							elements that have been erased.  Based on a patch
by Nicolas Capens.
llvm-svn: 51485 
							
						 
						
							2008-05-23 17:19:02 +00:00  
				
					
						
							
							
								 
						
							
								d78c400b5b 
								
							 
						 
						
							
							
								
								Clean up the use of static and anonymous namespaces. This turned up  
							
							... 
							
							
							
							several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017 
							
						 
						
							2008-05-13 00:00:25 +00:00  
				
					
						
							
							
								 
						
							
								9d29283fc7 
								
							 
						 
						
							
							
								
								Be more aggressive about tail-merging small blocks  
							
							... 
							
							
							
							if those blocks consist entirely of common instructions;
merging will not add an extra branch in this case.
llvm-svn: 51006 
							
						 
						
							2008-05-12 22:53:12 +00:00  
				
					
						
							
							
								 
						
							
								c4c4d8e1f7 
								
							 
						 
						
							
							
								
								Further rework of tail merge algorithm.  Not quite  
							
							... 
							
							
							
							semantically identical, but little difference in
either results or execution speed; but it's much
easier to read, at least IMO.
llvm-svn: 50999 
							
						 
						
							2008-05-12 20:33:57 +00:00  
				
					
						
							
							
								 
						
							
								66da8b5334 
								
							 
						 
						
							
							
								
								Remove an evil vector bool.  Cosmetic refactoring,  
							
							... 
							
							
							
							no functional change.
llvm-svn: 50921 
							
						 
						
							2008-05-09 23:28:24 +00:00  
				
					
						
							
							
								 
						
							
								cff7df201c 
								
							 
						 
						
							
							
								
								Rewrite tail merging algorithm to handle the  
							
							... 
							
							
							
							case where there are multiple blocks with a large
number of common tail instructions more efficiently
(compile time optimization).
llvm-svn: 50916 
							
						 
						
							2008-05-09 21:24:35 +00:00  
				
					
						
							
							
								 
						
							
								6a2da37c0e 
								
							 
						 
						
							
							
								
								Make several variable declarations static.  
							
							... 
							
							
							
							llvm-svn: 50696 
							
						 
						
							2008-05-06 01:53:16 +00:00  
				
					
						
							
							
								 
						
							
								9d339849ee 
								
							 
						 
						
							
							
								
								Teach branch folding pass about implicit_def instructions. Unfortunately we can't just eliminate them since register scavenger expects every register use to be defined. However, we can delete them when there are no intra-block uses.  Carefully removing some implicit def's which enable more blocks to be optimized away.  
							
							... 
							
							
							
							llvm-svn: 49461 
							
						 
						
							2008-04-10 02:32:10 +00:00  
				
					
						
							
							
								 
						
							
								c799065cc3 
								
							 
						 
						
							
							
								
								Add a quick and dirty "loop aligner pass". x86 uses it to align its loops to 16-byte boundaries.  
							
							... 
							
							
							
							llvm-svn: 47703 
							
						 
						
							2008-02-28 00:43:03 +00:00  
				
					
						
							
							
								 
						
							
								3266ff9a6f 
								
							 
						 
						
							
							
								
								PR1909: Tail merging pass ran wild. It makes no sense to merge blocks in order to save a single instruction since a branch will be inserted for each BB.  
							
							... 
							
							
							
							llvm-svn: 47301 
							
						 
						
							2008-02-19 02:09:37 +00:00  
				
					
						
							
							
								 
						
							
								3a4be0fdef 
								
							 
						 
						
							
							
								
								Rename MRegisterInfo to TargetRegisterInfo.  
							
							... 
							
							
							
							llvm-svn: 46930 
							
						 
						
							2008-02-10 18:45:23 +00:00  
				
					
						
							
							
								 
						
							
								70de4cb1cd 
								
							 
						 
						
							
							
								
								Use empty() instead of comparing size() with zero.  
							
							... 
							
							
							
							llvm-svn: 46514 
							
						 
						
							2008-01-29 13:02:09 +00:00  
				
					
						
							
							
								 
						
							
								03ad885039 
								
							 
						 
						
							
							
								
								rename TargetInstrDescriptor -> TargetInstrDesc.  
							
							... 
							
							
							
							Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695 
							
						 
						
							2008-01-07 07:27:27 +00:00  
				
					
						
							
							
								 
						
							
								a98c679de0 
								
							 
						 
						
							
							
								
								Rename MachineInstr::getInstrDescriptor -> getDesc(), which reflects  
							
							... 
							
							
							
							that it is cheap and efficient to get.
Move a variety of predicates from TargetInstrInfo into 
TargetInstrDescriptor, which makes it much easier to query a predicate
when you don't have TII around.  Now you can use MI->getDesc()->isBranch()
instead of going through TII, and this is much more efficient anyway. Not
all of the predicates have been moved over yet.
Update old code that used MI->getInstrDescriptor()->Flags to use the
new predicates in many places.
llvm-svn: 45674 
							
						 
						
							2008-01-07 01:56:04 +00:00  
				
					
						
							
							
								 
						
							
								a4ce4f6987 
								
							 
						 
						
							
							
								
								rename isLoad -> isSimpleLoad due to evan's desire to have such a predicate.  
							
							... 
							
							
							
							llvm-svn: 45667 
							
						 
						
							2008-01-06 23:38:27 +00:00  
				
					
						
							
							
								 
						
							
								10324d0175 
								
							 
						 
						
							
							
								
								rename isStore -> mayStore to more accurately reflect what it captures.  
							
							... 
							
							
							
							llvm-svn: 45656 
							
						 
						
							2008-01-06 08:36:04 +00:00  
				
					
						
							
							
								 
						
							
								a5bb370aa4 
								
							 
						 
						
							
							
								
								Add new shorter predicates for testing machine operands for various types:  
							
							... 
							
							
							
							e.g. MO.isMBB() instead of MO.isMachineBasicBlock().  I don't plan on 
switching everything over, so new clients should just start using the 
shorter names.
Remove old long accessors, switching everything over to use the short
accessor: getMachineBasicBlock() -> getMBB(), 
getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
llvm-svn: 45464 
							
						 
						
							2007-12-30 23:10:15 +00:00  
				
					
						
							
							
								 
						
							
								f3ebc3f3d2 
								
							 
						 
						
							
							
								
								Remove attribution from file headers, per discussion on llvmdev.  
							
							... 
							
							
							
							llvm-svn: 45418 
							
						 
						
							2007-12-29 20:36:04 +00:00  
				
					
						
							
							
								 
						
							
								d202e03fe5 
								
							 
						 
						
							
							
								
								Improve branch folding by recgonizing that explict successor relationships impact the value of fall-through choices.  
							
							... 
							
							
							
							llvm-svn: 44785 
							
						 
						
							2007-12-10 07:24:06 +00:00  
				
					
						
							
							
								 
						
							
								f73340efb9 
								
							 
						 
						
							
							
								
								Changed XXX to FIXME, and added comment to the README file  
							
							... 
							
							
							
							llvm-svn: 43359 
							
						 
						
							2007-10-25 19:49:32 +00:00  
				
					
						
							
							
								 
						
							
								5f7ed00d44 
								
							 
						 
						
							
							
								
								Added comment explaining why we are doing this check.  
							
							... 
							
							
							
							llvm-svn: 43353 
							
						 
						
							2007-10-25 18:23:45 +00:00  
				
					
						
							
							
								 
						
							
								ac5c93040f 
								
							 
						 
						
							
							
								
								Don't branch fold inline asm statements.  
							
							... 
							
							
							
							llvm-svn: 43191 
							
						 
						
							2007-10-19 21:09:55 +00:00  
				
					
						
							
							
								 
						
							
								5f6a9da530 
								
							 
						 
						
							
							
								
								More explicit keywords.  
							
							... 
							
							
							
							llvm-svn: 40757 
							
						 
						
							2007-08-02 21:21:54 +00:00  
				
					
						
							
							
								 
						
							
								d5ea194b6c 
								
							 
						 
						
							
							
								
								If assertions are not enabled, we should return False here.  
							
							... 
							
							
							
							llvm-svn: 38535 
							
						 
						
							2007-07-11 08:47:55 +00:00  
				
					
						
							
							
								 
						
							
								d9034f717a 
								
							 
						 
						
							
							
								
								Make this work with GLIBCXX_DEBUG.  
							
							... 
							
							
							
							llvm-svn: 38516 
							
						 
						
							2007-07-10 22:00:30 +00:00  
				
					
						
							
							
								 
						
							
								451d1a6ecd 
								
							 
						 
						
							
							
								
								Fix misue of iterator pointing to erased object.  Uncovered by  
							
							... 
							
							
							
							_GLIBCXX_DEBUG.
llvm-svn: 37793 
							
						 
						
							2007-06-29 02:45:24 +00:00  
				
					
						
							
							
								 
						
							
								2afd702c20 
								
							 
						 
						
							
							
								
								Move CorrectExtraCFGEdges() from BranchFolding.cpp to a MachineBasicBlock method.  
							
							... 
							
							
							
							llvm-svn: 37633 
							
						 
						
							2007-06-18 22:43:58 +00:00  
				
					
						
							
							
								 
						
							
								86798e5e11 
								
							 
						 
						
							
							
								
								Make throttle a hidden parameter, per review.  
							
							... 
							
							
							
							llvm-svn: 37511 
							
						 
						
							2007-06-08 01:08:52 +00:00  
				
					
						
							
							
								 
						
							
								52fcf022f7 
								
							 
						 
						
							
							
								
								Throttle tail merging; handling blocks with large numbers of predecessors  
							
							... 
							
							
							
							is too slow.
llvm-svn: 37509 
							
						 
						
							2007-06-08 00:34:27 +00:00  
				
					
						
							
							
								 
						
							
								0558dda319 
								
							 
						 
						
							
							
								
								Tail merging wasn't working for predecessors of landing pads.  PR 1496.  
							
							... 
							
							
							
							llvm-svn: 37427 
							
						 
						
							2007-06-04 23:52:54 +00:00  
				
					
						
							
							
								 
						
							
								df75785594 
								
							 
						 
						
							
							
								
								Move ReplaceUsesOfBlockWith() out of BranchFolding into a MachineBasicBlock general facility.  
							
							... 
							
							
							
							llvm-svn: 37408 
							
						 
						
							2007-06-04 06:44:01 +00:00  
				
					
						
							
							
								 
						
							
								6e7cdce773 
								
							 
						 
						
							
							
								
								Fix CorrectExtraCFGEdges to allow for multiple LandingPad targets.  
							
							... 
							
							
							
							llvm-svn: 37394 
							
						 
						
							2007-06-02 00:08:15 +00:00  
				
					
						
							
							
								 
						
							
								3c0a13762d 
								
							 
						 
						
							
							
								
								Implement smarter algorithm for choosing which blocks to tail-merge.  
							
							... 
							
							
							
							See test/CodeGen/X86/test-pic-jtbl.ll for a case where it works well;
shaves another 10K off our favorite benchmark.  I was hesitant about
this because of compile speed, but seems to do OK on a bootstrap.
llvm-svn: 37392 
							
						 
						
							2007-06-01 23:02:45 +00:00