mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	of the abi we should be using. For targets that don't use the option there's no change, otherwise this allows external users to set the ABI via string and avoid some of the -backend-option pain in clang. Use this option to move the ABI for the ARM port from the Subtarget to the TargetMachine and update the testcases accordingly since it's no longer valid to set via -mattr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224492 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			33 lines
		
	
	
		
			875 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			875 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc -mtriple armv7 -target-abi apcs -O0 -o - < %s \
 | |
| ; RUN:   | FileCheck %s -check-prefix CHECK-TAIL
 | |
| ; RUN: llc -mtriple armv7 -target-abi apcs -O0 -disable-tail-calls -o - < %s \
 | |
| ; RUN:   | FileCheck %s -check-prefix CHECK-NO-TAIL
 | |
| 
 | |
| declare i32 @callee(i32 %i)
 | |
| declare extern_weak fastcc void @callee_weak()
 | |
| 
 | |
| define i32 @caller(i32 %i) {
 | |
| entry:
 | |
|   %r = tail call i32 @callee(i32 %i)
 | |
|   ret i32 %r
 | |
| }
 | |
| 
 | |
| ; CHECK-TAIL-LABEL: caller
 | |
| ; CHECK-TAIL: b callee
 | |
| 
 | |
| ; CHECK-NO-TAIL-LABEL: caller
 | |
| ; CHECK-NO-TAIL: push {lr}
 | |
| ; CHECK-NO-TAIL: bl callee
 | |
| ; CHECK-NO-TAIL: pop {lr}
 | |
| ; CHECK-NO-TAIL: bx lr
 | |
| 
 | |
| 
 | |
| ; Weakly-referenced extern functions cannot be tail-called, as AAELF does
 | |
| ; not define the behaviour of branch instructions to undefined weak symbols.
 | |
| define fastcc void @caller_weak() {
 | |
| ; CHECK-LABEL: caller_weak:
 | |
| ; CHECK: bl callee_weak
 | |
|   tail call void @callee_weak()
 | |
|   ret void
 | |
| }
 |