| ; 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 |
| } |
| |