1; RUN: llc < %s -mtriple=xcore | FileCheck %s 2 3define void @_Z1fz(...) { 4entry: 5; CHECK-LABEL: _Z1fz: 6; CHECK: extsp 3 7; CHECK: stw r[[REG:[0-3]{1,1}]] 8; CHECK: , sp[[[REG]]] 9; CHECK: stw r[[REG:[0-3]{1,1}]] 10; CHECK: , sp[[[REG]]] 11; CHECK: stw r[[REG:[0-3]{1,1}]] 12; CHECK: , sp[[[REG]]] 13; CHECK: stw r[[REG:[0-3]{1,1}]] 14; CHECK: , sp[[[REG]]] 15; CHECK: ldaw sp, sp[3] 16; CHECK: retsp 0 17 ret void 18} 19 20 21declare void @llvm.va_start(ptr) nounwind 22declare void @llvm.va_end(ptr) nounwind 23declare void @f(i32) nounwind 24define void @test_vararg(...) nounwind { 25entry: 26; CHECK-LABEL: test_vararg 27; CHECK: extsp 6 28; CHECK: stw lr, sp[1] 29; CHECK-DAG: stw r3, sp[6] 30; CHECK-DAG: stw r0, sp[3] 31; CHECK-DAG: stw r1, sp[4] 32; CHECK-DAG: stw r2, sp[5] 33; CHECK: ldaw r0, sp[3] 34; CHECK: stw r0, sp[2] 35 %list = alloca ptr, align 4 36 call void @llvm.va_start(ptr %list) 37 br label %for.cond 38 39; CHECK-LABEL: .LBB1_1 40; CHECK: ldw r0, sp[2] 41; CHECK: add r1, r0, 4 42; CHECK: stw r1, sp[2] 43; CHECK: ldw r0, r0[0] 44; CHECK: bl f 45; CHECK: bu .LBB1_1 46for.cond: 47 %0 = va_arg ptr %list, i32 48 call void @f(i32 %0) 49 br label %for.cond 50 51 call void @llvm.va_end(ptr %list) 52 ret void 53} 54 55