| ; 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 ) | |
| { | |
| ;CHECK: lqd {{\$[0-9]+}}, 80($sp) | |
| ;CHECK-NOT: ori {{\$[0-9]+, \$[0-9]+, 0}} | |
| ;CHECK: lr $3, $4 | |
| ret %paramstruct %prm | |
| } | |