mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	formal arguments on the stack and stores created afterwards. We need this to ensure tail call optimized function calls do not write over the argument area of the stack before it is read out. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194309 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			35 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc -march=mips < %s | FileCheck %s
 | |
| 
 | |
| define void @f1(i64 %ll1, float %f, i64 %ll, i32 %i, float %f2) nounwind {
 | |
| entry:
 | |
| ; CHECK-DAG: lw $[[R2:[0-9]+]], 80($sp)
 | |
| ; CHECK-DAG: lw $[[R3:[0-9]+]], 84($sp)
 | |
| ; CHECK-DAG: move $[[R1:[0-9]+]], $5
 | |
| ; CHECK-DAG: move $[[R0:[0-9]+]], $4
 | |
| ; CHECK-DAG: ori $6, ${{[0-9]+}}, 3855
 | |
| ; CHECK-DAG: ori $7, ${{[0-9]+}}, 22136
 | |
| ; CHECK-DAG: lw  $25, %call16(ff1)
 | |
| ; CHECK: jalr
 | |
|   tail call void @ff1(i32 %i, i64 1085102592623924856) nounwind
 | |
| ; CHECK-DAG: lw $25, %call16(ff2)
 | |
| ; CHECK-DAG: move $4, $[[R2]]
 | |
| ; CHECK-DAG: move $5, $[[R3]]
 | |
| ; CHECK: jalr $25
 | |
|   tail call void @ff2(i64 %ll, double 3.000000e+00) nounwind
 | |
|   %sub = add nsw i32 %i, -1
 | |
| ; CHECK-DAG: lw $25, %call16(ff3)
 | |
| ; CHECK-DAG: sw $[[R1]], 28($sp)
 | |
| ; CHECK-DAG: sw $[[R0]], 24($sp)
 | |
| ; CHECK-DAG: move $6, $[[R2]]
 | |
| ; CHECK-DAG: move $7, $[[R3]]
 | |
| ; CHECK:     jalr $25
 | |
|   tail call void @ff3(i32 %i, i64 %ll, i32 %sub, i64 %ll1) nounwind
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| declare void @ff1(i32, i64)
 | |
| 
 | |
| declare void @ff2(i64, double)
 | |
| 
 | |
| declare void @ff3(i32, i64, i32, i64)
 |