148 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 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 816 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, i3219 %p2 = va_arg ptr %va, i1620 %p3 = va_arg ptr %va, i821 %p4 = va_arg ptr %va, i3222 %p5 = va_arg ptr %va, i1623 %p6 = va_arg ptr %va, i824 %p7 = va_arg ptr %va, float25 %p8 = va_arg ptr %va, ptr26 %p9 = va_arg ptr %va, i6427 %p10 = va_arg ptr %va, double28 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 041}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 856 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 859 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, i3264 %p2 = va_arg ptr %vb, i1665 %p3 = va_arg ptr %vb, i866 %p4 = va_arg ptr %vb, i3267 %p5 = va_arg ptr %vb, i1668 %p6 = va_arg ptr %vb, i869 %p7 = va_arg ptr %vb, float70 %p8 = va_arg ptr %vb, ptr71 %p9 = va_arg ptr %vb, i6472 %p10 = va_arg ptr %vb, double73 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 086}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 8101 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, i32104 %p2 = va_arg ptr %va, i16105 %p3 = va_arg ptr %va, i8106 %p4 = va_arg ptr %va, i32107 %p5 = va_arg ptr %va, i16108 %p6 = va_arg ptr %va, i8109 %p7 = va_arg ptr %va, float110 111 %vc = alloca ptr, align 8112 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, ptr116 %p9 = va_arg ptr %vc, i64117 %p10 = va_arg ptr %vc, double118 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 0131}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