mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	header is just the entry block to the loop, and it needn't be at the top of the loop in the code layout. Remove the code that suppressed loop alignment for outer loops, so that outer loops are aligned. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84158 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -march=x86 | grep align | count 4
 | |
| 
 | |
| ; TODO: Is it a good idea to align inner loops? It's hard to know without
 | |
| ; knowing what their trip counts are, or other dynamic information. For
 | |
| ; now, CodeGen aligns all loops.
 | |
| 
 | |
| @x = external global i32*		; <i32**> [#uses=1]
 | |
| 
 | |
| define i32 @t(i32 %a, i32 %b) nounwind readonly ssp {
 | |
| entry:
 | |
| 	%0 = icmp eq i32 %a, 0		; <i1> [#uses=1]
 | |
| 	br i1 %0, label %bb5, label %bb.nph12
 | |
| 
 | |
| bb.nph12:		; preds = %entry
 | |
| 	%1 = icmp eq i32 %b, 0		; <i1> [#uses=1]
 | |
| 	%2 = load i32** @x, align 8		; <i32*> [#uses=1]
 | |
| 	br i1 %1, label %bb2.preheader, label %bb2.preheader.us
 | |
| 
 | |
| bb2.preheader.us:		; preds = %bb2.bb3_crit_edge.us, %bb.nph12
 | |
| 	%indvar18 = phi i32 [ 0, %bb.nph12 ], [ %indvar.next19, %bb2.bb3_crit_edge.us ]		; <i32> [#uses=2]
 | |
| 	%sum.111.us = phi i32 [ 0, %bb.nph12 ], [ %4, %bb2.bb3_crit_edge.us ]		; <i32> [#uses=0]
 | |
| 	%tmp16 = mul i32 %indvar18, %a		; <i32> [#uses=1]
 | |
| 	br label %bb1.us
 | |
| 
 | |
| bb1.us:		; preds = %bb1.us, %bb2.preheader.us
 | |
| 	%indvar = phi i32 [ 0, %bb2.preheader.us ], [ %indvar.next, %bb1.us ]		; <i32> [#uses=2]
 | |
| 	%tmp17 = add i32 %indvar, %tmp16		; <i32> [#uses=1]
 | |
| 	%tmp. = zext i32 %tmp17 to i64		; <i64> [#uses=1]
 | |
| 	%3 = getelementptr i32* %2, i64 %tmp.		; <i32*> [#uses=1]
 | |
| 	%4 = load i32* %3, align 4		; <i32> [#uses=2]
 | |
| 	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=2]
 | |
| 	%exitcond = icmp eq i32 %indvar.next, %b		; <i1> [#uses=1]
 | |
| 	br i1 %exitcond, label %bb2.bb3_crit_edge.us, label %bb1.us
 | |
| 
 | |
| bb2.bb3_crit_edge.us:		; preds = %bb1.us
 | |
| 	%indvar.next19 = add i32 %indvar18, 1		; <i32> [#uses=2]
 | |
| 	%exitcond22 = icmp eq i32 %indvar.next19, %a		; <i1> [#uses=1]
 | |
| 	br i1 %exitcond22, label %bb5, label %bb2.preheader.us
 | |
| 
 | |
| bb2.preheader:		; preds = %bb2.preheader, %bb.nph12
 | |
| 	%indvar24 = phi i32 [ %indvar.next25, %bb2.preheader ], [ 0, %bb.nph12 ]		; <i32> [#uses=1]
 | |
| 	%indvar.next25 = add i32 %indvar24, 1		; <i32> [#uses=2]
 | |
| 	%exitcond28 = icmp eq i32 %indvar.next25, %a		; <i1> [#uses=1]
 | |
| 	br i1 %exitcond28, label %bb5, label %bb2.preheader
 | |
| 
 | |
| bb5:		; preds = %bb2.preheader, %bb2.bb3_crit_edge.us, %entry
 | |
| 	%sum.1.lcssa = phi i32 [ 0, %entry ], [ 0, %bb2.preheader ], [ %4, %bb2.bb3_crit_edge.us ]		; <i32> [#uses=1]
 | |
| 	ret i32 %sum.1.lcssa
 | |
| }
 |