XCore target: Lower RETURNADDR
[oota-llvm.git] / test / CodeGen / XCore / llvm-intrinsics.ll
1 ; RUN: llc < %s -march=xcore | FileCheck %s
2
3 declare i8* @llvm.frameaddress(i32) nounwind readnone
4 define i8* @FA0() nounwind {
5 entry:
6 ; CHECK-LABEL: FA0
7 ; CHECK: ldaw r0, sp[0]
8 ; CHECK-NEXT: retsp 0
9   %0 = call i8* @llvm.frameaddress(i32 0)
10   ret i8* %0
11 }
12
13 define i8* @FA1() nounwind {
14 entry:
15 ; CHECK-LABEL: FA1
16 ; CHECK: entsp 100
17 ; CHECK-NEXT: ldaw r0, sp[0]
18 ; CHECK-NEXT: retsp 100
19   %0 = alloca [100 x i32]
20   %1 = call i8* @llvm.frameaddress(i32 0)
21   ret i8* %1
22 }
23
24
25 declare i8* @llvm.returnaddress(i32) nounwind readnone
26 define i8* @RA0() nounwind {
27 entry:
28 ; CHECK-LABEL: RA0
29 ; CHECK: stw lr, sp[0]
30 ; CHECK-NEXT: ldw r0, sp[0]
31 ; CHECK-NEXT: ldw lr, sp[0]
32 ; CHECK-NEXT: retsp 0
33   %0 = call i8* @llvm.returnaddress(i32 0)
34   ret i8* %0
35 }
36
37 define i8* @RA1() nounwind {
38 entry:
39 ; CHECK-LABEL: RA1
40 ; CHECK: entsp 100
41 ; CHECK-NEXT: ldw r0, sp[100]
42 ; CHECK-NEXT: retsp 100
43   %0 = alloca [100 x i32]
44   %1 = call i8* @llvm.returnaddress(i32 0)
45   ret i8* %1
46 }