docs: Sphinxify TestingGuide
[oota-llvm.git] / test / CodeGen / CellSPU / call.ll
1 ; RUN: llc < %s -march=cellspu | FileCheck %s
2
3 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"
4 target triple = "spu"
5
6 define i32 @main() {
7 entry:
8   %a = call i32 @stub_1(i32 1, float 0x400921FA00000000)
9   call void @extern_stub_1(i32 %a, i32 4)
10   ret i32 %a
11 }
12
13 declare void @extern_stub_1(i32, i32)
14
15 define i32 @stub_1(i32 %x, float %y) {
16  ; CHECK: il $3, 0
17  ; CHECK: bi $lr 
18 entry:
19   ret i32 0
20 }
21
22 ; vararg call: ensure that all caller-saved registers are spilled to the
23 ; stack:
24 define i32 @stub_2(...) {
25 entry:
26   ret i32 0
27 }
28
29 ; check that struct is passed in r3->
30 ; assert this by changing the second field in the struct
31 %0 = type { i32, i32, i32 }
32 declare %0 @callee()
33 define %0 @test_structret()
34 {
35 ;CHECK: stqd    $lr, 16($sp)
36 ;CHECK: stqd    $sp, -48($sp)
37 ;CHECK: ai      $sp, $sp, -48
38 ;CHECK: brasl   $lr, callee
39   %rv = call %0 @callee()
40 ;CHECK: ai      $4, $4, 1
41 ;CHECK: lqd     $lr, 64($sp)
42 ;CHECK: ai      $sp, $sp, 48
43 ;CHECK: bi      $lr
44   %oldval = extractvalue %0 %rv, 1
45   %newval = add i32 %oldval,1
46   %newrv = insertvalue %0 %rv, i32 %newval, 1
47   ret %0 %newrv
48 }
49