summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/CellSPU
diff options
context:
space:
mode:
authorKalle Raiskila <kalle.raiskila@nokia.com>2010-08-18 09:50:30 +0000
committerKalle Raiskila <kalle.raiskila@nokia.com>2010-08-18 09:50:30 +0000
commitf3984d1ef65572cac29f99c6affc2891941a7a22 (patch)
tree1329f4e9cc6969c27b3e50b87b14b4451ea1135d /llvm/test/CodeGen/CellSPU
parent02db245d5e10d2872854ec7a293a350dc77f49c2 (diff)
downloadbcm5719-llvm-f3984d1ef65572cac29f99c6affc2891941a7a22.tar.gz
bcm5719-llvm-f3984d1ef65572cac29f99c6affc2891941a7a22.zip
Change SPU C calling convention to match that described in
"SPU Application Binary Interface Specification, v1.9" by IBM. Specifically: use r3-r74 to pass parameters and the return value. llvm-svn: 111358
Diffstat (limited to 'llvm/test/CodeGen/CellSPU')
-rw-r--r--llvm/test/CodeGen/CellSPU/arg_ret.ll33
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/CellSPU/arg_ret.ll b/llvm/test/CodeGen/CellSPU/arg_ret.ll
new file mode 100644
index 00000000000..db8ff104660
--- /dev/null
+++ b/llvm/test/CodeGen/CellSPU/arg_ret.ll
@@ -0,0 +1,33 @@
+; Test parameter passing and return values
+;RUN: llc --march=cellspu %s -o - | FileCheck %s
+
+; this fits into registers r3-r74
+%paramstruct = type { i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,
+ i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,
+ i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,
+ i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,
+ i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,
+ i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32,i32}
+define ccc i32 @test_regs( %paramstruct %prm )
+{
+;CHECK: lr $3, $74
+;CHECK: bi $lr
+ %1 = extractvalue %paramstruct %prm, 71
+ ret i32 %1
+}
+
+define ccc i32 @test_regs_and_stack( %paramstruct %prm, i32 %stackprm )
+{
+;CHECK-NOT: a $3, $74, $75
+ %1 = extractvalue %paramstruct %prm, 71
+ %2 = add i32 %1, %stackprm
+ ret i32 %2
+}
+
+define ccc %paramstruct @test_return( i32 %param, %paramstruct %prm )
+{
+;CHEKC: lqd $75, 80($sp)
+;CHECK: lr $3, $4
+ ret %paramstruct %prm
+}
+
OpenPOWER on IntegriCloud