1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s 2 3define i32 @va_func(i32, ...) { 4; CHECK-LABEL: va_func: 5; CHECK: ldl.sx %s0, 184(, %s9) 6; CHECK: ld2b.sx %s18, 192(, %s9) 7; CHECK: ld1b.sx %s19, 200(, %s9) 8; CHECK: ldl.sx %s20, 208(, %s9) 9; CHECK: ld2b.zx %s21, 216(, %s9) 10; CHECK: ld1b.zx %s22, 224(, %s9) 11; CHECK: ldu %s23, 236(, %s9) 12; CHECK: ld %s24, 240(, %s9) 13; CHECK: ld %s25, 248(, %s9) 14 15 %va = alloca ptr, align 8 16 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %va) 17 call void @llvm.va_start(ptr nonnull %va) 18 %p1 = va_arg ptr %va, i32 19 %p2 = va_arg ptr %va, i16 20 %p3 = va_arg ptr %va, i8 21 %p4 = va_arg ptr %va, i32 22 %p5 = va_arg ptr %va, i16 23 %p6 = va_arg ptr %va, i8 24 %p7 = va_arg ptr %va, float 25 %p8 = va_arg ptr %va, ptr 26 %p9 = va_arg ptr %va, i64 27 %p10 = va_arg ptr %va, double 28 call void @llvm.va_end(ptr nonnull %va) 29 call void @use_i32(i32 %p1) 30 call void @use_s16(i16 %p2) 31 call void @use_s8(i8 %p3) 32 call void @use_i32(i32 %p4) 33 call void @use_u16(i16 %p5) 34 call void @use_u8(i8 %p6) 35 call void @use_float(float %p7) 36 call void @use_i8p(ptr %p8) 37 call void @use_i64(i64 %p9) 38 call void @use_double(double %p10) 39 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %va) 40 ret i32 0 41} 42 43define i32 @va_copy0(i32, ...) { 44; CHECK-LABEL: va_copy0: 45; CHECK: ldl.sx %s0, 46; CHECK: ld2b.sx %s18, 47; CHECK: ld1b.sx %s19, 48; CHECK: ldl.sx %s20, 49; CHECK: ld2b.zx %s21, 50; CHECK: ld1b.zx %s22, 51; CHECK: ldu %s23, 52; CHECK: ld %s24, 53; CHECK: ld %s25, 54 55 %va = alloca ptr, align 8 56 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %va) 57 call void @llvm.va_start(ptr nonnull %va) 58 %vb = alloca ptr, align 8 59 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %va) 60 call void @llvm.va_copy(ptr nonnull %vb, ptr nonnull %va) 61 call void @llvm.va_end(ptr nonnull %va) 62 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %va) 63 %p1 = va_arg ptr %vb, i32 64 %p2 = va_arg ptr %vb, i16 65 %p3 = va_arg ptr %vb, i8 66 %p4 = va_arg ptr %vb, i32 67 %p5 = va_arg ptr %vb, i16 68 %p6 = va_arg ptr %vb, i8 69 %p7 = va_arg ptr %vb, float 70 %p8 = va_arg ptr %vb, ptr 71 %p9 = va_arg ptr %vb, i64 72 %p10 = va_arg ptr %vb, double 73 call void @llvm.va_end(ptr nonnull %vb) 74 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %vb) 75 call void @use_i32(i32 %p1) 76 call void @use_s16(i16 %p2) 77 call void @use_s8(i8 %p3) 78 call void @use_i32(i32 %p4) 79 call void @use_u16(i16 %p5) 80 call void @use_u8(i8 %p6) 81 call void @use_float(float %p7) 82 call void @use_i8p(ptr %p8) 83 call void @use_i64(i64 %p9) 84 call void @use_double(double %p10) 85 ret i32 0 86} 87 88define i32 @va_copy8(i32, ...) { 89; CHECK-LABEL: va_copy8: 90; CHECK: ldl.sx %s0, 91; CHECK: ld2b.sx %s18, 92; CHECK: ld1b.sx %s19, 93; CHECK: ldl.sx %s20, 94; CHECK: ld2b.zx %s21, 95; CHECK: ld1b.zx %s22, 96; CHECK: ldu %s23, 97; CHECK: ld %s24, 98; CHECK: ld %s25, 99 100 %va = alloca ptr, align 8 101 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %va) 102 call void @llvm.va_start(ptr nonnull %va) 103 %p1 = va_arg ptr %va, i32 104 %p2 = va_arg ptr %va, i16 105 %p3 = va_arg ptr %va, i8 106 %p4 = va_arg ptr %va, i32 107 %p5 = va_arg ptr %va, i16 108 %p6 = va_arg ptr %va, i8 109 %p7 = va_arg ptr %va, float 110 111 %vc = alloca ptr, align 8 112 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %va) 113 call void @llvm.va_copy(ptr nonnull %vc, ptr nonnull %va) 114 call void @llvm.va_end(ptr nonnull %va) 115 %p8 = va_arg ptr %vc, ptr 116 %p9 = va_arg ptr %vc, i64 117 %p10 = va_arg ptr %vc, double 118 call void @llvm.va_end(ptr nonnull %vc) 119 call void @use_i32(i32 %p1) 120 call void @use_s16(i16 %p2) 121 call void @use_s8(i8 %p3) 122 call void @use_i32(i32 %p4) 123 call void @use_u16(i16 %p5) 124 call void @use_u8(i8 %p6) 125 call void @use_float(float %p7) 126 call void @use_i8p(ptr %p8) 127 call void @use_i64(i64 %p9) 128 call void @use_double(double %p10) 129 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %va) 130 ret i32 0 131} 132 133declare void @use_i64(i64) 134declare void @use_i32(i32) 135declare void @use_u16(i16 zeroext) 136declare void @use_u8(i8 zeroext) 137declare void @use_s16(i16 signext) 138declare void @use_s8(i8 signext) 139declare void @use_i8p(ptr) 140declare void @use_float(float) 141declare void @use_double(double) 142 143declare void @llvm.lifetime.start.p0(i64, ptr nocapture) 144declare void @llvm.va_start(ptr) 145declare void @llvm.va_copy(ptr, ptr) 146declare void @llvm.va_end(ptr) 147declare void @llvm.lifetime.end.p0(i64, ptr nocapture) 148