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