Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / va_callee.ll
blob8ed707dac8a71a84858a18a17b02c7f5d2f9ed42
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)
40   ret i32 0
43 define 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,
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
88 define 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,
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)
130   ret i32 0
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)