1; RUN: llc < %s -mtriple=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] } 8declare void @f0(ptr) nounwind 9define void @f0Test(ptr byval(%struct.st0) %s0) nounwind { 10entry: 11 call void @f0(ptr %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] } 31declare void @f1(ptr) nounwind 32define i32 @f1Test(i32 %i, ptr byval(%struct.st1) %s1) nounwind { 33entry: 34 call void @f1(ptr %s1) nounwind 35 ret i32 %i 36} 37 38; CHECK-LABEL: f2Test 39; CHECK: extsp 4 40; CHECK: stw lr, sp[1] 41; CHECK: mov r11, r1 42; CHECK-DAG: stw r2, sp[3] 43; CHECK-DAG: stw r3, sp[4] 44; CHECK: ldw r0, r0[0] 45; CHECK: stw r0, sp[2] 46; CHECK: ldaw r1, sp[2] 47; CHECK: mov r0, r11 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 } 53declare void @f2(i32, ptr) nounwind 54define void @f2Test(ptr byval(%struct.st2) %s2, i32 %i, ...) nounwind { 55entry: 56 call void @f2(i32 %i, ptr %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 68declare void @f3(ptr) nounwind 69define void @f3Test(ptr byval(i8) %v) nounwind { 70entry: 71 call void @f3(ptr %v) nounwind 72 ret void 73} 74