summaryrefslogtreecommitdiff
path: root/test/CodeGen/XCore
diff options
context:
space:
mode:
authorRobert Lytton <robert@xmos.com>2014-01-06 14:21:00 +0000
committerRobert Lytton <robert@xmos.com>2014-01-06 14:21:00 +0000
commitaf74cbf553073b701fc570c7ef9b1446111ac9b6 (patch)
tree80c553a5b9d705896aad7a5d32133cc14eafd16f /test/CodeGen/XCore
parent12ad7cd730cb0575a6d03cccd6073af8e9486f3f (diff)
downloadllvm-af74cbf553073b701fc570c7ef9b1446111ac9b6.tar.gz
llvm-af74cbf553073b701fc570c7ef9b1446111ac9b6.tar.bz2
llvm-af74cbf553073b701fc570c7ef9b1446111ac9b6.tar.xz
XCore target: Lower FRAME_TO_ARGS_OFFSET
This requires a knowledge of the stack size which is not known until the frame is complete, hence the need for the XCoreFTAOElim pass which lowers the XCoreISD::FRAME_TO_ARGS_OFFSET instrution into its final form. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198614 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/XCore')
-rw-r--r--test/CodeGen/XCore/llvm-intrinsics.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/XCore/llvm-intrinsics.ll b/test/CodeGen/XCore/llvm-intrinsics.ll
index 14b299d46e..55b77ac9e6 100644
--- a/test/CodeGen/XCore/llvm-intrinsics.ll
+++ b/test/CodeGen/XCore/llvm-intrinsics.ll
@@ -44,3 +44,29 @@ entry:
%1 = call i8* @llvm.returnaddress(i32 0)
ret i8* %1
}
+
+; test FRAME_TO_ARGS_OFFSET lowering
+declare i8* @llvm.eh.dwarf.cfa(i32) nounwind
+define i8* @FTAO0() nounwind {
+entry:
+; CHECK-LABEL: FTAO0
+; CHECK: ldc r0, 0
+; CHECK-NEXT: ldaw r1, sp[0]
+; CHECK-NEXT: add r0, r1, r0
+; CHECK-NEXT: retsp 0
+ %0 = call i8* @llvm.eh.dwarf.cfa(i32 0)
+ ret i8* %0
+}
+
+define i8* @FTAO1() nounwind {
+entry:
+; CHECK-LABEL: FTAO1
+; CHECK: entsp 100
+; CHECK-NEXT: ldc r0, 400
+; CHECK-NEXT: ldaw r1, sp[0]
+; CHECK-NEXT: add r0, r1, r0
+; CHECK-NEXT: retsp 100
+ %0 = alloca [100 x i32]
+ %1 = call i8* @llvm.eh.dwarf.cfa(i32 0)
+ ret i8* %1
+}