mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-22 10:29:35 +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
|
|
}
|