mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	opportunities. For example, this lets it emit this: movq (%rax), %rcx addq %rdx, %rcx instead of this: movq %rdx, %rcx addq (%rax), %rcx in the case where %rdx has subsequent uses. It's the same number of instructions, and usually the same encoding size on x86, but it appears faster, and in general, it may allow better scheduling for the load. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106493 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			26 lines
		
	
	
		
			989 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			989 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -tailcallopt -march=x86-64 -post-RA-scheduler=true | FileCheck %s
 | |
| 
 | |
| ; Check that lowered arguments on the stack do not overwrite each other.
 | |
| ; Add %in1 %p1 to a different temporary register (%eax).
 | |
| ; CHECK: movl  32(%rsp), %eax
 | |
| ; Move param %in1 to temp register (%r10d).
 | |
| ; CHECK: movl  40(%rsp), %r10d
 | |
| ; Add %in1 %p1 to a different temporary register (%eax).
 | |
| ; CHECK: addl %edi, %eax
 | |
| ; Move param %in2 to stack.
 | |
| ; CHECK: movl  %r10d, 32(%rsp)
 | |
| ; Move result of addition to stack.
 | |
| ; CHECK: movl  %eax, 40(%rsp)
 | |
| ; Eventually, do a TAILCALL
 | |
| ; CHECK: TAILCALL
 | |
| 
 | |
| declare fastcc i32 @tailcallee(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %a, i32 %b) nounwind
 | |
| 
 | |
| define fastcc i32 @tailcaller(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %in1, i32 %in2) nounwind {
 | |
| entry:
 | |
|         %tmp = add i32 %in1, %p1
 | |
|         %retval = tail call fastcc i32 @tailcallee(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5, i32 %p6, i32 %in2,i32 %tmp)
 | |
|         ret i32 %retval
 | |
| }
 | |
| 
 |