• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Werror | FileCheck %s
2 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
3 
4 // Don't include mm_malloc.h, it's system specific.
5 #define __MM_MALLOC_H
6 
7 #include <x86intrin.h>
8 
9 // NOTE: This should match the tests in llvm/test/CodeGen/X86/xop-intrinsics-fast-isel.ll
10 
test_mm_maccs_epi16(__m128i a,__m128i b,__m128i c)11 __m128i test_mm_maccs_epi16(__m128i a, __m128i b, __m128i c) {
12   // CHECK-LABEL: test_mm_maccs_epi16
13   // CHECK: call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}})
14   return _mm_maccs_epi16(a, b, c);
15 }
16 
test_mm_macc_epi16(__m128i a,__m128i b,__m128i c)17 __m128i test_mm_macc_epi16(__m128i a, __m128i b, __m128i c) {
18   // CHECK-LABEL: test_mm_macc_epi16
19   // CHECK: call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}})
20   return _mm_macc_epi16(a, b, c);
21 }
22 
test_mm_maccsd_epi16(__m128i a,__m128i b,__m128i c)23 __m128i test_mm_maccsd_epi16(__m128i a, __m128i b, __m128i c) {
24   // CHECK-LABEL: test_mm_maccsd_epi16
25   // CHECK: call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> %{{.*}})
26   return _mm_maccsd_epi16(a, b, c);
27 }
28 
test_mm_maccd_epi16(__m128i a,__m128i b,__m128i c)29 __m128i test_mm_maccd_epi16(__m128i a, __m128i b, __m128i c) {
30   // CHECK-LABEL: test_mm_maccd_epi16
31   // CHECK: call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> %{{.*}})
32   return _mm_maccd_epi16(a, b, c);
33 }
34 
test_mm_maccs_epi32(__m128i a,__m128i b,__m128i c)35 __m128i test_mm_maccs_epi32(__m128i a, __m128i b, __m128i c) {
36   // CHECK-LABEL: test_mm_maccs_epi32
37   // CHECK: call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}})
38   return _mm_maccs_epi32(a, b, c);
39 }
40 
test_mm_macc_epi32(__m128i a,__m128i b,__m128i c)41 __m128i test_mm_macc_epi32(__m128i a, __m128i b, __m128i c) {
42   // CHECK-LABEL: test_mm_macc_epi32
43   // CHECK: call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}})
44   return _mm_macc_epi32(a, b, c);
45 }
46 
test_mm_maccslo_epi32(__m128i a,__m128i b,__m128i c)47 __m128i test_mm_maccslo_epi32(__m128i a, __m128i b, __m128i c) {
48   // CHECK-LABEL: test_mm_maccslo_epi32
49   // CHECK: call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}})
50   return _mm_maccslo_epi32(a, b, c);
51 }
52 
test_mm_macclo_epi32(__m128i a,__m128i b,__m128i c)53 __m128i test_mm_macclo_epi32(__m128i a, __m128i b, __m128i c) {
54   // CHECK-LABEL: test_mm_macclo_epi32
55   // CHECK: call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}})
56   return _mm_macclo_epi32(a, b, c);
57 }
58 
test_mm_maccshi_epi32(__m128i a,__m128i b,__m128i c)59 __m128i test_mm_maccshi_epi32(__m128i a, __m128i b, __m128i c) {
60   // CHECK-LABEL: test_mm_maccshi_epi32
61   // CHECK: call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}})
62   return _mm_maccshi_epi32(a, b, c);
63 }
64 
test_mm_macchi_epi32(__m128i a,__m128i b,__m128i c)65 __m128i test_mm_macchi_epi32(__m128i a, __m128i b, __m128i c) {
66   // CHECK-LABEL: test_mm_macchi_epi32
67   // CHECK: call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}})
68   return _mm_macchi_epi32(a, b, c);
69 }
70 
test_mm_maddsd_epi16(__m128i a,__m128i b,__m128i c)71 __m128i test_mm_maddsd_epi16(__m128i a, __m128i b, __m128i c) {
72   // CHECK-LABEL: test_mm_maddsd_epi16
73   // CHECK: call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> %{{.*}})
74   return _mm_maddsd_epi16(a, b, c);
75 }
76 
test_mm_maddd_epi16(__m128i a,__m128i b,__m128i c)77 __m128i test_mm_maddd_epi16(__m128i a, __m128i b, __m128i c) {
78   // CHECK-LABEL: test_mm_maddd_epi16
79   // CHECK: call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> %{{.*}})
80   return _mm_maddd_epi16(a, b, c);
81 }
82 
test_mm_haddw_epi8(__m128i a)83 __m128i test_mm_haddw_epi8(__m128i a) {
84   // CHECK-LABEL: test_mm_haddw_epi8
85   // CHECK: call <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8> %{{.*}})
86   return _mm_haddw_epi8(a);
87 }
88 
test_mm_haddd_epi8(__m128i a)89 __m128i test_mm_haddd_epi8(__m128i a) {
90   // CHECK-LABEL: test_mm_haddd_epi8
91   // CHECK: call <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8> %{{.*}})
92   return _mm_haddd_epi8(a);
93 }
94 
test_mm_haddq_epi8(__m128i a)95 __m128i test_mm_haddq_epi8(__m128i a) {
96   // CHECK-LABEL: test_mm_haddq_epi8
97   // CHECK: call <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %{{.*}})
98   return _mm_haddq_epi8(a);
99 }
100 
test_mm_haddd_epi16(__m128i a)101 __m128i test_mm_haddd_epi16(__m128i a) {
102   // CHECK-LABEL: test_mm_haddd_epi16
103   // CHECK: call <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16> %{{.*}})
104   return _mm_haddd_epi16(a);
105 }
106 
test_mm_haddq_epi16(__m128i a)107 __m128i test_mm_haddq_epi16(__m128i a) {
108   // CHECK-LABEL: test_mm_haddq_epi16
109   // CHECK: call <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %{{.*}})
110   return _mm_haddq_epi16(a);
111 }
112 
test_mm_haddq_epi32(__m128i a)113 __m128i test_mm_haddq_epi32(__m128i a) {
114   // CHECK-LABEL: test_mm_haddq_epi32
115   // CHECK: call <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %{{.*}})
116   return _mm_haddq_epi32(a);
117 }
118 
test_mm_haddw_epu8(__m128i a)119 __m128i test_mm_haddw_epu8(__m128i a) {
120   // CHECK-LABEL: test_mm_haddw_epu8
121   // CHECK: call <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8> %{{.*}})
122   return _mm_haddw_epu8(a);
123 }
124 
test_mm_haddd_epu8(__m128i a)125 __m128i test_mm_haddd_epu8(__m128i a) {
126   // CHECK-LABEL: test_mm_haddd_epu8
127   // CHECK: call <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8> %{{.*}})
128   return _mm_haddd_epu8(a);
129 }
130 
test_mm_haddq_epu8(__m128i a)131 __m128i test_mm_haddq_epu8(__m128i a) {
132   // CHECK-LABEL: test_mm_haddq_epu8
133   // CHECK: call <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %{{.*}})
134   return _mm_haddq_epu8(a);
135 }
136 
test_mm_haddd_epu16(__m128i a)137 __m128i test_mm_haddd_epu16(__m128i a) {
138   // CHECK-LABEL: test_mm_haddd_epu16
139   // CHECK: call <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16> %{{.*}})
140   return _mm_haddd_epu16(a);
141 }
142 
test_mm_haddq_epu16(__m128i a)143 __m128i test_mm_haddq_epu16(__m128i a) {
144   // CHECK-LABEL: test_mm_haddq_epu16
145   // CHECK: call <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %{{.*}})
146   return _mm_haddq_epu16(a);
147 }
148 
test_mm_haddq_epu32(__m128i a)149 __m128i test_mm_haddq_epu32(__m128i a) {
150   // CHECK-LABEL: test_mm_haddq_epu32
151   // CHECK: call <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %{{.*}})
152   return _mm_haddq_epu32(a);
153 }
154 
test_mm_hsubw_epi8(__m128i a)155 __m128i test_mm_hsubw_epi8(__m128i a) {
156   // CHECK-LABEL: test_mm_hsubw_epi8
157   // CHECK: call <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8> %{{.*}})
158   return _mm_hsubw_epi8(a);
159 }
160 
test_mm_hsubd_epi16(__m128i a)161 __m128i test_mm_hsubd_epi16(__m128i a) {
162   // CHECK-LABEL: test_mm_hsubd_epi16
163   // CHECK: call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %{{.*}})
164   return _mm_hsubd_epi16(a);
165 }
166 
test_mm_hsubq_epi32(__m128i a)167 __m128i test_mm_hsubq_epi32(__m128i a) {
168   // CHECK-LABEL: test_mm_hsubq_epi32
169   // CHECK: call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %{{.*}})
170   return _mm_hsubq_epi32(a);
171 }
172 
test_mm_cmov_si128(__m128i a,__m128i b,__m128i c)173 __m128i test_mm_cmov_si128(__m128i a, __m128i b, __m128i c) {
174   // CHECK-LABEL: test_mm_cmov_si128
175   // CHECK: call <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
176   return _mm_cmov_si128(a, b, c);
177 }
178 
test_mm256_cmov_si256(__m256i a,__m256i b,__m256i c)179 __m256i test_mm256_cmov_si256(__m256i a, __m256i b, __m256i c) {
180   // CHECK-LABEL: test_mm256_cmov_si256
181   // CHECK: call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})
182   return _mm256_cmov_si256(a, b, c);
183 }
184 
test_mm_perm_epi8(__m128i a,__m128i b,__m128i c)185 __m128i test_mm_perm_epi8(__m128i a, __m128i b, __m128i c) {
186   // CHECK-LABEL: test_mm_perm_epi8
187   // CHECK: call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
188   return _mm_perm_epi8(a, b, c);
189 }
190 
test_mm_rot_epi8(__m128i a,__m128i b)191 __m128i test_mm_rot_epi8(__m128i a, __m128i b) {
192   // CHECK-LABEL: test_mm_rot_epi8
193   // CHECK: call <16 x i8> @llvm.x86.xop.vprotb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
194   return _mm_rot_epi8(a, b);
195 }
196 
test_mm_rot_epi16(__m128i a,__m128i b)197 __m128i test_mm_rot_epi16(__m128i a, __m128i b) {
198   // CHECK-LABEL: test_mm_rot_epi16
199   // CHECK: call <8 x i16> @llvm.x86.xop.vprotw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
200   return _mm_rot_epi16(a, b);
201 }
202 
test_mm_rot_epi32(__m128i a,__m128i b)203 __m128i test_mm_rot_epi32(__m128i a, __m128i b) {
204   // CHECK-LABEL: test_mm_rot_epi32
205   // CHECK: call <4 x i32> @llvm.x86.xop.vprotd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
206   return _mm_rot_epi32(a, b);
207 }
208 
test_mm_rot_epi64(__m128i a,__m128i b)209 __m128i test_mm_rot_epi64(__m128i a, __m128i b) {
210   // CHECK-LABEL: test_mm_rot_epi64
211   // CHECK: call <2 x i64> @llvm.x86.xop.vprotq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
212   return _mm_rot_epi64(a, b);
213 }
214 
test_mm_roti_epi8(__m128i a)215 __m128i test_mm_roti_epi8(__m128i a) {
216   // CHECK-LABEL: test_mm_roti_epi8
217   // CHECK: call <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8> %{{.*}}, i8 1)
218   return _mm_roti_epi8(a, 1);
219 }
220 
test_mm_roti_epi16(__m128i a)221 __m128i test_mm_roti_epi16(__m128i a) {
222   // CHECK-LABEL: test_mm_roti_epi16
223   // CHECK: call <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16> %{{.*}}, i8 50)
224   return _mm_roti_epi16(a, 50);
225 }
226 
test_mm_roti_epi32(__m128i a)227 __m128i test_mm_roti_epi32(__m128i a) {
228   // CHECK-LABEL: test_mm_roti_epi32
229   // CHECK: call <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32> %{{.*}}, i8 -30)
230   return _mm_roti_epi32(a, -30);
231 }
232 
test_mm_roti_epi64(__m128i a)233 __m128i test_mm_roti_epi64(__m128i a) {
234   // CHECK-LABEL: test_mm_roti_epi64
235   // CHECK: call <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64> %{{.*}}, i8 100)
236   return _mm_roti_epi64(a, 100);
237 }
238 
test_mm_shl_epi8(__m128i a,__m128i b)239 __m128i test_mm_shl_epi8(__m128i a, __m128i b) {
240   // CHECK-LABEL: test_mm_shl_epi8
241   // CHECK: call <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
242   return _mm_shl_epi8(a, b);
243 }
244 
test_mm_shl_epi16(__m128i a,__m128i b)245 __m128i test_mm_shl_epi16(__m128i a, __m128i b) {
246   // CHECK-LABEL: test_mm_shl_epi16
247   // CHECK: call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
248   return _mm_shl_epi16(a, b);
249 }
250 
test_mm_shl_epi32(__m128i a,__m128i b)251 __m128i test_mm_shl_epi32(__m128i a, __m128i b) {
252   // CHECK-LABEL: test_mm_shl_epi32
253   // CHECK: call <4 x i32> @llvm.x86.xop.vpshld(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
254   return _mm_shl_epi32(a, b);
255 }
256 
test_mm_shl_epi64(__m128i a,__m128i b)257 __m128i test_mm_shl_epi64(__m128i a, __m128i b) {
258   // CHECK-LABEL: test_mm_shl_epi64
259   // CHECK: call <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
260   return _mm_shl_epi64(a, b);
261 }
262 
test_mm_sha_epi8(__m128i a,__m128i b)263 __m128i test_mm_sha_epi8(__m128i a, __m128i b) {
264   // CHECK-LABEL: test_mm_sha_epi8
265   // CHECK: call <16 x i8> @llvm.x86.xop.vpshab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
266   return _mm_sha_epi8(a, b);
267 }
268 
test_mm_sha_epi16(__m128i a,__m128i b)269 __m128i test_mm_sha_epi16(__m128i a, __m128i b) {
270   // CHECK-LABEL: test_mm_sha_epi16
271   // CHECK: call <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
272   return _mm_sha_epi16(a, b);
273 }
274 
test_mm_sha_epi32(__m128i a,__m128i b)275 __m128i test_mm_sha_epi32(__m128i a, __m128i b) {
276   // CHECK-LABEL: test_mm_sha_epi32
277   // CHECK: call <4 x i32> @llvm.x86.xop.vpshad(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
278   return _mm_sha_epi32(a, b);
279 }
280 
test_mm_sha_epi64(__m128i a,__m128i b)281 __m128i test_mm_sha_epi64(__m128i a, __m128i b) {
282   // CHECK-LABEL: test_mm_sha_epi64
283   // CHECK: call <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
284   return _mm_sha_epi64(a, b);
285 }
286 
test_mm_com_epu8(__m128i a,__m128i b)287 __m128i test_mm_com_epu8(__m128i a, __m128i b) {
288   // CHECK-LABEL: test_mm_com_epu8
289   // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 0)
290   return _mm_com_epu8(a, b, 0);
291 }
292 
test_mm_com_epu16(__m128i a,__m128i b)293 __m128i test_mm_com_epu16(__m128i a, __m128i b) {
294   // CHECK-LABEL: test_mm_com_epu16
295   // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 0)
296   return _mm_com_epu16(a, b, 0);
297 }
298 
test_mm_com_epu32(__m128i a,__m128i b)299 __m128i test_mm_com_epu32(__m128i a, __m128i b) {
300   // CHECK-LABEL: test_mm_com_epu32
301   // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 0)
302   return _mm_com_epu32(a, b, 0);
303 }
304 
test_mm_com_epu64(__m128i a,__m128i b)305 __m128i test_mm_com_epu64(__m128i a, __m128i b) {
306   // CHECK-LABEL: test_mm_com_epu64
307   // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 0)
308   return _mm_com_epu64(a, b, 0);
309 }
310 
test_mm_com_epi8(__m128i a,__m128i b)311 __m128i test_mm_com_epi8(__m128i a, __m128i b) {
312   // CHECK-LABEL: test_mm_com_epi8
313   // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 0)
314   return _mm_com_epi8(a, b, 0);
315 }
316 
test_mm_com_epi16(__m128i a,__m128i b)317 __m128i test_mm_com_epi16(__m128i a, __m128i b) {
318   // CHECK-LABEL: test_mm_com_epi16
319   // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 0)
320   return _mm_com_epi16(a, b, 0);
321 }
322 
test_mm_com_epi32(__m128i a,__m128i b)323 __m128i test_mm_com_epi32(__m128i a, __m128i b) {
324   // CHECK-LABEL: test_mm_com_epi32
325   // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 0)
326   return _mm_com_epi32(a, b, 0);
327 }
328 
test_mm_com_epi64(__m128i a,__m128i b)329 __m128i test_mm_com_epi64(__m128i a, __m128i b) {
330   // CHECK-LABEL: test_mm_com_epi64
331   // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 0)
332   return _mm_com_epi64(a, b, 0);
333 }
334 
test_mm_permute2_pd(__m128d a,__m128d b,__m128i c)335 __m128d test_mm_permute2_pd(__m128d a, __m128d b, __m128i c) {
336   // CHECK-LABEL: test_mm_permute2_pd
337   // CHECK: call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i64> %{{.*}}, i8 0)
338   return _mm_permute2_pd(a, b, c, 0);
339 }
340 
test_mm256_permute2_pd(__m256d a,__m256d b,__m256i c)341 __m256d test_mm256_permute2_pd(__m256d a, __m256d b, __m256i c) {
342   // CHECK-LABEL: test_mm256_permute2_pd
343   // CHECK: call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i64> %{{.*}}, i8 0)
344   return _mm256_permute2_pd(a, b, c, 0);
345 }
346 
test_mm_permute2_ps(__m128 a,__m128 b,__m128i c)347 __m128 test_mm_permute2_ps(__m128 a, __m128 b, __m128i c) {
348   // CHECK-LABEL: test_mm_permute2_ps
349   // CHECK: call <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> %{{.*}}, i8 0)
350   return _mm_permute2_ps(a, b, c, 0);
351 }
352 
test_mm256_permute2_ps(__m256 a,__m256 b,__m256i c)353 __m256 test_mm256_permute2_ps(__m256 a, __m256 b, __m256i c) {
354   // CHECK-LABEL: test_mm256_permute2_ps
355   // CHECK: call <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> %{{.*}}, i8 0)
356   return _mm256_permute2_ps(a, b, c, 0);
357 }
358 
test_mm_frcz_ss(__m128 a)359 __m128 test_mm_frcz_ss(__m128 a) {
360   // CHECK-LABEL: test_mm_frcz_ss
361   // CHECK: call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %{{.*}})
362   return _mm_frcz_ss(a);
363 }
364 
test_mm_frcz_sd(__m128d a)365 __m128d test_mm_frcz_sd(__m128d a) {
366   // CHECK-LABEL: test_mm_frcz_sd
367   // CHECK: call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %{{.*}})
368   return _mm_frcz_sd(a);
369 }
370 
test_mm_frcz_ps(__m128 a)371 __m128 test_mm_frcz_ps(__m128 a) {
372   // CHECK-LABEL: test_mm_frcz_ps
373   // CHECK: call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %{{.*}})
374   return _mm_frcz_ps(a);
375 }
376 
test_mm_frcz_pd(__m128d a)377 __m128d test_mm_frcz_pd(__m128d a) {
378   // CHECK-LABEL: test_mm_frcz_pd
379   // CHECK: call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %{{.*}})
380   return _mm_frcz_pd(a);
381 }
382 
test_mm256_frcz_ps(__m256 a)383 __m256 test_mm256_frcz_ps(__m256 a) {
384   // CHECK-LABEL: test_mm256_frcz_ps
385   // CHECK: call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %{{.*}})
386   return _mm256_frcz_ps(a);
387 }
388 
test_mm256_frcz_pd(__m256d a)389 __m256d test_mm256_frcz_pd(__m256d a) {
390   // CHECK-LABEL: test_mm256_frcz_pd
391   // CHECK: call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %{{.*}})
392   return _mm256_frcz_pd(a);
393 }
394