1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only \
2 // RUN: -target-feature +f16c -target-feature +avx -target-feature +sse4a \
3 // RUN: -target-feature +aes -target-feature +xop -target-feature +avx2 \
4 // RUN: -target-feature +tbm -verify %s
6 // Error test cases where a variable is passed to intrinsics but an
7 // immediate operand is required.
9 // Don't include mm_malloc.h, it's system specific.
12 #include <x86intrin.h>
14 unsigned short check__cvtss_sh(float val
, const int I
) {
15 return _cvtss_sh(val
, I
); // expected-error {{argument to '__builtin_ia32_vcvtps2ph' must be a constant integer}}
18 __m128i
check__mm_cvtps_ph(__m128 val
, const int I
) {
19 return _mm_cvtps_ph(val
, I
); // expected-error {{argument to '__builtin_ia32_vcvtps2ph' must be a constant integer}}
22 __m128i
check__mm256_cvtps_ph(__m256 val
, const int I
) {
23 return _mm256_cvtps_ph(val
, I
); // expected-error {{argument to '__builtin_ia32_vcvtps2ph256' must be a constant integer}}
26 void check__mm_slli_si128(__m128i a
, const int count
) {
27 _mm_slli_si128(a
, count
); // expected-error {{argument to '__builtin_ia32_pslldqi128_byteshift' must be a constant integer}}
30 void check__mm_srli_si128(__m128i a
, const int count
) {
31 _mm_srli_si128(a
, count
); // expected-error {{argument to '__builtin_ia32_psrldqi128_byteshift' must be a constant integer}}
34 void check__mm_shuffle_epi32(__m128i a
, const int imm
) {
35 _mm_shuffle_epi32(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshufd' must be a constant integer}}
38 void check__mm_shufflelo_epi16(__m128i a
, const int imm
) {
39 _mm_shufflelo_epi16(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshuflw' must be a constant integer}}
42 void check__mm_shufflehi_epi16(__m128i a
, const int imm
) {
43 _mm_shufflehi_epi16(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshufhw' must be a constant integer}}
46 void check__mm_shuffle_pd(__m128d a
, __m128d b
, const int i
) {
47 _mm_shuffle_pd(a
, b
, i
); // expected-error {{argument to '__builtin_ia32_shufpd' must be a constant integer}}
50 void check__mm256_round_pd(__m256d a
, const int b
) {
51 _mm256_round_pd(a
, b
); // expected-error {{argument to '__builtin_ia32_roundpd256' must be a constant integer}}
54 void check__mm256_round_ps(__m256 a
, const int b
) {
55 _mm256_round_ps(a
, b
); // expected-error {{argument to '__builtin_ia32_roundps256' must be a constant integer}}
58 void check__mm_permute_pd(__m128d a
, const int b
) {
59 _mm_permute_pd(a
, b
); // expected-error {{argument to '__builtin_ia32_vpermilpd' must be a constant integer}}
62 void check__mm256_permute_pd(__m256d a
, const int b
) {
63 _mm256_permute_pd(a
, b
); // expected-error {{argument to '__builtin_ia32_vpermilpd256' must be a constant integer}}
66 void check__mm_permute_ps(__m128 a
, const int b
) {
67 _mm_permute_ps(a
, b
); // expected-error {{argument to '__builtin_ia32_vpermilps' must be a constant integer}}
70 void check__mm256_permute_ps(__m256 a
, const int b
) {
71 _mm256_permute_ps(a
, b
); // expected-error {{argument to '__builtin_ia32_vpermilps256' must be a constant integer}}
74 void check__mm256_permute2f128_pd(__m256d v1
, __m256d v2
, const char m
) {
75 _mm256_permute2f128_pd(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_vperm2f128_pd256' must be a constant integer}}
78 void check__mm256_permute2f128_ps(__m256 v1
, __m256 v2
, const char m
) {
79 _mm256_permute2f128_ps(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_vperm2f128_ps256' must be a constant integer}}
82 void check__mm256_permute2f128_si256(__m256i v1
, __m256i v2
, const char m
) {
83 _mm256_permute2f128_si256(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_vperm2f128_si256' must be a constant integer}}
86 void check__m256_blend_pd(__m256d v1
, __m256d v2
, const char m
) {
87 _mm256_blend_pd(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_blendpd256' must be a constant integer}}
90 void check__m256_blend_ps(__m256 v1
, __m256 v2
, const char m
) {
91 _mm256_blend_ps(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_blendps256' must be a constant integer}}
94 void check__mm256_dp_ps(__m256 v1
, __m256 v2
, const char m
) {
95 _mm256_dp_ps(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_dpps256' must be a constant integer}}
98 void check__m256_shuffle_ps(__m256 a
, __m256 b
, const int m
) {
99 _mm256_shuffle_ps(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_shufps256' must be a constant integer}}
102 void check__m256_shuffle_pd(__m256d a
, __m256d b
, const int m
) {
103 _mm256_shuffle_pd(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_shufpd256' must be a constant integer}}
106 void check__mm_cmp_pd(__m128d a
, __m128d b
, const int c
) {
107 _mm_cmp_pd(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmppd' must be a constant integer}}
110 void check__mm_cmp_ps(__m128 a
, __m128 b
, const int c
) {
111 _mm_cmp_ps(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmpps' must be a constant integer}}
114 void check__mm256_cmp_pd(__m256d a
, __m256d b
, const int c
) {
115 _mm256_cmp_pd(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmppd256' must be a constant integer}}
118 void check__mm256_cmp_ps(__m256 a
, __m256 b
, const int c
) {
119 _mm256_cmp_ps(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmpps256' must be a constant integer}}
122 void check__mm_cmp_sd(__m128d a
, __m128d b
, const int c
) {
123 _mm_cmp_sd(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmpsd' must be a constant integer}}
126 void check__mm_cmp_ss(__m128 a
, __m128 b
, const int c
) {
127 _mm_cmp_ss(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_cmpss' must be a constant integer}}
130 void check__mm256_extractf128_pd(__m256d a
, const int o
) {
131 _mm256_extractf128_pd(a
, o
); // expected-error {{argument to '__builtin_ia32_vextractf128_pd256' must be a constant integer}}
134 void check__mm256_extractf128_ps(__m256 a
, const int o
) {
135 _mm256_extractf128_ps(a
, o
); // expected-error {{argument to '__builtin_ia32_vextractf128_ps256' must be a constant integer}}
138 void check__mm256_extractf128_si256(__m256i a
, const int o
) {
139 _mm256_extractf128_si256(a
, o
); // expected-error {{argument to '__builtin_ia32_vextractf128_si256' must be a constant integer}}
142 void check__mm256_insertf128_pd(__m256d v1
, __m128d v2
, const int o
) {
143 _mm256_insertf128_pd(v1
, v2
, o
); // expected-error {{argument to '__builtin_ia32_vinsertf128_pd256' must be a constant integer}}
146 void check__mm256_insertf128_ps(__m256 v1
, __m128 v2
, const int o
) {
147 _mm256_insertf128_ps(v1
, v2
, o
); // expected-error {{argument to '__builtin_ia32_vinsertf128_ps256' must be a constant integer}}
150 void check__mm256_insertf128_si256(__m256i v1
, __m128i v2
, const int o
) {
151 _mm256_insertf128_si256(v1
, v2
, o
); // expected-error {{argument to '__builtin_ia32_vinsertf128_si256' must be a constant integer}}
154 void check__mm_round_ps(__m128 x
, const int m
) {
155 _mm_round_ps(x
, m
); // expected-error {{argument to '__builtin_ia32_roundps' must be a constant integer}}
158 void check__mm_round_ss(__m128 x
, __m128 y
, const int m
) {
159 _mm_round_ss(x
, y
, m
); // expected-error {{argument to '__builtin_ia32_roundss' must be a constant integer}}
162 void check__mm_round_pd(__m128d x
, const int m
) {
163 _mm_round_pd(x
, m
); // expected-error {{argument to '__builtin_ia32_roundpd' must be a constant integer}}
166 void check__mm_round_sd(__m128d x
, __m128d y
, const int m
) {
167 _mm_round_sd(x
, y
, m
); // expected-error {{argument to '__builtin_ia32_roundsd' must be a constant integer}}
170 void check__mm_blend_pd(__m128d v1
, __m128d v2
, const int m
) {
171 _mm_blend_pd(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_blendpd' must be a constant integer}}
174 void check__mm_blend_ps(__m128 v1
, __m128 v2
, const int m
) {
175 _mm_blend_ps(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_blendps' must be a constant integer}}
178 void check__mm_blend_epi16(__m128i v1
, __m128i v2
, const int m
) {
179 _mm_blend_epi16(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_pblendw128' must be a constant integer}}
182 void check__mm_dp_ps(__m128 x
, __m128 y
, const int m
) {
183 _mm_dp_ps(x
, y
, m
); // expected-error {{argument to '__builtin_ia32_dpps' must be a constant integer}}
186 void check__mm_dp_pd(__m128d x
, __m128d y
, const int m
) {
187 _mm_dp_pd(x
, y
, m
); // expected-error {{argument to '__builtin_ia32_dppd' must be a constant integer}}
190 void check__mm_insert_ps(__m128 a
, __m128 b
, const int n
) {
191 _mm_insert_ps(a
, b
, n
); // expected-error {{argument to '__builtin_ia32_insertps128' must be a constant integer}}
194 void check__mm_mpsadbw_epu8(__m128i x
, __m128i y
, const int m
) {
195 _mm_mpsadbw_epu8(x
, y
, m
); // expected-error {{argument to '__builtin_ia32_mpsadbw128' must be a constant integer}}
198 void check__mm_cmpistrm(__m128 a
, __m128 b
, const int m
) {
199 _mm_cmpistrm(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_pcmpistrm128' must be a constant integer}}
202 void check__mm_cmpistri(__m128i a
, __m128i b
, const int m
) {
203 _mm_cmpistri(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_pcmpistri128' must be a constant integer}}
206 void check__mm_cmpestrm(__m128 a
, int b
, __m128 c
, int d
, const int m
) {
207 _mm_cmpestrm(a
, b
, c
, d
, m
); // expected-error {{argument to '__builtin_ia32_pcmpestrm128' must be a constant integer}}
210 void check__mm_cmpestri(__m128i a
, int b
, __m128i c
, int d
, const int m
) {
211 _mm_cmpestri(a
, b
, c
, d
, m
); // expected-error {{argument to '__builtin_ia32_pcmpestri128' must be a constant integer}}
214 void check__mm_alignr_epi8(__m128i a
, __m128i b
, const int n
) {
215 _mm_alignr_epi8(a
, b
, n
); // expected-error {{argument to '__builtin_ia32_palignr128' must be a constant integer}}
218 void check__mm_alignr_pi8(__m64 a
, __m64 b
, const int n
) {
219 _mm_alignr_pi8(a
, b
, n
); // expected-error {{argument to '__builtin_ia32_psrldqi128_byteshift' must be a constant integer}}
222 void check__mm_aeskeygenassist_si128(__m128 c
, const int r
) {
223 _mm_aeskeygenassist_si128(c
, r
); // expected-error {{argument to '__builtin_ia32_aeskeygenassist128' must be a constant integer}}
226 __m64
check__mm_shuffle_pi16(__m64 a
, const int n
) {
227 return _mm_shuffle_pi16(a
, n
); // expected-error {{index for __builtin_shufflevector must be a constant integer}}
230 void check__mm_shuffle_ps(__m128 a
, __m128 b
, const int m
) {
231 _mm_shuffle_ps(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_shufps' must be a constant integer}}
234 void check__mm_com_epi8(__m128 a
, __m128 b
, const char c
) {
235 _mm_com_epi8(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomb' must be a constant integer}}
238 void check__mm_com_epi16(__m128 a
, __m128 b
, const char c
) {
239 _mm_com_epi16(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomw' must be a constant integer}}
242 void check__mm_com_epi32(__m128 a
, __m128 b
, const char c
) {
243 _mm_com_epi32(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomd' must be a constant integer}}
246 void check__mm_com_epi64(__m128 a
, __m128 b
, const char c
) {
247 _mm_com_epi64(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomq' must be a constant integer}}
250 void check__mm_com_epu8(__m128 a
, __m128 b
, const char c
) {
251 _mm_com_epu8(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomub' must be a constant integer}}
254 void check__mm_com_epu16(__m128 a
, __m128 b
, const char c
) {
255 _mm_com_epu16(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomuw' must be a constant integer}}
258 void check__mm_com_epu32(__m128 a
, __m128 b
, const char c
) {
259 _mm_com_epu32(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomud' must be a constant integer}}
262 void check__mm_com_epu64(__m128 a
, __m128 b
, const char c
) {
263 _mm_com_epu64(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_vpcomuq' must be a constant integer}}
266 void check__mm_permute2_pd(__m128d a
, __m128d b
, __m128d c
, const char d
) {
267 _mm_permute2_pd(a
, b
, c
, d
); // expected-error {{argument to '__builtin_ia32_vpermil2pd' must be a constant integer}}
270 void check__mm_permute2_ps(__m128 a
, __m128 b
, __m128 c
, const char d
) {
271 _mm_permute2_ps(a
, b
, c
, d
); // expected-error {{argument to '__builtin_ia32_vpermil2ps' must be a constant integer}}
274 void check__mm256_permute2_pd(__m256d a
, __m256d b
, __m256d c
, const char d
) {
275 _mm256_permute2_pd(a
, b
, c
, d
); // expected-error {{argument to '__builtin_ia32_vpermil2pd256' must be a constant integer}}
278 void check__mm256_permute2_ps(__m256 a
, __m256 b
, __m256 c
, const char d
) {
279 _mm256_permute2_ps(a
, b
, c
, d
); // expected-error {{argument to '__builtin_ia32_vpermil2ps256' must be a constant integer}}
282 void check__mm_roti_epi8(__m128 a
, const char b
) {
283 _mm_roti_epi8(a
, b
); // expected-error {{argument to '__builtin_ia32_vprotbi' must be a constant integer}}
286 void check__mm_roti_epi16(__m128 a
, const char b
) {
287 _mm_roti_epi16(a
, b
); // expected-error {{argument to '__builtin_ia32_vprotwi' must be a constant integer}}
290 void check__mm_roti_epi32(__m128 a
, const char b
) {
291 _mm_roti_epi32(a
, b
); // expected-error {{argument to '__builtin_ia32_vprotdi' must be a constant integer}}
294 void check__mm_roti_epi64(__m128 a
, const char b
) {
295 _mm_roti_epi64(a
, b
); // expected-error {{argument to '__builtin_ia32_vprotqi' must be a constant integer}}
298 void check__mm256_mpsadbw_epu8(__m256i a
, __m256i b
, const int c
) {
299 _mm256_mpsadbw_epu8(a
, b
, c
); // expected-error {{argument to '__builtin_ia32_mpsadbw256' must be a constant integer}}
302 void check__mm256_alignr_epi8(__m256i a
, __m256i b
, const int n
) {
303 _mm256_alignr_epi8(a
, b
, n
); // expected-error {{argument to '__builtin_ia32_palignr256' must be a constant integer}}
306 void check__mm256_blend_epi16(__m256i a
, __m256i b
, const int m
) {
307 _mm256_blend_epi16(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_pblendw256' must be a constant integer}}
310 void check__mm256_slli_si256(__m256i a
, const int count
) {
311 _mm256_slli_si256(a
, count
); // expected-error {{argument to '__builtin_ia32_pslldqi256_byteshift' must be a constant integer}}
314 void check__mm256_shuffle_epi32(__m256i a
, const int imm
) {
315 _mm256_shuffle_epi32(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshufd256' must be a constant integer}}
318 void check__mm256_shufflehi_epi16(__m256i a
, const int imm
) {
319 _mm256_shufflehi_epi16(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshufhw256' must be a constant integer}}
322 void check__mm256_shufflelo_epi16(__m256i a
, const int imm
) {
323 _mm256_shufflelo_epi16(a
, imm
); // expected-error {{argument to '__builtin_ia32_pshuflw256' must be a constant integer}}
326 void check__mm_blend_epi32(__m128i a
, __m128i b
, const int m
) {
327 _mm_blend_epi32(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_pblendd128' must be a constant integer}}
330 void check__mm256_blend_epi32(__m256i a
, __m256i b
, const int m
) {
331 _mm256_blend_epi32(a
, b
, m
); // expected-error {{argument to '__builtin_ia32_pblendd256' must be a constant integer}}
334 void check__mm256_permute4x64_pd(__m256d v
, const int m
) {
335 _mm256_permute4x64_pd(v
, m
); // expected-error {{argument to '__builtin_ia32_permdf256' must be a constant integer}}
338 void check__mm256_permute4x64_epi64(__m256i v
, const int m
) {
339 _mm256_permute4x64_epi64(v
, m
); // expected-error {{argument to '__builtin_ia32_permdi256' must be a constant integer}}
342 void check__mm256_permute2x128_si256(__m256i v1
, __m256i v2
, const int m
) {
343 _mm256_permute2x128_si256(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_permti256' must be a constant integer}}
346 void check__mm256_extracti128_si256(__m256i v1
, const int m
) {
347 _mm256_extracti128_si256(v1
, m
); // expected-error {{argument to '__builtin_ia32_extract128i256' must be a constant integer}}
350 void check__mm256_inserti128_si256(__m256i v1
, __m128i v2
, const int m
) {
351 _mm256_inserti128_si256(v1
, v2
, m
); // expected-error {{argument to '__builtin_ia32_insert128i256' must be a constant integer}}
354 void check__mm256_srli_si256(__m256i a
, int count
) {
355 _mm256_srli_si256(a
, count
); // expected-error {{argument to '__builtin_ia32_psrldqi256_byteshift' must be a constant integer}}
358 int check__bextri_u32(int a
, int b
) {
359 return __bextri_u32(a
, b
); // expected-error {{argument to '__builtin_ia32_bextri_u32' must be a constant integer}}
362 int check__bextri_u64(long a
, long b
) {
363 return __bextri_u64(a
, b
); // expected-error {{argument to '__builtin_ia32_bextri_u64' must be a constant integer}}
366 int check___builtin_eh_return_data_regno(int a
) {
367 return __builtin_eh_return_data_regno(a
); // expected-error {{argument to '__builtin_eh_return_data_regno' must be a constant integer}}
370 void* check___builtin_frame_address(unsigned int a
) {
371 return __builtin_frame_address(a
); // expected-error {{argument to '__builtin_frame_address' must be a constant integer}}
374 void* check___builtin_return_address(unsigned int a
) {
375 return __builtin_return_address(a
); // expected-error {{argument to '__builtin_return_address' must be a constant integer}}
378 void check__mm_extracti_si64(__m128i a
, const char len
, const char id
) {
379 _mm_extracti_si64(a
, len
, id
); // expected-error {{argument to '__builtin_ia32_extrqi' must be a constant integer}}
382 void check__insert_si64(__m128 a
, __m128 b
, const char len
, const char id
) {
383 _mm_inserti_si64(a
, b
, len
, id
); // expected-error {{argument to '__builtin_ia32_insertqi' must be a constant integer}}