summaryrefslogtreecommitdiff
path: root/test/CodeGen
diff options
context:
space:
mode:
authorRobert Lytton <robert@xmos.com>2014-01-06 14:20:53 +0000
committerRobert Lytton <robert@xmos.com>2014-01-06 14:20:53 +0000
commit12ad7cd730cb0575a6d03cccd6073af8e9486f3f (patch)
tree369f16eb7b197880c3ec702efb6be325f416395a /test/CodeGen
parentc2508e505aa70a3764199ca97cf4d417a8de91cd (diff)
downloadllvm-12ad7cd730cb0575a6d03cccd6073af8e9486f3f.tar.gz
llvm-12ad7cd730cb0575a6d03cccd6073af8e9486f3f.tar.bz2
llvm-12ad7cd730cb0575a6d03cccd6073af8e9486f3f.tar.xz
XCore target: Lower RETURNADDR
Only handles a depth of zero (the same as FRAMEADDR) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198613 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
-rw-r--r--test/CodeGen/XCore/llvm-intrinsics.ll46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CodeGen/XCore/llvm-intrinsics.ll b/test/CodeGen/XCore/llvm-intrinsics.ll
new file mode 100644
index 0000000000..14b299d46e
--- /dev/null
+++ b/test/CodeGen/XCore/llvm-intrinsics.ll
@@ -0,0 +1,46 @@
+; RUN: llc < %s -march=xcore | FileCheck %s
+
+declare i8* @llvm.frameaddress(i32) nounwind readnone
+define i8* @FA0() nounwind {
+entry:
+; CHECK-LABEL: FA0
+; CHECK: ldaw r0, sp[0]
+; CHECK-NEXT: retsp 0
+ %0 = call i8* @llvm.frameaddress(i32 0)
+ ret i8* %0
+}
+
+define i8* @FA1() nounwind {
+entry:
+; CHECK-LABEL: FA1
+; CHECK: entsp 100
+; CHECK-NEXT: ldaw r0, sp[0]
+; CHECK-NEXT: retsp 100
+ %0 = alloca [100 x i32]
+ %1 = call i8* @llvm.frameaddress(i32 0)
+ ret i8* %1
+}
+
+
+declare i8* @llvm.returnaddress(i32) nounwind readnone
+define i8* @RA0() nounwind {
+entry:
+; CHECK-LABEL: RA0
+; CHECK: stw lr, sp[0]
+; CHECK-NEXT: ldw r0, sp[0]
+; CHECK-NEXT: ldw lr, sp[0]
+; CHECK-NEXT: retsp 0
+ %0 = call i8* @llvm.returnaddress(i32 0)
+ ret i8* %0
+}
+
+define i8* @RA1() nounwind {
+entry:
+; CHECK-LABEL: RA1
+; CHECK: entsp 100
+; CHECK-NEXT: ldw r0, sp[100]
+; CHECK-NEXT: retsp 100
+ %0 = alloca [100 x i32]
+ %1 = call i8* @llvm.returnaddress(i32 0)
+ ret i8* %1
+}