diff options
author | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-08-18 09:50:30 +0000 |
---|---|---|
committer | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-08-18 09:50:30 +0000 |
commit | f3984d1ef65572cac29f99c6affc2891941a7a22 (patch) | |
tree | 1329f4e9cc6969c27b3e50b87b14b4451ea1135d /llvm/test/CodeGen/CellSPU | |
parent | 02db245d5e10d2872854ec7a293a350dc77f49c2 (diff) | |
download | bcm5719-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.ll | 33 |
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 +} + |