Clang Project

clang_source_code/test/CodeGen/avx512er-builtins.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512er -emit-llvm -o - -Wall -Werror | FileCheck %s
2
3
4#include <immintrin.h>
5
6__m512d test_mm512_rsqrt28_round_pd(__m512d a) {
7  // CHECK-LABEL: @test_mm512_rsqrt28_round_pd
8  // CHECK: @llvm.x86.avx512.rsqrt28.pd
9  return _mm512_rsqrt28_round_pd(a, _MM_FROUND_CUR_DIRECTION);
10}
11
12__m512d test_mm512_mask_rsqrt28_round_pd(__m512d s, __mmask8 m, __m512d a) {
13  // CHECK-LABEL: @test_mm512_mask_rsqrt28_round_pd
14  // CHECK: @llvm.x86.avx512.rsqrt28.pd
15  return _mm512_mask_rsqrt28_round_pd(s, m, a, _MM_FROUND_CUR_DIRECTION);
16}
17
18__m512d test_mm512_maskz_rsqrt28_round_pd(__mmask8 m, __m512d a) {
19  // CHECK-LABEL: @test_mm512_maskz_rsqrt28_round_pd
20  // CHECK: @llvm.x86.avx512.rsqrt28.pd
21  return _mm512_maskz_rsqrt28_round_pd(m, a, _MM_FROUND_CUR_DIRECTION);
22}
23
24__m512d test_mm512_rsqrt28_pd(__m512d a) {
25  // CHECK-LABEL: @test_mm512_rsqrt28_pd
26  // CHECK: @llvm.x86.avx512.rsqrt28.pd
27  return _mm512_rsqrt28_pd(a);
28}
29
30__m512d test_mm512_mask_rsqrt28_pd(__m512d s, __mmask8 m, __m512d a) {
31  // CHECK-LABEL: @test_mm512_mask_rsqrt28_pd
32  // CHECK: @llvm.x86.avx512.rsqrt28.pd
33  return _mm512_mask_rsqrt28_pd(s, m, a);
34}
35
36__m512d test_mm512_maskz_rsqrt28_pd(__mmask8 m, __m512d a) {
37  // CHECK-LABEL: @test_mm512_maskz_rsqrt28_pd
38  // CHECK: @llvm.x86.avx512.rsqrt28.pd
39  return _mm512_maskz_rsqrt28_pd(m, a);
40}
41
42__m512 test_mm512_rsqrt28_round_ps(__m512 a) {
43  // CHECK-LABEL: @test_mm512_rsqrt28_round_ps
44  // CHECK: @llvm.x86.avx512.rsqrt28.ps
45  return _mm512_rsqrt28_round_ps(a, _MM_FROUND_CUR_DIRECTION);
46}
47
48__m512 test_mm512_mask_rsqrt28_round_ps(__m512 s, __mmask16 m, __m512 a) {
49  // CHECK-LABEL: @test_mm512_mask_rsqrt28_round_ps
50  // CHECK: @llvm.x86.avx512.rsqrt28.ps
51  return _mm512_mask_rsqrt28_round_ps(s, m, a, _MM_FROUND_CUR_DIRECTION);
52}
53
54__m512 test_mm512_maskz_rsqrt28_round_ps(__mmask16 m, __m512 a) {
55  // CHECK-LABEL: @test_mm512_maskz_rsqrt28_round_ps
56  // CHECK: @llvm.x86.avx512.rsqrt28.ps
57  return _mm512_maskz_rsqrt28_round_ps(m, a, _MM_FROUND_CUR_DIRECTION);
58}
59
60__m512 test_mm512_rsqrt28_ps(__m512 a) {
61  // CHECK-LABEL: @test_mm512_rsqrt28_ps
62  // CHECK: @llvm.x86.avx512.rsqrt28.ps
63  return _mm512_rsqrt28_ps(a);
64}
65
66__m512 test_mm512_mask_rsqrt28_ps(__m512 s, __mmask16 m, __m512 a) {
67  // CHECK-LABEL: @test_mm512_mask_rsqrt28_ps
68  // CHECK: @llvm.x86.avx512.rsqrt28.ps
69  return _mm512_mask_rsqrt28_ps(s, m, a);
70}
71
72__m512 test_mm512_maskz_rsqrt28_ps(__mmask16 m, __m512 a) {
73  // CHECK-LABEL: @test_mm512_maskz_rsqrt28_ps
74  // CHECK: @llvm.x86.avx512.rsqrt28.ps
75  return _mm512_maskz_rsqrt28_ps(m, a);
76}
77
78__m128 test_mm_rsqrt28_round_ss(__m128 a, __m128 b) {
79  // CHECK-LABEL: @test_mm_rsqrt28_round_ss
80  // CHECK: @llvm.x86.avx512.rsqrt28.ss
81  return _mm_rsqrt28_round_ss(a, b, _MM_FROUND_CUR_DIRECTION);
82}
83
84__m128 test_mm_mask_rsqrt28_round_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) {
85  // CHECK-LABEL: @test_mm_mask_rsqrt28_round_ss
86  // CHECK: @llvm.x86.avx512.rsqrt28.ss
87  return _mm_mask_rsqrt28_round_ss(s, m, a, b, _MM_FROUND_CUR_DIRECTION);
88}
89
90__m128 test_mm_maskz_rsqrt28_round_ss(__mmask16 m, __m128 a, __m128 b) {
91  // CHECK-LABEL: @test_mm_maskz_rsqrt28_round_ss
92  // CHECK: @llvm.x86.avx512.rsqrt28.ss
93  return _mm_maskz_rsqrt28_round_ss(m, a, b, _MM_FROUND_CUR_DIRECTION);
94}
95
96__m128 test_mm_rsqrt28_ss(__m128 a, __m128 b) {
97  // CHECK-LABEL: @test_mm_rsqrt28_ss
98  // CHECK: @llvm.x86.avx512.rsqrt28.ss
99  return _mm_rsqrt28_ss(a, b);
100}
101
102__m128 test_mm_mask_rsqrt28_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) {
103  // CHECK-LABEL: @test_mm_mask_rsqrt28_ss
104  // CHECK: @llvm.x86.avx512.rsqrt28.ss
105  return _mm_mask_rsqrt28_ss(s, m, a, b);
106}
107
108__m128 test_mm_maskz_rsqrt28_ss(__mmask16 m, __m128 a, __m128 b) {
109  // CHECK-LABEL: @test_mm_maskz_rsqrt28_ss
110  // CHECK: @llvm.x86.avx512.rsqrt28.ss
111  return _mm_maskz_rsqrt28_ss(m, a, b);
112}
113
114__m128d test_mm_rsqrt28_round_sd(__m128d a, __m128d b) {
115  // CHECK-LABEL: @test_mm_rsqrt28_round_sd
116  // CHECK: @llvm.x86.avx512.rsqrt28.sd
117  return _mm_rsqrt28_round_sd(a, b, _MM_FROUND_CUR_DIRECTION);
118}
119
120__m128d test_mm_mask_rsqrt28_round_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) {
121  // CHECK-LABEL: @test_mm_mask_rsqrt28_round_sd
122  // CHECK: @llvm.x86.avx512.rsqrt28.sd
123  return _mm_mask_rsqrt28_round_sd(s, m, a, b, _MM_FROUND_CUR_DIRECTION);
124}
125
126__m128d test_mm_maskz_rsqrt28_round_sd(__mmask8 m, __m128d a, __m128d b) {
127  // CHECK-LABEL: @test_mm_maskz_rsqrt28_round_sd
128  // CHECK: @llvm.x86.avx512.rsqrt28.sd
129  return _mm_maskz_rsqrt28_round_sd(m, a, b, _MM_FROUND_CUR_DIRECTION);
130}
131
132__m512d test_mm512_rcp28_round_pd(__m512d a) {
133  // CHECK-LABEL: @test_mm512_rcp28_round_pd
134  // CHECK: @llvm.x86.avx512.rcp28.pd
135  return _mm512_rcp28_round_pd(a, _MM_FROUND_CUR_DIRECTION);
136}
137
138__m512d test_mm512_mask_rcp28_round_pd(__m512d s, __mmask8 m, __m512d a) {
139  // CHECK-LABEL: @test_mm512_mask_rcp28_round_pd
140  // CHECK: @llvm.x86.avx512.rcp28.pd
141  return _mm512_mask_rcp28_round_pd(s, m, a, _MM_FROUND_CUR_DIRECTION);
142}
143
144__m512d test_mm512_maskz_rcp28_round_pd(__mmask8 m, __m512d a) {
145  // CHECK-LABEL: @test_mm512_maskz_rcp28_round_pd
146  // CHECK: @llvm.x86.avx512.rcp28.pd
147  return _mm512_maskz_rcp28_round_pd(m, a, _MM_FROUND_CUR_DIRECTION);
148}
149
150__m512d test_mm512_rcp28_pd(__m512d a) {
151  // CHECK-LABEL: @test_mm512_rcp28_pd
152  // CHECK: @llvm.x86.avx512.rcp28.pd
153  return _mm512_rcp28_pd(a);
154}
155
156__m512d test_mm512_mask_rcp28_pd(__m512d s, __mmask8 m, __m512d a) {
157  // CHECK-LABEL: @test_mm512_mask_rcp28_pd
158  // CHECK: @llvm.x86.avx512.rcp28.pd
159  return _mm512_mask_rcp28_pd(s, m, a);
160}
161
162__m512d test_mm512_maskz_rcp28_pd(__mmask8 m, __m512d a) {
163  // CHECK-LABEL: @test_mm512_maskz_rcp28_pd
164  // CHECK: @llvm.x86.avx512.rcp28.pd
165  return _mm512_maskz_rcp28_pd(m, a);
166}
167
168__m512 test_mm512_rcp28_round_ps(__m512 a) {
169  // CHECK-LABEL: @test_mm512_rcp28_round_ps
170  // CHECK: @llvm.x86.avx512.rcp28.ps
171  return _mm512_rcp28_round_ps(a, _MM_FROUND_CUR_DIRECTION);
172}
173
174__m512 test_mm512_mask_rcp28_round_ps(__m512 s, __mmask16 m, __m512 a) {
175  // CHECK-LABEL: @test_mm512_mask_rcp28_round_ps
176  // CHECK: @llvm.x86.avx512.rcp28.ps
177  return _mm512_mask_rcp28_round_ps(s, m, a, _MM_FROUND_CUR_DIRECTION);
178}
179
180__m512 test_mm512_maskz_rcp28_round_ps(__mmask16 m, __m512 a) {
181  // CHECK-LABEL: @test_mm512_maskz_rcp28_round_ps
182  // CHECK: @llvm.x86.avx512.rcp28.ps
183  return _mm512_maskz_rcp28_round_ps(m, a, _MM_FROUND_CUR_DIRECTION);
184}
185
186__m512 test_mm512_rcp28_ps(__m512 a) {
187  // CHECK-LABEL: @test_mm512_rcp28_ps
188  // CHECK: @llvm.x86.avx512.rcp28.ps
189  return _mm512_rcp28_ps(a);
190}
191
192__m512 test_mm512_mask_rcp28_ps(__m512 s, __mmask16 m, __m512 a) {
193  // CHECK-LABEL: @test_mm512_mask_rcp28_ps
194  // CHECK: @llvm.x86.avx512.rcp28.ps
195  return _mm512_mask_rcp28_ps(s, m, a);
196}
197
198__m512 test_mm512_maskz_rcp28_ps(__mmask16 m, __m512 a) {
199  // CHECK-LABEL: @test_mm512_maskz_rcp28_ps
200  // CHECK: @llvm.x86.avx512.rcp28.ps
201  return _mm512_maskz_rcp28_ps(m, a);
202}
203
204__m128 test_mm_rcp28_round_ss(__m128 a, __m128 b) {
205  // CHECK-LABEL: @test_mm_rcp28_round_ss
206  // CHECK: @llvm.x86.avx512.rcp28.ss
207  return _mm_rcp28_round_ss(a, b, _MM_FROUND_CUR_DIRECTION);
208}
209
210__m128 test_mm_mask_rcp28_round_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) {
211  // CHECK-LABEL: @test_mm_mask_rcp28_round_ss
212  // CHECK: @llvm.x86.avx512.rcp28.ss
213  return _mm_mask_rcp28_round_ss(s, m, a, b, _MM_FROUND_CUR_DIRECTION);
214}
215
216__m128 test_mm_maskz_rcp28_round_ss(__mmask16 m, __m128 a, __m128 b) {
217  // CHECK-LABEL: @test_mm_maskz_rcp28_round_ss
218  // CHECK: @llvm.x86.avx512.rcp28.ss
219  return _mm_maskz_rcp28_round_ss(m, a, b, _MM_FROUND_CUR_DIRECTION);
220}
221
222__m128 test_mm_rcp28_ss(__m128 a, __m128 b) {
223  // CHECK-LABEL: @test_mm_rcp28_ss
224  // CHECK: @llvm.x86.avx512.rcp28.ss
225  return _mm_rcp28_ss(a, b);
226}
227
228__m128 test_mm_mask_rcp28_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) {
229  // CHECK-LABEL: @test_mm_mask_rcp28_ss
230  // CHECK: @llvm.x86.avx512.rcp28.ss
231  return _mm_mask_rcp28_ss(s, m, a, b);
232}
233
234__m128 test_mm_maskz_rcp28_ss(__mmask16 m, __m128 a, __m128 b) {
235  // CHECK-LABEL: @test_mm_maskz_rcp28_ss
236  // CHECK: @llvm.x86.avx512.rcp28.ss
237  return _mm_maskz_rcp28_ss(m, a, b);
238}
239
240__m128d test_mm_rcp28_round_sd(__m128d a, __m128d b) {
241  // CHECK-LABEL: @test_mm_rcp28_round_sd
242  // CHECK: @llvm.x86.avx512.rcp28.sd
243  return _mm_rcp28_round_sd(a, b, _MM_FROUND_CUR_DIRECTION);
244}
245
246__m128d test_mm_mask_rcp28_round_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) {
247  // CHECK-LABEL: @test_mm_mask_rcp28_round_sd
248  // CHECK: @llvm.x86.avx512.rcp28.sd
249  return _mm_mask_rcp28_round_sd(s, m, a, b, _MM_FROUND_CUR_DIRECTION);
250}
251
252__m128d test_mm_maskz_rcp28_round_sd(__mmask8 m, __m128d a, __m128d b) {
253  // CHECK-LABEL: @test_mm_maskz_rcp28_round_sd
254  // CHECK: @llvm.x86.avx512.rcp28.sd
255  return _mm_maskz_rcp28_round_sd(m, a, b, _MM_FROUND_CUR_DIRECTION);
256}
257
258__m128d test_mm_rcp28_sd(__m128d a, __m128d b) {
259  // CHECK-LABEL: @test_mm_rcp28_sd
260  // CHECK: @llvm.x86.avx512.rcp28.sd
261  return _mm_rcp28_sd(a, b);
262}
263
264__m128d test_mm_mask_rcp28_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) {
265  // CHECK-LABEL: @test_mm_mask_rcp28_sd
266  // CHECK: @llvm.x86.avx512.rcp28.sd
267  return _mm_mask_rcp28_sd(s, m, a, b);
268}
269
270__m128d test_mm_maskz_rcp28_sd(__mmask8 m, __m128d a, __m128d b) {
271  // CHECK-LABEL: @test_mm_maskz_rcp28_sd
272  // CHECK: @llvm.x86.avx512.rcp28.sd
273  return _mm_maskz_rcp28_sd(m, a, b);
274}
275
276__m512d test_mm512_exp2a23_round_pd(__m512d a) {
277  // CHECK-LABEL: @test_mm512_exp2a23_round_pd
278  // CHECK: @llvm.x86.avx512.exp2.pd
279  return _mm512_exp2a23_round_pd(a, _MM_FROUND_CUR_DIRECTION);
280}
281
282__m512d test_mm512_mask_exp2a23_round_pd(__m512d s, __mmask8 m, __m512d a) {
283  // CHECK-LABEL: @test_mm512_mask_exp2a23_round_pd
284  // CHECK: @llvm.x86.avx512.exp2.pd
285  return _mm512_mask_exp2a23_round_pd(s, m, a, _MM_FROUND_CUR_DIRECTION);
286}
287
288__m512d test_mm512_maskz_exp2a23_round_pd(__mmask8 m, __m512d a) {
289  // CHECK-LABEL: @test_mm512_maskz_exp2a23_round_pd
290  // CHECK: @llvm.x86.avx512.exp2.pd
291  return _mm512_maskz_exp2a23_round_pd(m, a, _MM_FROUND_CUR_DIRECTION);
292}
293
294__m512d test_mm512_exp2a23_pd(__m512d a) {
295  // CHECK-LABEL: @test_mm512_exp2a23_pd
296  // CHECK: @llvm.x86.avx512.exp2.pd
297  return _mm512_exp2a23_pd(a);
298}
299
300__m512d test_mm512_mask_exp2a23_pd(__m512d s, __mmask8 m, __m512d a) {
301  // CHECK-LABEL: @test_mm512_mask_exp2a23_pd
302  // CHECK: @llvm.x86.avx512.exp2.pd
303  return _mm512_mask_exp2a23_pd(s, m, a);
304}
305
306__m512d test_mm512_maskz_exp2a23_pd(__mmask8 m, __m512d a) {
307  // CHECK-LABEL: @test_mm512_maskz_exp2a23_pd
308  // CHECK: @llvm.x86.avx512.exp2.pd
309  return _mm512_maskz_exp2a23_pd(m, a);
310}
311
312__m512 test_mm512_exp2a23_round_ps(__m512 a) {
313  // CHECK-LABEL: @test_mm512_exp2a23_round_ps
314  // CHECK: @llvm.x86.avx512.exp2.ps
315  return _mm512_exp2a23_round_ps(a, _MM_FROUND_CUR_DIRECTION);
316}
317
318__m512 test_mm512_mask_exp2a23_round_ps(__m512 s, __mmask16 m, __m512 a) {
319  // CHECK-LABEL: @test_mm512_mask_exp2a23_round_ps
320  // CHECK: @llvm.x86.avx512.exp2.ps
321  return _mm512_mask_exp2a23_round_ps(s, m, a, _MM_FROUND_CUR_DIRECTION);
322}
323
324__m512 test_mm512_maskz_exp2a23_round_ps(__mmask16 m, __m512 a) {
325  // CHECK-LABEL: @test_mm512_maskz_exp2a23_round_ps
326  // CHECK: @llvm.x86.avx512.exp2.ps
327  return _mm512_maskz_exp2a23_round_ps(m, a, _MM_FROUND_CUR_DIRECTION);
328}
329
330__m512 test_mm512_exp2a23_ps(__m512 a) {
331  // CHECK-LABEL: @test_mm512_exp2a23_ps
332  // CHECK: @llvm.x86.avx512.exp2.ps
333  return _mm512_exp2a23_ps(a);
334}
335
336__m512 test_mm512_mask_exp2a23_ps(__m512 s, __mmask16 m, __m512 a) {
337  // CHECK-LABEL: @test_mm512_mask_exp2a23_ps
338  // CHECK: @llvm.x86.avx512.exp2.ps
339  return _mm512_mask_exp2a23_ps(s, m, a);
340}
341
342__m512 test_mm512_maskz_exp2a23_ps(__mmask16 m, __m512 a) {
343  // CHECK-LABEL: @test_mm512_maskz_exp2a23_ps
344  // CHECK: @llvm.x86.avx512.exp2.ps
345  return _mm512_maskz_exp2a23_ps(m, a);
346}
347
348