7d6f3db3e2 
								
							 
						 
						
							
							
								
								Unbreak VC++ build.  
							
							... 
							
							
							
							llvm-svn: 31464 
							
						 
						
							2006-11-05 19:31:28 +00:00  
				
					
						
							
							
								 
						
							
								de46e48420 
								
							 
						 
						
							
							
								
								For PR786:  
							
							... 
							
							
							
							Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining
issues when they see them. All changes pass DejaGnu tests and Olden.
llvm-svn: 31380 
							
						 
						
							2006-11-02 20:25:50 +00:00  
				
					
						
							
							
								 
						
							
								7cee6ddcd8 
								
							 
						 
						
							
							
								
								give branch folding a simple heuristic to decide which block to split so that  
							
							... 
							
							
							
							it inserts an uncond branch where it is less likely to cause a problem.  This
fixes some perf issues on ppc.
llvm-svn: 31354 
							
						 
						
							2006-11-01 19:36:29 +00:00  
				
					
						
							
							
								 
						
							
								f505a5a063 
								
							 
						 
						
							
							
								
								make tail merging more aggressive.  If two blocks share a common tail, but the  
							
							... 
							
							
							
							tail is not an entire block for either of them, pick one, split it, then
merge the common part.
llvm-svn: 31336 
							
						 
						
							2006-11-01 01:16:12 +00:00  
				
					
						
							
							
								 
						
							
								3ac71b31f0 
								
							 
						 
						
							
							
								
								enable branch folding with an option  
							
							... 
							
							
							
							llvm-svn: 31335 
							
						 
						
							2006-11-01 00:38:31 +00:00  
				
					
						
							
							
								 
						
							
								504eeda365 
								
							 
						 
						
							
							
								
								Make CanFallThrough more intelligent (so it can handle blocks with (e.g.) no  
							
							... 
							
							
							
							successors), and make island block movement more general.
This compiles CodeGen/X86/2006-04-27-ISelFoldingBug.ll to:
_loadAndRLEsource_no_exit_2E_1_label_2E_0:
        subl $8, %esp
        movl %esi, 4(%esp)
        movl %ebx, (%esp)
        movl 16(%esp), %eax
        movl 12(%esp), %ecx
LBB1_3: #label.0
        movl _last, %edx
        movl %edx, %esi
        incl %esi
        movl %esi, _last
        movl %ecx, %ebx
        # TRUNCATE movb %bl, %bl
        movl _block, %esi
        movb %bl, 1(%esi,%edx)
        cmpl %eax, _last
        jge LBB1_2      #codeRepl5.exitStub
LBB1_4: #label.0
        cmpl $257, %ecx
        je LBB1_2       #codeRepl5.exitStub
LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
        movl $1, %eax
        movl (%esp), %ebx
        movl 4(%esp), %esi
        addl $8, %esp
        ret
LBB1_2: #codeRepl5.exitStub
        xorl %eax, %eax
        movl (%esp), %ebx
        movl 4(%esp), %esi
        addl $8, %esp
        ret
instead of:
_loadAndRLEsource_no_exit_2E_1_label_2E_0:
        subl $8, %esp
        movl %esi, 4(%esp)
        movl %ebx, (%esp)
        movl 16(%esp), %eax
        movl 12(%esp), %ecx
        jmp LBB1_3      #label.0
LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
        movl $1, %eax
        movl (%esp), %ebx
        movl 4(%esp), %esi
        addl $8, %esp
        ret
LBB1_2: #codeRepl5.exitStub
        xorl %eax, %eax
        movl (%esp), %ebx
        movl 4(%esp), %esi
        addl $8, %esp
        ret
LBB1_3: #label.0
        movl _last, %edx
        movl %edx, %esi
        incl %esi
        movl %esi, _last
        movl %ecx, %ebx
        # TRUNCATE movb %bl, %bl
        movl _block, %esi
        movb %bl, 1(%esi,%edx)
        cmpl %eax, _last
        jge LBB1_2      #codeRepl5.exitStub
LBB1_4: #label.0
        cmpl $257, %ecx
        jne LBB1_1      #label.0.no_exit.1_crit_edge.exitStub
        jmp LBB1_2      #codeRepl5.exitStub
... which is much better layout :)
llvm-svn: 31282 
							
						 
						
							2006-10-29 21:05:41 +00:00  
				
					
						
							
							
								 
						
							
								c07657f59b 
								
							 
						 
						
							
							
								
								Teach branch folding to fold identical jump tables together and to delete  
							
							... 
							
							
							
							jump tables that are dead.
llvm-svn: 31273 
							
						 
						
							2006-10-28 18:34:47 +00:00  
				
					
						
							
							
								 
						
							
								af8383806b 
								
							 
						 
						
							
							
								
								improve deletion of blocks that just contain branches by knowing that  
							
							... 
							
							
							
							the pred block doesn't fall through into them if it's a jumptable.
