1 ; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
3 define 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)
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)
43 define i32 @va_copy0(i32, ...) {
44 ; CHECK-LABEL: va_copy0:
46 ; CHECK: ld2b.sx %s18,
47 ; CHECK: ld1b.sx %s19,
49 ; CHECK: ld2b.zx %s21,
50 ; CHECK: ld1b.zx %s22,
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)
88 define i32 @va_copy8(i32, ...) {
89 ; CHECK-LABEL: va_copy8:
91 ; CHECK: ld2b.sx %s18,
92 ; CHECK: ld1b.sx %s19,
94 ; CHECK: ld2b.zx %s21,
95 ; CHECK: ld1b.zx %s22,
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
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)
133 declare void @use_i64(i64)
134 declare void @use_i32(i32)
135 declare void @use_u16(i16 zeroext)
136 declare void @use_u8(i8 zeroext)
137 declare void @use_s16(i16 signext)
138 declare void @use_s8(i8 signext)
139 declare void @use_i8p(ptr)
140 declare void @use_float(float)
141 declare void @use_double(double)
143 declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
144 declare void @llvm.va_start(ptr)
145 declare void @llvm.va_copy(ptr, ptr)
146 declare void @llvm.va_end(ptr)
147 declare void @llvm.lifetime.end.p0(i64, ptr nocapture)