llvm/test/CodeGen/ARM/tail-call.ll
Eric Christopher c559ba7251 Add a new string member to the TargetOptions struct for the name
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
2014-12-18 02:20:58 +00:00

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
}