llvm-svn: 31263 
							
						 
						
							2006-10-28 17:32:47 +00:00  
				
					
						
							
							
								 
						
							
								0d4479b77d 
								
							 
						 
						
							
							
								
								simplify code  
							
							... 
							
							
							
							llvm-svn: 31188 
							
						 
						
							2006-10-25 22:21:37 +00:00  
				
					
						
							
							
								 
						
							
								9feb308d51 
								
							 
						 
						
							
							
								
								turn off tail merging for now  
							
							... 
							
							
							
							llvm-svn: 31180 
							
						 
						
							2006-10-25 18:08:50 +00:00  
				
					
						
							
							
								 
						
							
								ceb51d8427 
								
							 
						 
						
							
							
								
								move single basic blocks that are neither fallen into nor fall out of into  
							
							... 
							
							
							
							a place more useful.  In particular, if we can put them in a place where code
will be able to fall into it, do so.  Otherwise, put it in a place it can fall
through into a successor.  Otherwise, if preventing a fallthrough, move to the
end of the function, out of the way.
This deletes several hundred unconditional branches from spass.
llvm-svn: 31149 
							
						 
						
							2006-10-24 01:12:32 +00:00  
				
					
						
							
							
								 
						
							
								ebdb1d6724 
								
							 
						 
						
							
							
								
								Enable tail merging by default.  
							
							... 
							
							
							
							llvm-svn: 31140 
							
						 
						
							2006-10-23 22:10:12 +00:00  
				
					
						
							
							
								 
						
							
								5e1a34032b 
								
							 
						 
						
							
							
								
								More complete solution to deleting blocks and debug info.  
							
							... 
							
							
							
							llvm-svn: 31129 
							
						 
						
							2006-10-23 14:56:37 +00:00  
				
					
						
							
							
								 
						
							
								9f5a129543 
								
							 
						 
						
							
							
								
								don't break infinite loops  
							
							... 
							
							
							
							llvm-svn: 31102 
							
						 
						
							2006-10-21 06:11:43 +00:00  
				
					
						
							
							
								 
						
							
								28f17f45be 
								
							 
						 
						
							
							
								
								Use branch reversal to do stuff like this:  
							
							... 
							
							
							
							call L_strcmp$stub
        testl %eax, %eax
-       jne LBB26_208   #cond_true6020
-       jmp LBB26_227   #bb7119
+       je LBB26_227    #bb7119
 LBB26_208:     #cond_true6020
        movl $l31_str14, 4(%esp)
        testl %eax, %eax
-       jne LBB26_704   #cond_true13042
-       jmp LBB26_713   #bb13151
+       je LBB26_713    #bb13151
 LBB26_704:     #cond_true13042
        movl $_str52, 4(%esp)
        cmpl 76(%ecx), %eax
-       jge LBB26_1628  #cond_false63.i.i
-       jmp LBB26_1769  #_Z8makeGridP13mrSurfaceListidiidd.exit.i
+       jl LBB26_1769   #_Z8makeGridP13mrSurfaceListidiidd.exit.i
 LBB26_1628:    #cond_false63.i.i
        movl $0, 48964(%esp)
llvm-svn: 31100 
							
						 
						
							2006-10-21 05:54:00 +00:00  
				
					
						
							
							
								 
						
							
								3ca52185af 
								
							 
						 
						
							
							
								
								Transform code like:  
							
							... 
							
							
							
							jle FOO
  jmp BAR
BAR:
into:
  jle FOO
BAR:
... whoa!
llvm-svn: 31098 
							
						 
						
							2006-10-21 05:43:30 +00:00  
				
					
						
							
							
								 
						
							
								4fe01c42ca 
								
							 
						 
						
							
							
								
								Three changes:  
							
							... 
							
							
							
							1. Remove a bunch of ifdef'd code.
2. When a block just contains an uncond branch, change all blocks branching
   to it to jump to the destination instead.
3. If branch analysis tells us some edges in the machinecfg are not actually
   possible, remove them.
#2  triggers a suprisingly large number of times.
llvm-svn: 31094 
							
						 
						
							2006-10-21 05:08:28 +00:00  
				
					
						
							
							
								 
						
							
								60c9d4dc76 
								
							 
						 
						
							
							
								
								Add an experimental cross-jumping implementation.  
							
							... 
							
							
							
							This is currently disabled by default and limited in several ways, but does
have a positive effect.
llvm-svn: 31090 
							
						 
						
							2006-10-21 00:47:49 +00:00  
				
					
						
							
							
								 
						
							
								73da320e50 
								
							 
						 
						
							
							
								
								Teach the branch folder to update debug info if it removes blocks with line  
							
							... 
							
							
							
							# notes in it.
llvm-svn: 31026 
							
						 
						
							2006-10-17 23:17:27 +00:00  
				
					
						
							
							
								 
						
							
								bca3e297fe 
								
							 
						 
						
							
							
								
								Enable deleting branches to successor blocks.  With the previous patches,  
							
							... 
							
							
							
							branch folding can now compile stuff like this:
