16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 %s -O0 -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Werror | FileCheck %s
2925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
3925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper// Don't include mm_malloc.h, it's system specific.
4925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#define __MM_MALLOC_H
5925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
6925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#include <immintrin.h>
7925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
8cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mpsadbw_epu8(__m256i x, __m256i y) {
9925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i32 3)
10925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_mpsadbw_epu8(x, y, 3);
11925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
12925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
13c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m256i test_mm256_sad_epu8(__m256i x, __m256i y) {
14c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.psad.bw
15c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm256_sad_epu8(x, y);
16c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
17c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren
18cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_abs_epi8(__m256i a) {
19925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.b
20925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi8(a);
21925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
22925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
23cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_abs_epi16(__m256i a) {
24925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.w
25925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi16(a);
26925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
27925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
28cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_abs_epi32(__m256i a) {
29925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.d
30925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi32(a);
31925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
32925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
33cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
34925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packsswb
35925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packs_epi16(a, b);
36925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
37925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
38cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
39925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packssdw
40925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packs_epi32(a, b);
41925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
42925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
43cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
44925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packuswb
45925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packus_epi16(a, b);
46925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
47925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
48cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
49925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packusdw
50925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packus_epi32(a, b);
51925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
52925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
53cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_add_epi8(__m256i a, __m256i b) {
54925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <32 x i8>
55925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi8(a, b);
56925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
57925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
58cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_add_epi16(__m256i a, __m256i b) {
59925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <16 x i16>
60925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi16(a, b);
61925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
62925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
63cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_add_epi32(__m256i a, __m256i b) {
64925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <8 x i32>
65925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi32(a, b);
66925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
67925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
68cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_add_epi64(__m256i a, __m256i b) {
69925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <4 x i64>
70925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi64(a, b);
71925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
72925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
73cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
749c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.padds.b
759c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epi8(a, b);
769c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
779c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
78cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
799c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.padds.w
809c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epi16(a, b);
819c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
829c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
83cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
849c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.paddus.b
859c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epu8(a, b);
869c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
879c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
88cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
899c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.paddus.w
909c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epu16(a, b);
919c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
929c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
93cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
94aad21d74aaf74bfbd3f8356ab0fea2c1f759efeaEli Friedman  // 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>
959c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_alignr_epi8(a, b, 2);
969c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
979c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
98cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
999c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psrl.dq({{.*}}, i32 8)
1009c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_alignr_epi8(a, b, 17);
1019c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1029c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
103cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
104925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <32 x i8>
105925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi8(a, b);
106925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
107925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
108cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
109925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <16 x i16>
110925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi16(a, b);
111925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
112925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
113cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
114925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <8 x i32>
115925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi32(a, b);
116925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
117925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
118cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
119925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <4 x i64>
120925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi64(a, b);
121925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
1229c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
123cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
1249c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubs.b
1259c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epi8(a, b);
1269c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1279c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
128cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
1299c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubs.w
1309c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epi16(a, b);
1319c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1329c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
133cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
1349c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubus.b
1359c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epu8(a, b);
1369c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1379c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
138cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
1399c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubus.w
1409c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epu16(a, b);
1419c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
142735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
143cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_and_si256(__m256i a, __m256i b) {
144735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: and <4 x i64>
145735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_and_si256(a, b);
146735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
147735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
148cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
149735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: xor <4 x i64>
150735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: and <4 x i64>
151735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_andnot_si256(a, b);
152735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
153735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
154cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_or_si256(__m256i a, __m256i b) {
155735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: or <4 x i64>
156735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_or_si256(a, b);
157735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
158735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
159cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_xor_si256(__m256i a, __m256i b) {
160735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: xor <4 x i64>
161735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_xor_si256(a, b);
162735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
1634c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
164cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
1654c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pavg.b
1664c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_avg_epu8(a, b);
1674c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1684c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
169cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
1704c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pavg.w
1714c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_avg_epu16(a, b);
1724c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1734c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
174cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
1754c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pblendvb
1764c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_blendv_epi8(a, b, m);
1774c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1784c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// FIXME: We should also lower the __builtin_ia32_pblendw128 (and similar)
1806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// functions to this IR. In the future we could delete the corresponding
1816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// intrinsic in LLVM if it's not being used anymore.
182cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
1836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: test_mm256_blend_epi16
1846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-NOT: @llvm.x86.avx2.pblendw
1856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 17, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 25, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1864c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_blend_epi16(a, b, 2);
1874c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1884c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
189cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
1904c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <32 x i8>
1914c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi8(a, b);
1924c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1934c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
194cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
1954c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <16 x i16>
1964c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi16(a, b);
1974c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1984c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
199cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
2004c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <8 x i32>
2014c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi32(a, b);
2024c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2034c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
204cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
2054c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <4 x i64>
2064c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi64(a, b);
2074c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2084c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
209cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
2104c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <32 x i8>
2114c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi8(a, b);
2124c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2134c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
214cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
2154c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <16 x i16>
2164c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi16(a, b);
2174c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2184c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
219cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
2204c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <8 x i32>
2214c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi32(a, b);
2224c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2234c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
224cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
2254c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <4 x i64>
2264c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi64(a, b);
2274c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
228318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
229cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
230318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.w
231318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadd_epi16(a, b);
232318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
233318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
234cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
235318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.d
236318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadd_epi32(a, b);
237318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
238318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
239cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
240318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.sw
241318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadds_epi16(a, b);
242318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
243318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
244cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
245318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.w
246318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsub_epi16(a, b);
247318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
248318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
249cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
250318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.d
251318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsub_epi32(a, b);
252318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
253318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
254cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
255318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.sw
256318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsubs_epi16(a, b);
257318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
2584a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
259cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
2604a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  // CHECK: @llvm.x86.avx2.pmadd.ub.sw
2614a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  return _mm256_maddubs_epi16(a, b);
2624a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
2634a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
264cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
2654a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  // CHECK: @llvm.x86.avx2.pmadd.wd
2664a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  return _mm256_madd_epi16(a, b);
2674a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
268231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
269cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epi8(__m256i a, __m256i b) {
270231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.b
271231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi8(a, b);
272231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
273231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
274cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epi16(__m256i a, __m256i b) {
275231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.w
276231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi16(a, b);
277231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
278231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
279cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epi32(__m256i a, __m256i b) {
280231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.d
281231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi32(a, b);
282231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
283231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
284cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epu8(__m256i a, __m256i b) {
285231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.b
286231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu8(a, b);
287231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
288231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
289cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epu16(__m256i a, __m256i b) {
290231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.w
291231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu16(a, b);
292231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
293231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
294cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_max_epu32(__m256i a, __m256i b) {
295231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.d
296231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu32(a, b);
297231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
298231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
299cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epi8(__m256i a, __m256i b) {
300231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.b
301231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi8(a, b);
302231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
303231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
304cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epi16(__m256i a, __m256i b) {
305231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.w
306231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi16(a, b);
307231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
308231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
309cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epi32(__m256i a, __m256i b) {
310231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.d
311231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi32(a, b);
312231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
313231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
314cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epu8(__m256i a, __m256i b) {
315231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.b
316231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu8(a, b);
317231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
318231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
319cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epu16(__m256i a, __m256i b) {
320231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.w
321231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu16(a, b);
322231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
323231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
324cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_min_epu32(__m256i a, __m256i b) {
325231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.d
326231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu32(a, b);
327231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
328231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
329cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topperint test_mm256_movemask_epi8(__m256i a) {
330231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovmskb
331231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_movemask_epi8(a);
332231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
333231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
334cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi8_epi16(__m128i a) {
335231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbw
336231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi16(a);
337231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
338231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
339cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi8_epi32(__m128i a) {
340231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbd
341231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi32(a);
342231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
343231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
344cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi8_epi64(__m128i a) {
345231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbq
346231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi64(a);
347231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
348231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
349cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi16_epi32(__m128i a) {
350231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxwd
351231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi16_epi32(a);
352231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
353231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
354cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi16_epi64(__m128i a) {
355231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxwq
356231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi16_epi64(a);
357231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
358231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
359cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepi32_epi64(__m128i a) {
360231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxdq
361231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi32_epi64(a);
362231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
363231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
364cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu8_epi16(__m128i a) {
365231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbw
366231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi16(a);
367231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
368231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
369cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu8_epi32(__m128i a) {
370231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbd
371231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi32(a);
372231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
373231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
374cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu8_epi64(__m128i a) {
375231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbq
376231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi64(a);
377231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
378231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
379cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu16_epi32(__m128i a) {
380231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxwd
381231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu16_epi32(a);
382231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
383231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
384cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu16_epi64(__m128i a) {
385231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxwq
386231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu16_epi64(a);
387231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
388231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
389cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_cvtepu32_epi64(__m128i a) {
390231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxdq
391231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu32_epi64(a);
392231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
39328a324a30b0677309a4c5d73ef5197398265e129Craig Topper
394cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
39528a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: @llvm.x86.avx2.pmul.dq
39628a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mul_epi32(a, b);
39728a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
39828a324a30b0677309a4c5d73ef5197398265e129Craig Topper
399cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
40028a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: @llvm.x86.avx2.pmul.hr.sw
40128a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mulhrs_epi16(a, b);
40228a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
40328a324a30b0677309a4c5d73ef5197398265e129Craig Topper
404cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
40528a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: @llvm.x86.avx2.pmulhu.w
40628a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mulhi_epu16(a, b);
40728a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
40828a324a30b0677309a4c5d73ef5197398265e129Craig Topper
409cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
41028a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: @llvm.x86.avx2.pmulh.w
41128a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mulhi_epi16(a, b);
41228a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
41328a324a30b0677309a4c5d73ef5197398265e129Craig Topper
414cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
41528a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: mul <16 x i16>
41628a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mullo_epi16(a, b);
41728a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
41828a324a30b0677309a4c5d73ef5197398265e129Craig Topper
419cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
42028a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: mul <8 x i32>
42128a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mullo_epi32(a, b);
42228a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
42328a324a30b0677309a4c5d73ef5197398265e129Craig Topper
424cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
42528a324a30b0677309a4c5d73ef5197398265e129Craig Topper  // CHECK: @llvm.x86.avx2.pmulu.dq
42628a324a30b0677309a4c5d73ef5197398265e129Craig Topper  return _mm256_mul_epu32(a, b);
42728a324a30b0677309a4c5d73ef5197398265e129Craig Topper}
428cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
429cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
430cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.pshuf.b
431cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_shuffle_epi8(a, b);
432cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
433cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
434cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_shuffle_epi32(__m256i a) {
4356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 3, i32 3, i32 0, i32 0, i32 7, i32 7, i32 4, i32 4>
436cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_shuffle_epi32(a, 15);
437cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
438cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
439cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_shufflehi_epi16(__m256i a) {
4406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <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>
441cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_shufflehi_epi16(a, 107);
442cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
443cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
444cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_shufflelo_epi16(__m256i a) {
4456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <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>
446cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_shufflelo_epi16(a, 83);
447cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
448cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
449cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
450cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psign.b
451cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sign_epi8(a, b);
452cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
453cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
454cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
455cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psign.w
456cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sign_epi16(a, b);
457cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
458cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
459cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
460cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psign.d
461cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sign_epi32(a, b);
462cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
463cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
464cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_slli_si256(__m256i a) {
465cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psll.dq
466cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_slli_si256(a, 3);
467cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
468cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
469cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_slli_epi16(__m256i a) {
470cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.pslli.w
471cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_slli_epi16(a, 3);
472cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
473cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
474cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
475cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psll.w
476cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sll_epi16(a, b);
477cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
478cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
479cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_slli_epi32(__m256i a) {
480cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.pslli.d
481cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_slli_epi32(a, 3);
482cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
483cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
484cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
485cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psll.d
486cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sll_epi32(a, b);
487cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
488cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
489cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_slli_epi64(__m256i a) {
490cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.pslli.q
491cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_slli_epi64(a, 3);
492cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
493cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
494cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
495cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psll.q
496cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sll_epi64(a, b);
497cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
498cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
499cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srai_epi16(__m256i a) {
500cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrai.w
501cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srai_epi16(a, 3);
502cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
503cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
504cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
505cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psra.w
506cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sra_epi16(a, b);
507cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
508cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
509cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srai_epi32(__m256i a) {
510cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrai.d
511cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srai_epi32(a, 3);
512cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
513cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
514cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
515cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psra.d
516cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_sra_epi32(a, b);
517cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
518cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
519cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srli_si256(__m256i a) {
520cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrl.dq
521cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srli_si256(a, 3);
522cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
523cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
524cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srli_epi16(__m256i a) {
525cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrli.w
526cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srli_epi16(a, 3);
527cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
528cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
529cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
530cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrl.w
531cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srl_epi16(a, b);
532cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
533cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
534cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srli_epi32(__m256i a) {
535cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrli.d
536cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srli_epi32(a, 3);
537cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
538cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
539cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
540cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrl.d
541cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srl_epi32(a, b);
542cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
543cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
544cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srli_epi64(__m256i a) {
545cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrli.q
546cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srli_epi64(a, 3);
547cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
548cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper
549cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper__m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
550cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  // CHECK: @llvm.x86.avx2.psrl.q
551cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper  return _mm256_srl_epi64(a, b);
552cbe627b54eaeeeac7a28725de6c9b60b4d3ab32dCraig Topper}
5537f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5547f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) {
5557f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
5567f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpackhi_epi8(a, b);
5577f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5587f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5597f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) {
5607f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
5617f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpackhi_epi16(a, b);
5627f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5637f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5647f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) {
5657f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
5667f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpackhi_epi32(a, b);
5677f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5687f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5697f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) {
5707f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
5717f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpackhi_epi64(a, b);
5727f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5737f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5747f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) {
5757f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>
5767f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpacklo_epi8(a, b);
5777f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5787f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5797f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) {
5807f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>
5817f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpacklo_epi16(a, b);
5827f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5837f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5847f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) {
5857f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
5867f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpacklo_epi32(a, b);
5877f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
5887f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper
5897f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper__m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) {
5907f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
5917f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper  return _mm256_unpacklo_epi64(a, b);
5927f16caa3c087dbc51585ec4bb6e154c10516944dCraig Topper}
593967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
594967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m256i test_mm256_stream_load_si256(__m256i *a) {
595967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  // CHECK: @llvm.x86.avx2.movntdqa
596967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  return _mm256_stream_load_si256(a);
597967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
598967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
599967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m128 test_mm_broadcastss_ps(__m128 a) {
600967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps
601967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  return _mm_broadcastss_ps(a);
602967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
603967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
604967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m256 test_mm256_broadcastss_ps(__m128 a) {
605967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps.256
606967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  return _mm256_broadcastss_ps(a);
607967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
608967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
609967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m256d test_mm256_broadcastsd_pd(__m128d a) {
6107bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // check: @llvm.x86.avx2.vbroadcast.sd.pd.256
611967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  return _mm256_broadcastsd_pd(a);
612967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
613967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
6142766deb114cc5d3420027764438cf683dda8a9f0Juergen Ributzka__m256i test_mm256_broadcastsi128_si256(__m128i a) {
615967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper  // CHECK: @llvm.x86.avx2.vbroadcasti128
6162766deb114cc5d3420027764438cf683dda8a9f0Juergen Ributzka  return _mm256_broadcastsi128_si256(a);
617967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
618967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
619967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m128i test_mm_blend_epi32(__m128i a, __m128i b) {
6206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: test_mm_blend_epi32
6216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-NOT: @llvm.x86.avx2.pblendd.128
6226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
6236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return _mm_blend_epi32(a, b, 0x35);
624967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
625967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper
626967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper__m256i test_mm256_blend_epi32(__m256i a, __m256i b) {
6276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: test_mm256_blend_epi32
6286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-NOT: @llvm.x86.avx2.pblendd.256
6296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 13, i32 6, i32 7>
6306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return _mm256_blend_epi32(a, b, 0x35);
631967cd889e59ff73a53b71463d33df7bdfc4b8567Craig Topper}
6327bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6337bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_broadcastb_epi8(__m128i a) {
6347bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastb.256
6357bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_broadcastb_epi8(a);
6367bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6377bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6387bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_broadcastw_epi16(__m128i a) {
6397bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastw.256
6407bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_broadcastw_epi16(a);
6417bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6427bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6437bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_broadcastd_epi32(__m128i a) {
6447bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastd.256
6457bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_broadcastd_epi32(a);
6467bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6477bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6487bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_broadcastq_epi64(__m128i a) {
6497bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastq.256
6507bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_broadcastq_epi64(a);
6517bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6527bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6537bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m128i test_mm_broadcastb_epi8(__m128i a) {
6547bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastb.128
6557bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm_broadcastb_epi8(a);
6567bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6577bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6587bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m128i test_mm_broadcastw_epi16(__m128i a) {
6597bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastw.128
6607bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm_broadcastw_epi16(a);
6617bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6627bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6637bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m128i test_mm_broadcastd_epi32(__m128i a) {
6647bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastd.128
6657bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm_broadcastd_epi32(a);
6667bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6677bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6687bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m128i test_mm_broadcastq_epi64(__m128i a) {
6697bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.pbroadcastq.128
6707bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm_broadcastq_epi64(a);
6717bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6727bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6737bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) {
6747bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.permd
6757bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_permutevar8x32_epi32(a, b);
6767bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6777bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6787bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256d test_mm256_permute4x64_pd(__m256d a) {
679b5491f3d7b688b37745397fafd6c1f10548fd5c2Craig Topper  // CHECK: shufflevector{{.*}}<i32 1, i32 2, i32 1, i32 0>
6807bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_permute4x64_pd(a, 25);
6817bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6827bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6837bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256 test_mm256_permutevar8x32_ps(__m256 a, __m256 b) {
6847bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  // CHECK: @llvm.x86.avx2.permps
6857bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_permutevar8x32_ps(a, b);
6867bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6877bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6887bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_permute4x64_epi64(__m256i a) {
689b5491f3d7b688b37745397fafd6c1f10548fd5c2Craig Topper  // CHECK: shufflevector{{.*}}<i32 3, i32 0, i32 2, i32 0>
6907bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper  return _mm256_permute4x64_epi64(a, 35);
6917bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6927bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper
6937bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper__m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) {
69449a110db4c43835681bb89671f8f73c8d8c7c28cCraig Topper  // CHECK: @llvm.x86.avx2.vperm2i128
695cfa8e6530dbc5ed6147281be78bc319dea928d76Craig Topper  return _mm256_permute2x128_si256(a, b, 0x31);
6967bb034065ec8bf54f54e4a87e77cbfae704ea419Craig Topper}
6975cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
6985cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm256_extracti128_si256(__m256i a) {
6995cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.vextracti128
7005cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_extracti128_si256(a, 1);
7015cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7025cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7035cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_inserti128_si256(__m256i a, __m128i b) {
7045cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.vinserti128
7055cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_inserti128_si256(a, b, 1);
7065cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7075cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7085cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_maskload_epi32(int const *a, __m256i m) {
7095cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskload.d.256
7105cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_maskload_epi32(a, m);
7115cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7125cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7135cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_maskload_epi64(long long const *a, __m256i m) {
7145cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskload.q.256
7155cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_maskload_epi64(a, m);
7165cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7175cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7185cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_maskload_epi32(int const *a, __m128i m) {
7195cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskload.d
7205cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_maskload_epi32(a, m);
7215cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7225cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7235cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_maskload_epi64(long long const *a, __m128i m) {
7245cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskload.q
7255cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_maskload_epi64(a, m);
7265cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7275cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7285cbd751a2f9d73248c5336140d73680fcd4669a3Craig Toppervoid test_mm256_maskstore_epi32(int *a, __m256i m, __m256i b) {
7295cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskstore.d.256
7305cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  _mm256_maskstore_epi32(a, m, b);
7315cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7325cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7335cbd751a2f9d73248c5336140d73680fcd4669a3Craig Toppervoid test_mm256_maskstore_epi64(long long *a, __m256i m, __m256i b) {
7345cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskstore.q.256
7355cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  _mm256_maskstore_epi64(a, m, b);
7365cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7375cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7385cbd751a2f9d73248c5336140d73680fcd4669a3Craig Toppervoid test_mm_maskstore_epi32(int *a, __m128i m, __m128i b) {
7395cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskstore.d
7405cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  _mm_maskstore_epi32(a, m, b);
7415cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7425cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7435cbd751a2f9d73248c5336140d73680fcd4669a3Craig Toppervoid test_mm_maskstore_epi64(long long *a, __m128i m, __m128i b) {
7445cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.maskstore.q
7455cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  _mm_maskstore_epi64(a, m, b);
7465cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7475cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7485cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_sllv_epi32(__m256i a, __m256i b) {
7495cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psllv.d.256
7505cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_sllv_epi32(a, b);
7515cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7525cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7535cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_sllv_epi32(__m128i a, __m128i b) {
7545cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psllv.d
7555cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_sllv_epi32(a, b);
7565cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7575cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7585cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_sllv_epi64(__m256i a, __m256i b) {
7595cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psllv.q.256
7605cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_sllv_epi64(a, b);
7615cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7625cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7635cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_sllv_epi64(__m128i a, __m128i b) {
7645cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psllv.q
7655cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_sllv_epi64(a, b);
7665cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7675cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7685cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_srav_epi32(__m256i a, __m256i b) {
7695cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrav.d.256
7705cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_srav_epi32(a, b);
7715cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7725cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7735cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_srav_epi32(__m128i a, __m128i b) {
7745cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrav.d
7755cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_srav_epi32(a, b);
7765cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7775cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7785cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_srlv_epi32(__m256i a, __m256i b) {
7795cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrlv.d.256
7805cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_srlv_epi32(a, b);
7815cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7825cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7835cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_srlv_epi32(__m128i a, __m128i b) {
7845cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrlv.d
7855cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_srlv_epi32(a, b);
7865cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7875cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7885cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m256i test_mm256_srlv_epi64(__m256i a, __m256i b) {
7895cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrlv.q.256
7905cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm256_srlv_epi64(a, b);
7915cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7925cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper
7935cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper__m128i test_mm_srlv_epi64(__m128i a, __m128i b) {
7945cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  // CHECK: @llvm.x86.avx2.psrlv.q
7955cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper  return _mm_srlv_epi64(a, b);
7965cbd751a2f9d73248c5336140d73680fcd4669a3Craig Topper}
7975283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren
7985283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m128d test_mm_mask_i32gather_pd(__m128d a, double const *b, __m128i c,
7995283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                  __m128d d) {
8005283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.pd
8015283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm_mask_i32gather_pd(a, b, c, d, 2);
8025283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8035283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren
804c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m256d test_mm256_mask_i32gather_pd(__m256d a, double const *b, __m128i c,
8055283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                      __m256d d) {
8065283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.pd.256
8075283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm256_mask_i32gather_pd(a, b, c, d, 2);
8085283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8095283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m128d test_mm_mask_i64gather_pd(__m128d a, double const *b, __m128i c,
8105283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                  __m128d d) {
8115283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.pd
8125283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm_mask_i64gather_pd(a, b, c, d, 2);
8135283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8145283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m256d test_mm256_mask_i64gather_pd(__m256d a, double const *b, __m256i c,
8155283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                      __m256d d) {
8165283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.pd.256
8175283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm256_mask_i64gather_pd(a, b, c, d, 2);
8185283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8195283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren
8205283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m128 test_mm_mask_i32gather_ps(__m128 a, float const *b, __m128i c,
8215283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                 __m128 d) {
8225283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.ps
8235283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm_mask_i32gather_ps(a, b, c, d, 2);
8245283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8255283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m256 test_mm256_mask_i32gather_ps(__m256 a, float const *b, __m256i c,
8265283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                     __m256 d) {
8275283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.ps.256
8285283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm256_mask_i32gather_ps(a, b, c, d, 2);
8295283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
8305283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren__m128 test_mm_mask_i64gather_ps(__m128 a, float const *b, __m128i c,
8315283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren                                 __m128 d) {
8325283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.ps
8335283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm_mask_i64gather_ps(a, b, c, d, 2);
8345283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
835c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m128 test_mm256_mask_i64gather_ps(__m128 a, float const *b, __m256i c,
836c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                    __m128 d) {
8375283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.ps.256
8385283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren  return _mm256_mask_i64gather_ps(a, b, c, d, 2);
8395283c99365ec4697a5a6bb2b2505469a9aa474d5Manman Ren}
840c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren
841c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m128i test_mm_mask_i32gather_epi32(__m128i a, int const *b, __m128i c,
842c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                     __m128i d) {
843c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.d
844c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm_mask_i32gather_epi32(a, b, c, d, 2);
845c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
846c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m256i test_mm256_mask_i32gather_epi32(__m256i a, int const *b, __m256i c,
847c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                        __m256i d) {
848c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.d.256
849c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm256_mask_i32gather_epi32(a, b, c, d, 2);
850c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
851c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m128i test_mm_mask_i64gather_epi32(__m128i a, int const *b, __m128i c,
852c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                     __m128i d) {
853c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.d
854c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm_mask_i64gather_epi32(a, b, c, d, 2);
855c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
856c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren__m128i test_mm256_mask_i64gather_epi32(__m128i a, int const *b, __m256i c,
857c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                        __m128i d) {
858c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.d.256
859c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm256_mask_i64gather_epi32(a, b, c, d, 2);
860c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
861c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren
8629b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m128i test_mm_mask_i32gather_epi64(__m128i a, long long const *b, __m128i c,
863c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                     __m128i d) {
864c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.q
865c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm_mask_i32gather_epi64(a, b, c, d, 2);
866c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
8679b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m256i test_mm256_mask_i32gather_epi64(__m256i a, long long const *b, __m128i c,
868c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                        __m256i d) {
869c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.d.q.256
870c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm256_mask_i32gather_epi64(a, b, c, d, 2);
871c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
8729b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m128i test_mm_mask_i64gather_epi64(__m128i a, long long const *b, __m128i c,
873c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                     __m128i d) {
874c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.q
875c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm_mask_i64gather_epi64(a, b, c, d, 2);
876c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
8779b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m256i test_mm256_mask_i64gather_epi64(__m256i a, long long const *b, __m256i c,
878c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren                                        __m256i d) {
879c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  // CHECK: @llvm.x86.avx2.gather.q.q.256
880c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren  return _mm256_mask_i64gather_epi64(a, b, c, d, 2);
881c84804a7409927813430f5bb1b56bb7b8afbcee8Manman Ren}
88256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren
88356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128d test_mm_i32gather_pd(double const *b, __m128i c) {
88456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.pd
88556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i32gather_pd(b, c, 2);
88656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
88756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m256d test_mm256_i32gather_pd(double const *b, __m128i c) {
88856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.pd.256
88956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i32gather_pd(b, c, 2);
89056c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
89156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128d test_mm_i64gather_pd(double const *b, __m128i c) {
89256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.pd
89356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i64gather_pd(b, c, 2);
89456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
89556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m256d test_mm256_i64gather_pd(double const *b, __m256i c) {
89656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.pd.256
89756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i64gather_pd(b, c, 2);
89856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
89956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128 test_mm_i32gather_ps(float const *b, __m128i c) {
90056c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.ps
90156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i32gather_ps(b, c, 2);
90256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
90356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m256 test_mm256_i32gather_ps(float const *b, __m256i c) {
90456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.ps.256
90556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i32gather_ps(b, c, 2);
90656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
90756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128 test_mm_i64gather_ps(float const *b, __m128i c) {
90856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.ps
90956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i64gather_ps(b, c, 2);
91056c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
91156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128 test_mm256_i64gather_ps(float const *b, __m256i c) {
91256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.ps.256
91356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i64gather_ps(b, c, 2);
91456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
91556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren
91656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128i test_mm_i32gather_epi32(int const *b, __m128i c) {
91756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.d
91856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i32gather_epi32(b, c, 2);
91956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
92056c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m256i test_mm256_i32gather_epi32(int const *b, __m256i c) {
92156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.d.256
92256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i32gather_epi32(b, c, 2);
92356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
92456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128i test_mm_i64gather_epi32(int const *b, __m128i c) {
92556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.d
92656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i64gather_epi32(b, c, 2);
92756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
92856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren__m128i test_mm256_i64gather_epi32(int const *b, __m256i c) {
92956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.d.256
93056c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i64gather_epi32(b, c, 2);
93156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
9329b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m128i test_mm_i32gather_epi64(long long const *b, __m128i c) {
93356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.q
93456c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i32gather_epi64(b, c, 2);
93556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
9369b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m256i test_mm256_i32gather_epi64(long long const *b, __m128i c) {
93756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.d.q.256
93856c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i32gather_epi64(b, c, 2);
93956c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
9409b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m128i test_mm_i64gather_epi64(long long const *b, __m128i c) {
94156c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.q
94256c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm_i64gather_epi64(b, c, 2);
94356c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
9449b2caf7e4a8fe26bf1abd0bf1bf223209be13c2fEli Friedman__m256i test_mm256_i64gather_epi64(long long const *b, __m256i c) {
94556c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  // CHECK: @llvm.x86.avx2.gather.q.q.256
94656c045ed5e148d3eff9b344001370b80ec14d43bManman Ren  return _mm256_i64gather_epi64(b, c, 2);
94756c045ed5e148d3eff9b344001370b80ec14d43bManman Ren}
948