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