void foo(int W, int X, int Y, int Z) {
  if (W & 1) {
    for (; X;--X) bar();
  } else if (W & 2) {
    for (; Y;--Y) bar();
  } else if (W & 4) {
    for (; Z;--Z) bar();
  } else if (W & 8) {
    for (; W;--W) bar();
  }
  if (W) {
    bar();
  }
}
contrived testcase where loops exits all end up merging together.  To have
the loop merges be:
...
        cmplw cr0, r30, r27
        bne cr0, LBB1_14        ;bb38
LBB1_16:        ;cond_next48.loopexit
        mr r27, r29
LBB1_20:        ;cond_next48
        cmplwi cr0, r27, 0
        beq cr0, LBB1_22        ;UnifiedReturnBlock
...
instead of:
...
        cmplw cr0, r30, r27
        bne cr0, LBB1_14        ;bb38
LBB1_16:        ;cond_next48.loopexit
        mr r27, r29
        b LBB1_20       ;cond_next48
LBB1_17:        ;cond_next48.loopexit1
        b LBB1_20       ;cond_next48
LBB1_18:        ;cond_next48.loopexit2
        b LBB1_20       ;cond_next48
LBB1_19:        ;cond_next48.loopexit3
LBB1_20:        ;cond_next48
        cmplwi cr0, r27, 0
        beq cr0, LBB1_22        ;UnifiedReturnBlock
...
This is CodeGen/PowerPC/branch-opt.ll
llvm-svn: 31006 
							
						 
						
							2006-10-17 18:16:40 +00:00  
				
					
						
							
							
								 
						
							
								56c9d2597e 
								
							 
						 
						
							
							
								
								Reenable this pass, fixing the bugs in it.  
							
							... 
							
							
							
							It now correctly deletes unreachable blocks and blocks that are empty.
llvm-svn: 31000 
							
						 
						
							2006-10-17 17:13:52 +00:00  
				
					
						
							
							
								 
						
							
								47db29a405 
								
							 
						 
						
							
							
								
								disable this pass for now, it's causing issues  
							
							... 
							
							
							
							llvm-svn: 30951 
							
						 
						
							2006-10-14 00:30:06 +00:00  
				
					
						
							
							
								 
						
							
								3218e0eed5 
								
							 
						 
						
							
							
								
								falling off the end of a function is ok with an unreachable instruction.  
							
							... 
							
							
							
							llvm-svn: 30950 
							
						 
						
							2006-10-14 00:21:48 +00:00  
				
					
						
							
							
								 
						
							
								3e8e57c771 
								
							 
						 
						
							
							
								
								disable some objectionable code, maybe we can bring this pass to life  
							
							... 
							
							
							
							llvm-svn: 30939 
							
						 
						
							2006-10-13 20:43:10 +00:00  
				
					
						
							
							
								 
						
							
								835702a094 
								
							 
						 
						
							
							
								
								Remove trailing whitespace  
							
							... 
							
							
							
							llvm-svn: 21420 
							
						 
						
							2005-04-21 22:36:52 +00:00  
				
					
						
							
							
								 
						
							
								7c16caa336 
								
							 
						 
						
							
							
								
								Changes For Bug 352  
							
							... 
							
							
							
							Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137 
							
						 
						
							2004-09-01 22:55:40 +00:00  
				
					
						
							
							
								 
						
							
								356f5a13f5 
								
							 
						 
						
							
							
								
								Dereferencing end() is bad.  
							
							... 
							
							
							
							llvm-svn: 15402 
							
						 
						
							2004-08-01 09:51:42 +00:00  
				
					
						
							
							
								 
						
							
								62c979ba07 
								
							 
						 
						
							
							
								
								Make OptimizeBlock take a MachineFunction::iterator instead of a  
							
							... 
							
							
							
							MachineBasicBlock* as a parameter so that nxext() and prior() helper
functions can work naturally on it.
llvm-svn: 15376 
							
						 
						
							2004-07-31 19:24:41 +00:00  
				
					
						
							
							
								 
						
							
								0f1c2ed907 
								
							 
						 
						
							
							
								
								Next on a pointer increments the pointer, not an iterator  
							
							... 
							
							
							
							llvm-svn: 15375 
							
						 
						
							2004-07-31 18:40:36 +00:00  
				
					
						
							
							
								 
						
							
								2303d3f660 
								
							 
						 
						
							
							
								
								Use next() helper to make code more readable. Use  
							
							... 
							
							
							
							MachineFunction::iterator instead of MachineBasicBlock* to avoid
dereferencing end iterators.
llvm-svn: 15373 
							
						 
						
							2004-07-31 15:14:29 +00:00  
				
					
						
							
							
								 
						
							
								1e8d8fd81f 
								
							 
						 
						
							
							
								
								Use MachineFunction::iterator instead of a MachineBasicBlock* because  
							
							... 
							
							
							
							FallThrough maybe == to MF.end().
llvm-svn: 15372 
							
						 
						
							2004-07-31 15:03:52 +00:00  
				
					
						
							
							
								 
						
							
								25e48dd2e0 
								
							 
						 
						
							
							
								
								Implement a simple target-independent CFG cleanup pass  
							
							... 
							
							
							
							llvm-svn: 15368 
							
						 
						
							2004-07-31 10:01:27 +00:00