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