blob: 1f6edc1025466a98d7cb9a65031259c64bf38579 [file] [log] [blame]
Craig Topper925be542011-12-19 05:04:33 +00001// RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - | FileCheck %s
2
3// Don't include mm_malloc.h, it's system specific.
4#define __MM_MALLOC_H
5
6#include <immintrin.h>
7
Craig Toppercbe627b2011-12-24 03:28:57 +00008__m256i test_mm256_mpsadbw_epu8(__m256i x, __m256i y) {
Craig Topper925be542011-12-19 05:04:33 +00009 // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i32 3)
10 return _mm256_mpsadbw_epu8(x, y, 3);
11}
12
Craig Toppercbe627b2011-12-24 03:28:57 +000013__m256i test_mm256_abs_epi8(__m256i a) {
Craig Topper925be542011-12-19 05:04:33 +000014 // CHECK: @llvm.x86.avx2.pabs.b
15 return _mm256_abs_epi8(a);
16}
17
Craig Toppercbe627b2011-12-24 03:28:57 +000018__m256i test_mm256_abs_epi16(__m256i a) {
Craig Topper925be542011-12-19 05:04:33 +000019 // CHECK: @llvm.x86.avx2.pabs.w
20 return _mm256_abs_epi16(a);
21}
22
Craig Toppercbe627b2011-12-24 03:28:57 +000023__m256i test_mm256_abs_epi32(__m256i a) {
Craig Topper925be542011-12-19 05:04:33 +000024 // CHECK: @llvm.x86.avx2.pabs.d
25 return _mm256_abs_epi32(a);
26}
27
Craig Toppercbe627b2011-12-24 03:28:57 +000028__m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000029 // CHECK: @llvm.x86.avx2.packsswb
30 return _mm256_packs_epi16(a, b);
31}
32
Craig Toppercbe627b2011-12-24 03:28:57 +000033__m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000034 // CHECK: @llvm.x86.avx2.packssdw
35 return _mm256_packs_epi32(a, b);
36}
37
Craig Toppercbe627b2011-12-24 03:28:57 +000038__m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000039 // CHECK: @llvm.x86.avx2.packuswb
40 return _mm256_packus_epi16(a, b);
41}
42
Craig Toppercbe627b2011-12-24 03:28:57 +000043__m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000044 // CHECK: @llvm.x86.avx2.packusdw
45 return _mm256_packus_epi32(a, b);
46}
47
Craig Toppercbe627b2011-12-24 03:28:57 +000048__m256i test_mm256_add_epi8(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000049 // CHECK: add <32 x i8>
50 return _mm256_add_epi8(a, b);
51}
52
Craig Toppercbe627b2011-12-24 03:28:57 +000053__m256i test_mm256_add_epi16(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000054 // CHECK: add <16 x i16>
55 return _mm256_add_epi16(a, b);
56}
57
Craig Toppercbe627b2011-12-24 03:28:57 +000058__m256i test_mm256_add_epi32(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000059 // CHECK: add <8 x i32>
60 return _mm256_add_epi32(a, b);
61}
62
Craig Toppercbe627b2011-12-24 03:28:57 +000063__m256i test_mm256_add_epi64(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000064 // CHECK: add <4 x i64>
65 return _mm256_add_epi64(a, b);
66}
67
Craig Toppercbe627b2011-12-24 03:28:57 +000068__m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +000069 // CHECK: @llvm.x86.avx2.padds.b
70 return _mm256_adds_epi8(a, b);
71}
72
Craig Toppercbe627b2011-12-24 03:28:57 +000073__m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +000074 // CHECK: @llvm.x86.avx2.padds.w
75 return _mm256_adds_epi16(a, b);
76}
77
Craig Toppercbe627b2011-12-24 03:28:57 +000078__m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +000079 // CHECK: @llvm.x86.avx2.paddus.b
80 return _mm256_adds_epu8(a, b);
81}
82
Craig Toppercbe627b2011-12-24 03:28:57 +000083__m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +000084 // CHECK: @llvm.x86.avx2.paddus.w
85 return _mm256_adds_epu16(a, b);
86}
87
Craig Toppercbe627b2011-12-24 03:28:57 +000088__m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
Eli Friedmanaad21d72011-12-19 20:09:01 +000089 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49>
Craig Topper9c2ffd82011-12-19 07:03:25 +000090 return _mm256_alignr_epi8(a, b, 2);
91}
92
Craig Toppercbe627b2011-12-24 03:28:57 +000093__m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +000094 // CHECK: @llvm.x86.avx2.psrl.dq({{.*}}, i32 8)
95 return _mm256_alignr_epi8(a, b, 17);
96}
97
Craig Toppercbe627b2011-12-24 03:28:57 +000098__m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +000099 // CHECK: sub <32 x i8>
100 return _mm256_sub_epi8(a, b);
101}
102
Craig Toppercbe627b2011-12-24 03:28:57 +0000103__m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +0000104 // CHECK: sub <16 x i16>
105 return _mm256_sub_epi16(a, b);
106}
107
Craig Toppercbe627b2011-12-24 03:28:57 +0000108__m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +0000109 // CHECK: sub <8 x i32>
110 return _mm256_sub_epi32(a, b);
111}
112
Craig Toppercbe627b2011-12-24 03:28:57 +0000113__m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
Craig Topper925be542011-12-19 05:04:33 +0000114 // CHECK: sub <4 x i64>
115 return _mm256_sub_epi64(a, b);
116}
Craig Topper9c2ffd82011-12-19 07:03:25 +0000117
Craig Toppercbe627b2011-12-24 03:28:57 +0000118__m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +0000119 // CHECK: @llvm.x86.avx2.psubs.b
120 return _mm256_subs_epi8(a, b);
121}
122
Craig Toppercbe627b2011-12-24 03:28:57 +0000123__m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +0000124 // CHECK: @llvm.x86.avx2.psubs.w
125 return _mm256_subs_epi16(a, b);
126}
127
Craig Toppercbe627b2011-12-24 03:28:57 +0000128__m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +0000129 // CHECK: @llvm.x86.avx2.psubus.b
130 return _mm256_subs_epu8(a, b);
131}
132
Craig Toppercbe627b2011-12-24 03:28:57 +0000133__m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
Craig Topper9c2ffd82011-12-19 07:03:25 +0000134 // CHECK: @llvm.x86.avx2.psubus.w
135 return _mm256_subs_epu16(a, b);
136}
Craig Topper735ceaa2011-12-19 09:03:48 +0000137
Craig Toppercbe627b2011-12-24 03:28:57 +0000138__m256i test_mm256_and_si256(__m256i a, __m256i b) {
Craig Topper735ceaa2011-12-19 09:03:48 +0000139 // CHECK: and <4 x i64>
140 return _mm256_and_si256(a, b);
141}
142
Craig Toppercbe627b2011-12-24 03:28:57 +0000143__m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
Craig Topper735ceaa2011-12-19 09:03:48 +0000144 // CHECK: xor <4 x i64>
145 // CHECK: and <4 x i64>
146 return _mm256_andnot_si256(a, b);
147}
148
Craig Toppercbe627b2011-12-24 03:28:57 +0000149__m256i test_mm256_or_si256(__m256i a, __m256i b) {
Craig Topper735ceaa2011-12-19 09:03:48 +0000150 // CHECK: or <4 x i64>
151 return _mm256_or_si256(a, b);
152}
153
Craig Toppercbe627b2011-12-24 03:28:57 +0000154__m256i test_mm256_xor_si256(__m256i a, __m256i b) {
Craig Topper735ceaa2011-12-19 09:03:48 +0000155 // CHECK: xor <4 x i64>
156 return _mm256_xor_si256(a, b);
157}
Craig Topper4c07c5d2011-12-20 09:55:26 +0000158
Craig Toppercbe627b2011-12-24 03:28:57 +0000159__m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000160 // CHECK: @llvm.x86.avx2.pavg.b
161 return _mm256_avg_epu8(a, b);
162}
163
Craig Toppercbe627b2011-12-24 03:28:57 +0000164__m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000165 // CHECK: @llvm.x86.avx2.pavg.w
166 return _mm256_avg_epu16(a, b);
167}
168
Craig Toppercbe627b2011-12-24 03:28:57 +0000169__m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000170 // CHECK: @llvm.x86.avx2.pblendvb
171 return _mm256_blendv_epi8(a, b, m);
172}
173
Craig Toppercbe627b2011-12-24 03:28:57 +0000174__m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000175 // CHECK: @llvm.x86.avx2.pblendw(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, i32 2)
176 return _mm256_blend_epi16(a, b, 2);
177}
178
Craig Toppercbe627b2011-12-24 03:28:57 +0000179__m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000180 // CHECK: icmp eq <32 x i8>
181 return _mm256_cmpeq_epi8(a, b);
182}
183
Craig Toppercbe627b2011-12-24 03:28:57 +0000184__m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000185 // CHECK: icmp eq <16 x i16>
186 return _mm256_cmpeq_epi16(a, b);
187}
188
Craig Toppercbe627b2011-12-24 03:28:57 +0000189__m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000190 // CHECK: icmp eq <8 x i32>
191 return _mm256_cmpeq_epi32(a, b);
192}
193
Craig Toppercbe627b2011-12-24 03:28:57 +0000194__m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000195 // CHECK: icmp eq <4 x i64>
196 return _mm256_cmpeq_epi64(a, b);
197}
198
Craig Toppercbe627b2011-12-24 03:28:57 +0000199__m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000200 // CHECK: icmp sgt <32 x i8>
201 return _mm256_cmpgt_epi8(a, b);
202}
203
Craig Toppercbe627b2011-12-24 03:28:57 +0000204__m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000205 // CHECK: icmp sgt <16 x i16>
206 return _mm256_cmpgt_epi16(a, b);
207}
208
Craig Toppercbe627b2011-12-24 03:28:57 +0000209__m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000210 // CHECK: icmp sgt <8 x i32>
211 return _mm256_cmpgt_epi32(a, b);
212}
213
Craig Toppercbe627b2011-12-24 03:28:57 +0000214__m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
Craig Topper4c07c5d2011-12-20 09:55:26 +0000215 // CHECK: icmp sgt <4 x i64>
216 return _mm256_cmpgt_epi64(a, b);
217}
Craig Topper318e4602011-12-21 08:17:40 +0000218
Craig Toppercbe627b2011-12-24 03:28:57 +0000219__m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000220 // CHECK: @llvm.x86.avx2.phadd.w
221 return _mm256_hadd_epi16(a, b);
222}
223
Craig Toppercbe627b2011-12-24 03:28:57 +0000224__m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000225 // CHECK: @llvm.x86.avx2.phadd.d
226 return _mm256_hadd_epi32(a, b);
227}
228
Craig Toppercbe627b2011-12-24 03:28:57 +0000229__m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000230 // CHECK: @llvm.x86.avx2.phadd.sw
231 return _mm256_hadds_epi16(a, b);
232}
233
Craig Toppercbe627b2011-12-24 03:28:57 +0000234__m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000235 // CHECK: @llvm.x86.avx2.phsub.w
236 return _mm256_hsub_epi16(a, b);
237}
238
Craig Toppercbe627b2011-12-24 03:28:57 +0000239__m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000240 // CHECK: @llvm.x86.avx2.phsub.d
241 return _mm256_hsub_epi32(a, b);
242}
243
Craig Toppercbe627b2011-12-24 03:28:57 +0000244__m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
Craig Topper318e4602011-12-21 08:17:40 +0000245 // CHECK: @llvm.x86.avx2.phsub.sw
246 return _mm256_hsubs_epi16(a, b);
247}
Craig Topper4a4f25a2011-12-21 08:35:05 +0000248
Craig Toppercbe627b2011-12-24 03:28:57 +0000249__m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
Craig Topper4a4f25a2011-12-21 08:35:05 +0000250 // CHECK: @llvm.x86.avx2.pmadd.ub.sw
251 return _mm256_maddubs_epi16(a, b);
252}
253
Craig Toppercbe627b2011-12-24 03:28:57 +0000254__m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
Craig Topper4a4f25a2011-12-21 08:35:05 +0000255 // CHECK: @llvm.x86.avx2.pmadd.wd
256 return _mm256_madd_epi16(a, b);
257}
Craig Topper231f7932011-12-22 09:18:58 +0000258
Craig Toppercbe627b2011-12-24 03:28:57 +0000259__m256i test_mm256_max_epi8(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000260 // CHECK: @llvm.x86.avx2.pmaxs.b
261 return _mm256_max_epi8(a, b);
262}
263
Craig Toppercbe627b2011-12-24 03:28:57 +0000264__m256i test_mm256_max_epi16(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000265 // CHECK: @llvm.x86.avx2.pmaxs.w
266 return _mm256_max_epi16(a, b);
267}
268
Craig Toppercbe627b2011-12-24 03:28:57 +0000269__m256i test_mm256_max_epi32(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000270 // CHECK: @llvm.x86.avx2.pmaxs.d
271 return _mm256_max_epi32(a, b);
272}
273
Craig Toppercbe627b2011-12-24 03:28:57 +0000274__m256i test_mm256_max_epu8(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000275 // CHECK: @llvm.x86.avx2.pmaxu.b
276 return _mm256_max_epu8(a, b);
277}
278
Craig Toppercbe627b2011-12-24 03:28:57 +0000279__m256i test_mm256_max_epu16(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000280 // CHECK: @llvm.x86.avx2.pmaxu.w
281 return _mm256_max_epu16(a, b);
282}
283
Craig Toppercbe627b2011-12-24 03:28:57 +0000284__m256i test_mm256_max_epu32(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000285 // CHECK: @llvm.x86.avx2.pmaxu.d
286 return _mm256_max_epu32(a, b);
287}
288
Craig Toppercbe627b2011-12-24 03:28:57 +0000289__m256i test_mm256_min_epi8(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000290 // CHECK: @llvm.x86.avx2.pmins.b
291 return _mm256_min_epi8(a, b);
292}
293
Craig Toppercbe627b2011-12-24 03:28:57 +0000294__m256i test_mm256_min_epi16(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000295 // CHECK: @llvm.x86.avx2.pmins.w
296 return _mm256_min_epi16(a, b);
297}
298
Craig Toppercbe627b2011-12-24 03:28:57 +0000299__m256i test_mm256_min_epi32(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000300 // CHECK: @llvm.x86.avx2.pmins.d
301 return _mm256_min_epi32(a, b);
302}
303
Craig Toppercbe627b2011-12-24 03:28:57 +0000304__m256i test_mm256_min_epu8(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000305 // CHECK: @llvm.x86.avx2.pminu.b
306 return _mm256_min_epu8(a, b);
307}
308
Craig Toppercbe627b2011-12-24 03:28:57 +0000309__m256i test_mm256_min_epu16(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000310 // CHECK: @llvm.x86.avx2.pminu.w
311 return _mm256_min_epu16(a, b);
312}
313
Craig Toppercbe627b2011-12-24 03:28:57 +0000314__m256i test_mm256_min_epu32(__m256i a, __m256i b) {
Craig Topper231f7932011-12-22 09:18:58 +0000315 // CHECK: @llvm.x86.avx2.pminu.d
316 return _mm256_min_epu32(a, b);
317}
318
Craig Toppercbe627b2011-12-24 03:28:57 +0000319int test_mm256_movemask_epi8(__m256i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000320 // CHECK: @llvm.x86.avx2.pmovmskb
321 return _mm256_movemask_epi8(a);
322}
323
Craig Toppercbe627b2011-12-24 03:28:57 +0000324__m256i test_mm256_cvtepi8_epi16(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000325 // CHECK: @llvm.x86.avx2.pmovsxbw
326 return _mm256_cvtepi8_epi16(a);
327}
328
Craig Toppercbe627b2011-12-24 03:28:57 +0000329__m256i test_mm256_cvtepi8_epi32(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000330 // CHECK: @llvm.x86.avx2.pmovsxbd
331 return _mm256_cvtepi8_epi32(a);
332}
333
Craig Toppercbe627b2011-12-24 03:28:57 +0000334__m256i test_mm256_cvtepi8_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000335 // CHECK: @llvm.x86.avx2.pmovsxbq
336 return _mm256_cvtepi8_epi64(a);
337}
338
Craig Toppercbe627b2011-12-24 03:28:57 +0000339__m256i test_mm256_cvtepi16_epi32(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000340 // CHECK: @llvm.x86.avx2.pmovsxwd
341 return _mm256_cvtepi16_epi32(a);
342}
343
Craig Toppercbe627b2011-12-24 03:28:57 +0000344__m256i test_mm256_cvtepi16_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000345 // CHECK: @llvm.x86.avx2.pmovsxwq
346 return _mm256_cvtepi16_epi64(a);
347}
348
Craig Toppercbe627b2011-12-24 03:28:57 +0000349__m256i test_mm256_cvtepi32_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000350 // CHECK: @llvm.x86.avx2.pmovsxdq
351 return _mm256_cvtepi32_epi64(a);
352}
353
Craig Toppercbe627b2011-12-24 03:28:57 +0000354__m256i test_mm256_cvtepu8_epi16(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000355 // CHECK: @llvm.x86.avx2.pmovzxbw
356 return _mm256_cvtepu8_epi16(a);
357}
358
Craig Toppercbe627b2011-12-24 03:28:57 +0000359__m256i test_mm256_cvtepu8_epi32(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000360 // CHECK: @llvm.x86.avx2.pmovzxbd
361 return _mm256_cvtepu8_epi32(a);
362}
363
Craig Toppercbe627b2011-12-24 03:28:57 +0000364__m256i test_mm256_cvtepu8_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000365 // CHECK: @llvm.x86.avx2.pmovzxbq
366 return _mm256_cvtepu8_epi64(a);
367}
368
Craig Toppercbe627b2011-12-24 03:28:57 +0000369__m256i test_mm256_cvtepu16_epi32(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000370 // CHECK: @llvm.x86.avx2.pmovzxwd
371 return _mm256_cvtepu16_epi32(a);
372}
373
Craig Toppercbe627b2011-12-24 03:28:57 +0000374__m256i test_mm256_cvtepu16_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000375 // CHECK: @llvm.x86.avx2.pmovzxwq
376 return _mm256_cvtepu16_epi64(a);
377}
378
Craig Toppercbe627b2011-12-24 03:28:57 +0000379__m256i test_mm256_cvtepu32_epi64(__m128i a) {
Craig Topper231f7932011-12-22 09:18:58 +0000380 // CHECK: @llvm.x86.avx2.pmovzxdq
381 return _mm256_cvtepu32_epi64(a);
382}
Craig Topper28a324a2011-12-23 08:31:16 +0000383
Craig Toppercbe627b2011-12-24 03:28:57 +0000384__m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000385 // CHECK: @llvm.x86.avx2.pmul.dq
386 return _mm256_mul_epi32(a, b);
387}
388
Craig Toppercbe627b2011-12-24 03:28:57 +0000389__m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000390 // CHECK: @llvm.x86.avx2.pmul.hr.sw
391 return _mm256_mulhrs_epi16(a, b);
392}
393
Craig Toppercbe627b2011-12-24 03:28:57 +0000394__m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000395 // CHECK: @llvm.x86.avx2.pmulhu.w
396 return _mm256_mulhi_epu16(a, b);
397}
398
Craig Toppercbe627b2011-12-24 03:28:57 +0000399__m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000400 // CHECK: @llvm.x86.avx2.pmulh.w
401 return _mm256_mulhi_epi16(a, b);
402}
403
Craig Toppercbe627b2011-12-24 03:28:57 +0000404__m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000405 // CHECK: mul <16 x i16>
406 return _mm256_mullo_epi16(a, b);
407}
408
Craig Toppercbe627b2011-12-24 03:28:57 +0000409__m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000410 // CHECK: mul <8 x i32>
411 return _mm256_mullo_epi32(a, b);
412}
413
Craig Toppercbe627b2011-12-24 03:28:57 +0000414__m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
Craig Topper28a324a2011-12-23 08:31:16 +0000415 // CHECK: @llvm.x86.avx2.pmulu.dq
416 return _mm256_mul_epu32(a, b);
417}
Craig Toppercbe627b2011-12-24 03:28:57 +0000418
419__m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
420 // CHECK: @llvm.x86.avx2.pshuf.b
421 return _mm256_shuffle_epi8(a, b);
422}
423
424__m256i test_mm256_shuffle_epi32(__m256i a) {
425 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> undef, <8 x i32> <i32 3, i32 3, i32 0, i32 0, i32 7, i32 7, i32 4, i32 4>
426 return _mm256_shuffle_epi32(a, 15);
427}
428
429__m256i test_mm256_shufflehi_epi16(__m256i a) {
430 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 14, i32 14, i32 13>
431 return _mm256_shufflehi_epi16(a, 107);
432}
433
434__m256i test_mm256_shufflelo_epi16(__m256i a) {
435 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> undef, <16 x i32> <i32 3, i32 0, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7, i32 11, i32 8, i32 9, i32 9, i32 12, i32 13, i32 14, i32 15>
436 return _mm256_shufflelo_epi16(a, 83);
437}
438
439__m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
440 // CHECK: @llvm.x86.avx2.psign.b
441 return _mm256_sign_epi8(a, b);
442}
443
444__m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
445 // CHECK: @llvm.x86.avx2.psign.w
446 return _mm256_sign_epi16(a, b);
447}
448
449__m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
450 // CHECK: @llvm.x86.avx2.psign.d
451 return _mm256_sign_epi32(a, b);
452}
453
454__m256i test_mm256_slli_si256(__m256i a) {
455 // CHECK: @llvm.x86.avx2.psll.dq
456 return _mm256_slli_si256(a, 3);
457}
458
459__m256i test_mm256_slli_epi16(__m256i a) {
460 // CHECK: @llvm.x86.avx2.pslli.w
461 return _mm256_slli_epi16(a, 3);
462}
463
464__m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
465 // CHECK: @llvm.x86.avx2.psll.w
466 return _mm256_sll_epi16(a, b);
467}
468
469__m256i test_mm256_slli_epi32(__m256i a) {
470 // CHECK: @llvm.x86.avx2.pslli.d
471 return _mm256_slli_epi32(a, 3);
472}
473
474__m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
475 // CHECK: @llvm.x86.avx2.psll.d
476 return _mm256_sll_epi32(a, b);
477}
478
479__m256i test_mm256_slli_epi64(__m256i a) {
480 // CHECK: @llvm.x86.avx2.pslli.q
481 return _mm256_slli_epi64(a, 3);
482}
483
484__m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
485 // CHECK: @llvm.x86.avx2.psll.q
486 return _mm256_sll_epi64(a, b);
487}
488
489__m256i test_mm256_srai_epi16(__m256i a) {
490 // CHECK: @llvm.x86.avx2.psrai.w
491 return _mm256_srai_epi16(a, 3);
492}
493
494__m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
495 // CHECK: @llvm.x86.avx2.psra.w
496 return _mm256_sra_epi16(a, b);
497}
498
499__m256i test_mm256_srai_epi32(__m256i a) {
500 // CHECK: @llvm.x86.avx2.psrai.d
501 return _mm256_srai_epi32(a, 3);
502}
503
504__m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
505 // CHECK: @llvm.x86.avx2.psra.d
506 return _mm256_sra_epi32(a, b);
507}
508
509__m256i test_mm256_srli_si256(__m256i a) {
510 // CHECK: @llvm.x86.avx2.psrl.dq
511 return _mm256_srli_si256(a, 3);
512}
513
514__m256i test_mm256_srli_epi16(__m256i a) {
515 // CHECK: @llvm.x86.avx2.psrli.w
516 return _mm256_srli_epi16(a, 3);
517}
518
519__m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
520 // CHECK: @llvm.x86.avx2.psrl.w
521 return _mm256_srl_epi16(a, b);
522}
523
524__m256i test_mm256_srli_epi32(__m256i a) {
525 // CHECK: @llvm.x86.avx2.psrli.d
526 return _mm256_srli_epi32(a, 3);
527}
528
529__m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
530 // CHECK: @llvm.x86.avx2.psrl.d
531 return _mm256_srl_epi32(a, b);
532}
533
534__m256i test_mm256_srli_epi64(__m256i a) {
535 // CHECK: @llvm.x86.avx2.psrli.q
536 return _mm256_srli_epi64(a, 3);
537}
538
539__m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
540 // CHECK: @llvm.x86.avx2.psrl.q
541 return _mm256_srl_epi64(a, b);
542}