Thumb1 functions using @llvm.returnaddress were not saving the incoming LR.
[oota-llvm.git] / test / CodeGen / ARM / arm-returnaddr.ll
1 ; RUN: llc < %s -mtriple=arm-apple-darwin | FileCheck %s
2 ; RUN: llc < %s -mtriple=thumbv6-apple-darwin | FileCheck %s
3 ; rdar://8015977
4 ; rdar://8020118
5
6 define i8* @rt0(i32 %x) nounwind readnone {
7 entry:
8 ; CHECK: rt0:
9 ; CHECK: {r7, lr}
10 ; CHECK: mov r0, lr
11   %0 = tail call i8* @llvm.returnaddress(i32 0)
12   ret i8* %0
13 }
14
15 define i8* @rt2() nounwind readnone {
16 entry:
17 ; CHECK: rt2:
18 ; CHECK: {r7, lr}
19 ; CHECK: ldr r0, [r7]
20 ; CHECK: ldr r0, [r0]
21 ; CHECK: ldr r0, [r0, #4]
22   %0 = tail call i8* @llvm.returnaddress(i32 2)
23   ret i8* %0
24 }
25
26 declare i8* @llvm.returnaddress(i32) nounwind readnone