1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s 3 4%struct.va_list = type { ptr } 5 6define i32 @test(i32 %X, ...) { 7 ; Initialize variable argument processing 8; CHECK-LABEL: test: 9; CHECK: .cfi_startproc 10; CHECK-NEXT: ; %bb.0: 11; CHECK-NEXT: suba.l #8, %sp 12; CHECK-NEXT: .cfi_def_cfa_offset -12 13; CHECK-NEXT: lea (16,%sp), %a0 14; CHECK-NEXT: move.l %a0, %d0 15; CHECK-NEXT: add.l #4, %d0 16; CHECK-NEXT: move.l %d0, (4,%sp) 17; CHECK-NEXT: move.l %d0, (0,%sp) 18; CHECK-NEXT: move.l (16,%sp), %d0 19; CHECK-NEXT: adda.l #8, %sp 20; CHECK-NEXT: rts 21 %ap = alloca %struct.va_list 22 %ap2 = bitcast ptr %ap to ptr 23 call void @llvm.va_start(ptr %ap2) 24 25 ; Read a single integer argument 26 %tmp = va_arg ptr %ap2, i32 27 28 ; Demonstrate usage of llvm.va_copy and llvm.va_end 29 %aq = alloca ptr 30 %aq2 = bitcast ptr %aq to ptr 31 call void @llvm.va_copy(ptr %aq2, ptr %ap2) 32 call void @llvm.va_end(ptr %aq2) 33 34 ; Stop processing of arguments. 35 call void @llvm.va_end(ptr %ap2) 36 ret i32 %tmp 37} 38 39declare void @llvm.va_start(ptr) 40declare void @llvm.va_copy(ptr, ptr) 41declare void @llvm.va_end(ptr) 42