[XCore] Target optimized library function __memcpy_4()
[oota-llvm.git] / test / CodeGen / XCore / byVal.ll
1 ; RUN: llc < %s -march=xcore | FileCheck %s
2
3 ; CHECK-LABEL: f0Test
4 ; CHECK: entsp 1
5 ; CHECK: bl f0
6 ; CHECK: retsp 1
7 %struct.st0 = type { [0 x i32] }
8 declare void @f0(%struct.st0*) nounwind
9 define void @f0Test(%struct.st0* byval %s0) nounwind {
10 entry:
11   call void @f0(%struct.st0* %s0) nounwind
12   ret void
13 }
14
15 ; CHECK-LABEL: f1Test
16 ; CHECK: entsp 13
17 ; CHECK: stw r4, sp[12]
18 ; CHECK: stw r5, sp[11]
19 ; CHECK: mov r4, r0
20 ; CHECK: ldaw r5, sp[1]
21 ; CHECK: ldc r2, 40
22 ; CHECK: mov r0, r5
23 ; CHECK: bl __memcpy_4
24 ; CHECK: mov r0, r5
25 ; CHECK: bl f1
26 ; CHECK: mov r0, r4
27 ; CHECK: ldw r5, sp[11]
28 ; CHECK: ldw r4, sp[12]
29 ; CHECK: retsp 13
30 %struct.st1 = type { [10 x i32] }
31 declare void @f1(%struct.st1*) nounwind
32 define i32 @f1Test(i32 %i, %struct.st1* byval %s1) nounwind {
33 entry:
34   call void @f1(%struct.st1* %s1) nounwind
35   ret i32 %i
36 }
37
38 ; CHECK-LABEL: f2Test
39 ; CHECK: extsp 4
40 ; CHECK: stw lr, sp[1]
41 ; CHECK: stw r2, sp[3]
42 ; CHECK: stw r3, sp[4]
43 ; CHECK: ldw r0, r0[0]
44 ; CHECK: stw r0, sp[2]
45 ; CHECK: ldaw r2, sp[2]
46 ; CHECK: mov r0, r1
47 ; CHECK: mov r1, r2
48 ; CHECK: bl f2
49 ; CHECK: ldw lr, sp[1]
50 ; CHECK: ldaw sp, sp[4]
51 ; CHECK: retsp 0
52 %struct.st2 = type { i32 }
53 declare void @f2(i32, %struct.st2*) nounwind
54 define void @f2Test(%struct.st2* byval %s2, i32 %i, ...) nounwind {
55 entry:
56   call void @f2(i32 %i, %struct.st2* %s2)
57   ret void
58 }
59
60 ; CHECK-LABEL: f3Test
61 ; CHECK: entsp 2
62 ; CHECK: ldc r1, 0
63 ; CHECK: ld8u r2, r0[r1]
64 ; CHECK: ldaw r0, sp[1]
65 ; CHECK: st8 r2, r0[r1]
66 ; CHECK: bl f
67 ; CHECK: retsp 2
68 declare void @f3(i8*) nounwind
69 define void @f3Test(i8* byval %v) nounwind {
70 entry:
71   call void @f3(i8* %v) nounwind
72   ret void
73 }