42 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s3 4%struct.va_list = type { ptr }5 6define i32 @test(i32 %X, ...) {7 ; Initialize variable argument processing8; CHECK-LABEL: test:9; CHECK: .cfi_startproc10; CHECK-NEXT: ; %bb.0:11; CHECK-NEXT: suba.l #8, %sp12; CHECK-NEXT: .cfi_def_cfa_offset -1213; CHECK-NEXT: lea (16,%sp), %a014; CHECK-NEXT: move.l %a0, %d015; CHECK-NEXT: add.l #4, %d016; CHECK-NEXT: move.l %d0, (4,%sp)17; CHECK-NEXT: move.l %d0, (0,%sp)18; CHECK-NEXT: move.l (16,%sp), %d019; CHECK-NEXT: adda.l #8, %sp20; CHECK-NEXT: rts21 %ap = alloca %struct.va_list22 %ap2 = bitcast ptr %ap to ptr23 call void @llvm.va_start(ptr %ap2)24 25 ; Read a single integer argument26 %tmp = va_arg ptr %ap2, i3227 28 ; Demonstrate usage of llvm.va_copy and llvm.va_end29 %aq = alloca ptr30 %aq2 = bitcast ptr %aq to ptr31 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 %tmp37}38 39declare void @llvm.va_start(ptr)40declare void @llvm.va_copy(ptr, ptr)41declare void @llvm.va_end(ptr)42