You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
 | |
| ; RUN: llc < %s -mtriple=x86_64-linux -sink-insts-to-avoid-spills | FileCheck %s -check-prefix=SINK
 | |
| 
 | |
| ; Ensure that we sink copy-like instructions into loops to avoid register
 | |
| ; spills.
 | |
| 
 | |
| ; CHECK: Spill
 | |
| ; SINK-NOT: Spill
 | |
| 
 | |
| %struct.A = type { i32, i32, i32, i32, i32, i32 }
 | |
| 
 | |
| define void @_Z1fPhP1A(i8* nocapture readonly %input, %struct.A* %a) {
 | |
|   %1 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 0
 | |
|   %2 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 1
 | |
|   %3 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 2
 | |
|   %4 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 3
 | |
|   %5 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 4
 | |
|   %6 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 5
 | |
|   br label %.backedge
 | |
| 
 | |
| .backedge:
 | |
|   %.0 = phi i8* [ %input, %0 ], [ %7, %.backedge.backedge ]
 | |
|   %7 = getelementptr inbounds i8, i8* %.0, i64 1
 | |
|   %8 = load i8, i8* %7, align 1
 | |
|   switch i8 %8, label %.backedge.backedge [
 | |
|     i8 0, label %9
 | |
|     i8 10, label %10
 | |
|     i8 20, label %11
 | |
|     i8 30, label %12
 | |
|     i8 40, label %13
 | |
|     i8 50, label %14
 | |
|   ]
 | |
| 
 | |
| ; <label>:9
 | |
|   tail call void @_Z6assignPj(i32* %1)
 | |
|   br label %.backedge.backedge
 | |
| 
 | |
| ; <label>:10
 | |
|   tail call void @_Z6assignPj(i32* %2)
 | |
|   br label %.backedge.backedge
 | |
| 
 | |
| .backedge.backedge:
 | |
|   br label %.backedge
 | |
| 
 | |
| ; <label>:11
 | |
|   tail call void @_Z6assignPj(i32* %3)
 | |
|   br label %.backedge.backedge
 | |
| 
 | |
| ; <label>:12
 | |
|   tail call void @_Z6assignPj(i32* %4)
 | |
|   br label %.backedge.backedge
 | |
| 
 | |
| ; <label>:13
 | |
|   tail call void @_Z6assignPj(i32* %5)
 | |
|   br label %.backedge.backedge
 | |
| 
 | |
| ; <label>:14
 | |
|   tail call void @_Z6assignPj(i32* %6)
 | |
|   br label %.backedge.backedge
 | |
| }
 | |
| 
 | |
| declare void @_Z6assignPj(i32*)
 |