[Github] Label lldb-dap PRs (#125139)
[llvm-project.git] / clang / test / CodeGen / SystemZ / zvector2.c
blobb021ae8534353688d9f5166913da34467af3d28e
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2 // RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z14 -fzvector \
3 // RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s
5 volatile vector float ff, ff2;
6 volatile vector bool int bi;
8 // CHECK-LABEL: define dso_local void @test_assign(
9 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
10 // CHECK-NEXT: [[ENTRY:.*:]]
11 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3:![0-9]+]]
12 // CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[TBAA3]]
13 // CHECK-NEXT: ret void
15 void test_assign (void)
17 ff = ff2;
20 // CHECK-LABEL: define dso_local void @test_pos(
21 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
22 // CHECK-NEXT: [[ENTRY:.*:]]
23 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
24 // CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[TBAA3]]
25 // CHECK-NEXT: ret void
27 void test_pos (void)
29 ff = +ff2;
32 // CHECK-LABEL: define dso_local void @test_neg(
33 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
34 // CHECK-NEXT: [[ENTRY:.*:]]
35 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
36 // CHECK-NEXT: [[FNEG:%.*]] = fneg <4 x float> [[TMP0]]
37 // CHECK-NEXT: store volatile <4 x float> [[FNEG]], ptr @ff, align 8, !tbaa [[TBAA3]]
38 // CHECK-NEXT: ret void
40 void test_neg (void)
42 ff = -ff2;
45 // CHECK-LABEL: define dso_local void @test_preinc(
46 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
47 // CHECK-NEXT: [[ENTRY:.*:]]
48 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
49 // CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)
50 // CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
51 // CHECK-NEXT: ret void
53 void test_preinc (void)
55 ++ff2;
58 // CHECK-LABEL: define dso_local void @test_postinc(
59 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
60 // CHECK-NEXT: [[ENTRY:.*:]]
61 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
62 // CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)
63 // CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
64 // CHECK-NEXT: ret void
66 void test_postinc (void)
68 ff2++;
71 // CHECK-LABEL: define dso_local void @test_predec(
72 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
73 // CHECK-NEXT: [[ENTRY:.*:]]
74 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
75 // CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)
76 // CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
77 // CHECK-NEXT: ret void
79 void test_predec (void)
81 --ff2;
84 // CHECK-LABEL: define dso_local void @test_postdec(
85 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
86 // CHECK-NEXT: [[ENTRY:.*:]]
87 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
88 // CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)
89 // CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
90 // CHECK-NEXT: ret void
92 void test_postdec (void)
94 ff2--;
97 // CHECK-LABEL: define dso_local void @test_add(
98 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
99 // CHECK-NEXT: [[ENTRY:.*:]]
100 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
101 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
102 // CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
103 // CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[TBAA3]]
104 // CHECK-NEXT: ret void
106 void test_add (void)
108 ff = ff + ff2;
111 // CHECK-LABEL: define dso_local void @test_add_assign(
112 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
113 // CHECK-NEXT: [[ENTRY:.*:]]
114 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
115 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
116 // CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
117 // CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[TBAA3]]
118 // CHECK-NEXT: ret void
120 void test_add_assign (void)
122 ff += ff2;
125 // CHECK-LABEL: define dso_local void @test_sub(
126 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
127 // CHECK-NEXT: [[ENTRY:.*:]]
128 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
129 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
130 // CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP0]], [[TMP1]]
131 // CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[TBAA3]]
132 // CHECK-NEXT: ret void
134 void test_sub (void)
136 ff = ff - ff2;
139 // CHECK-LABEL: define dso_local void @test_sub_assign(
140 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
141 // CHECK-NEXT: [[ENTRY:.*:]]
142 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
143 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
144 // CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP1]], [[TMP0]]
145 // CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[TBAA3]]
146 // CHECK-NEXT: ret void
148 void test_sub_assign (void)
150 ff -= ff2;
153 // CHECK-LABEL: define dso_local void @test_mul(
154 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
155 // CHECK-NEXT: [[ENTRY:.*:]]
156 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
157 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
158 // CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]
159 // CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[TBAA3]]
160 // CHECK-NEXT: ret void
162 void test_mul (void)
164 ff = ff * ff2;
167 // CHECK-LABEL: define dso_local void @test_mul_assign(
168 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
169 // CHECK-NEXT: [[ENTRY:.*:]]
170 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
171 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
172 // CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]
173 // CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[TBAA3]]
174 // CHECK-NEXT: ret void
176 void test_mul_assign (void)
178 ff *= ff2;
181 // CHECK-LABEL: define dso_local void @test_div(
182 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
183 // CHECK-NEXT: [[ENTRY:.*:]]
184 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
185 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
186 // CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP0]], [[TMP1]]
187 // CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[TBAA3]]
188 // CHECK-NEXT: ret void
190 void test_div (void)
192 ff = ff / ff2;
195 // CHECK-LABEL: define dso_local void @test_div_assign(
196 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
197 // CHECK-NEXT: [[ENTRY:.*:]]
198 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
199 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
200 // CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP1]], [[TMP0]]
201 // CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[TBAA3]]
202 // CHECK-NEXT: ret void
204 void test_div_assign (void)
206 ff /= ff2;
209 // CHECK-LABEL: define dso_local void @test_cmpeq(
210 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
211 // CHECK-NEXT: [[ENTRY:.*:]]
212 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
213 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
214 // CHECK-NEXT: [[CMP:%.*]] = fcmp oeq <4 x float> [[TMP0]], [[TMP1]]
215 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
216 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
217 // CHECK-NEXT: ret void
219 void test_cmpeq (void)
221 bi = ff == ff2;
224 // CHECK-LABEL: define dso_local void @test_cmpne(
225 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
226 // CHECK-NEXT: [[ENTRY:.*:]]
227 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
228 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
229 // CHECK-NEXT: [[CMP:%.*]] = fcmp une <4 x float> [[TMP0]], [[TMP1]]
230 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
231 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
232 // CHECK-NEXT: ret void
234 void test_cmpne (void)
236 bi = ff != ff2;
239 // CHECK-LABEL: define dso_local void @test_cmpge(
240 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
241 // CHECK-NEXT: [[ENTRY:.*:]]
242 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
243 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
244 // CHECK-NEXT: [[CMP:%.*]] = fcmp oge <4 x float> [[TMP0]], [[TMP1]]
245 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
246 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
247 // CHECK-NEXT: ret void
249 void test_cmpge (void)
251 bi = ff >= ff2;
254 // CHECK-LABEL: define dso_local void @test_cmpgt(
255 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
256 // CHECK-NEXT: [[ENTRY:.*:]]
257 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
258 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
259 // CHECK-NEXT: [[CMP:%.*]] = fcmp ogt <4 x float> [[TMP0]], [[TMP1]]
260 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
261 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
262 // CHECK-NEXT: ret void
264 void test_cmpgt (void)
266 bi = ff > ff2;
269 // CHECK-LABEL: define dso_local void @test_cmple(
270 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
271 // CHECK-NEXT: [[ENTRY:.*:]]
272 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
273 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
274 // CHECK-NEXT: [[CMP:%.*]] = fcmp ole <4 x float> [[TMP0]], [[TMP1]]
275 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
276 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
277 // CHECK-NEXT: ret void
279 void test_cmple (void)
281 bi = ff <= ff2;
284 // CHECK-LABEL: define dso_local void @test_cmplt(
285 // CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
286 // CHECK-NEXT: [[ENTRY:.*:]]
287 // CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
288 // CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
289 // CHECK-NEXT: [[CMP:%.*]] = fcmp olt <4 x float> [[TMP0]], [[TMP1]]
290 // CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
291 // CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
292 // CHECK-NEXT: ret void
294 void test_cmplt (void)
296 bi = ff < ff2;
300 // CHECK: [[TBAA3]] = !{[[META4:![0-9]+]], [[META4]], i64 0}
301 // CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
302 // CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}