avx2-builtins.c revision 231f793326e3a3ad6e07949adb776f45c07f0f7b
1925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper// RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - | 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
8925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_mpsadbw_epu8(__m256 x, __m256 y) {
9925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i32 3)
10925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_mpsadbw_epu8(x, y, 3);
11925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
12925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
13925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_abs_epi8(__m256 a) {
14925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.b
15925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi8(a);
16925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
17925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
18925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_abs_epi16(__m256 a) {
19925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.w
20925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi16(a);
21925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
22925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
23925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_abs_epi32(__m256 a) {
24925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.pabs.d
25925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_abs_epi32(a);
26925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
27925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
28925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_packs_epi16(__m256 a, __m256 b) {
29925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packsswb
30925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packs_epi16(a, b);
31925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
32925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
33925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_packs_epi32(__m256 a, __m256 b) {
34925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packssdw
35925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packs_epi32(a, b);
36925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
37925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
38925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_packs_epu16(__m256 a, __m256 b) {
39925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packuswb
40925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packus_epi16(a, b);
41925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
42925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
43925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_packs_epu32(__m256 a, __m256 b) {
44925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: @llvm.x86.avx2.packusdw
45925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_packus_epi32(a, b);
46925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
47925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
48925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_add_epi8(__m256 a, __m256 b) {
49925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <32 x i8>
50925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi8(a, b);
51925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
52925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
53925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_add_epi16(__m256 a, __m256 b) {
54925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <16 x i16>
55925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi16(a, b);
56925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
57925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
58925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_add_epi32(__m256 a, __m256 b) {
59925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <8 x i32>
60925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi32(a, b);
61925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
62925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
63925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_add_epi64(__m256 a, __m256 b) {
64925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: add <4 x i64>
65925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_add_epi64(a, b);
66925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
67925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
689c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_adds_epi8(__m256 a, __m256 b) {
699c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.padds.b
709c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epi8(a, b);
719c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
729c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
739c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_adds_epi16(__m256 a, __m256 b) {
749c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.padds.w
759c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epi16(a, b);
769c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
779c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
789c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_adds_epu8(__m256 a, __m256 b) {
799c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.paddus.b
809c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epu8(a, b);
819c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
829c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
839c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_adds_epu16(__m256 a, __m256 b) {
849c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.paddus.w
859c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_adds_epu16(a, b);
869c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
879c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
889c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_alignr_epi8(__m256 a, __m256 b) {
89aad21d74aaf74bfbd3f8356ab0fea2c1f759efeaEli 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>
909c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_alignr_epi8(a, b, 2);
919c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
929c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
939c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test2_mm256_alignr_epi8(__m256 a, __m256 b) {
949c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psrl.dq({{.*}}, i32 8)
959c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_alignr_epi8(a, b, 17);
969c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
979c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
98925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi8(__m256 a, __m256 b) {
99925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <32 x i8>
100925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi8(a, b);
101925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
102925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
103925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi16(__m256 a, __m256 b) {
104925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <16 x i16>
105925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi16(a, b);
106925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
107925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
108925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi32(__m256 a, __m256 b) {
109925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <8 x i32>
110925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi32(a, b);
111925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
112925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
113925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi64(__m256 a, __m256 b) {
114925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <4 x i64>
115925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi64(a, b);
116925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
1179c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1189c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_subs_epi8(__m256 a, __m256 b) {
1199c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubs.b
1209c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epi8(a, b);
1219c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1229c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1239c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_subs_epi16(__m256 a, __m256 b) {
1249c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubs.w
1259c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epi16(a, b);
1269c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1279c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1289c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_subs_epu8(__m256 a, __m256 b) {
1299c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubus.b
1309c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epu8(a, b);
1319c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1329c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1339c2ffd803af03f1728423d0d73ff87d988642633Craig Topper__m256 test_mm256_subs_epu16(__m256 a, __m256 b) {
1349c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: @llvm.x86.avx2.psubus.w
1359c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return _mm256_subs_epu16(a, b);
1369c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
137735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
138735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper__m256 test_mm256_and_si256(__m256 a, __m256 b) {
139735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: and <4 x i64>
140735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_and_si256(a, b);
141735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
142735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
143735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper__m256 test_mm256_andnot_si256(__m256 a, __m256 b) {
144735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: xor <4 x i64>
145735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: and <4 x i64>
146735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_andnot_si256(a, b);
147735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
148735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
149735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper__m256 test_mm256_or_si256(__m256 a, __m256 b) {
150735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: or <4 x i64>
151735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_or_si256(a, b);
152735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
153735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
154735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper__m256 test_mm256_xor_si256(__m256 a, __m256 b) {
155735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  // CHECK: xor <4 x i64>
156735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return _mm256_xor_si256(a, b);
157735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
1584c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1594c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_avg_epu8(__m256 a, __m256 b) {
1604c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pavg.b
1614c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_avg_epu8(a, b);
1624c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1634c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1644c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_avg_epu16(__m256 a, __m256 b) {
1654c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pavg.w
1664c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_avg_epu16(a, b);
1674c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1684c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1694c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_blendv_epi8(__m256 a, __m256 b, __m256 m) {
1704c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pblendvb
1714c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_blendv_epi8(a, b, m);
1724c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1734c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1744c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_blend_epi16(__m256 a, __m256 b) {
1754c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: @llvm.x86.avx2.pblendw(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, i32 2)
1764c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_blend_epi16(a, b, 2);
1774c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1784c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1794c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpeq_epi8(__m256 a, __m256 b) {
1804c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <32 x i8>
1814c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi8(a, b);
1824c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1834c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1844c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpeq_epi16(__m256 a, __m256 b) {
1854c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <16 x i16>
1864c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi16(a, b);
1874c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1884c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1894c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpeq_epi32(__m256 a, __m256 b) {
1904c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <8 x i32>
1914c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi32(a, b);
1924c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1934c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1944c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpeq_epi64(__m256 a, __m256 b) {
1954c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp eq <4 x i64>
1964c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpeq_epi64(a, b);
1974c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1984c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1994c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpgt_epi8(__m256 a, __m256 b) {
2004c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <32 x i8>
2014c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi8(a, b);
2024c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2034c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
2044c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpgt_epi16(__m256 a, __m256 b) {
2054c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <16 x i16>
2064c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi16(a, b);
2074c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2084c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
2094c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpgt_epi32(__m256 a, __m256 b) {
2104c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <8 x i32>
2114c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi32(a, b);
2124c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2134c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
2144c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper__m256 test_mm256_cmpgt_epi64(__m256 a, __m256 b) {
2154c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  // CHECK: icmp sgt <4 x i64>
2164c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return _mm256_cmpgt_epi64(a, b);
2174c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
218318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
219318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hadd_epi16(__m256 a, __m256 b) {
220318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.w
221318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadd_epi16(a, b);
222318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
223318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
224318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hadd_epi32(__m256 a, __m256 b) {
225318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.d
226318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadd_epi32(a, b);
227318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
228318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
229318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hadds_epi16(__m256 a, __m256 b) {
230318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phadd.sw
231318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hadds_epi16(a, b);
232318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
233318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
234318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hsub_epi16(__m256 a, __m256 b) {
235318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.w
236318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsub_epi16(a, b);
237318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
238318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
239318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hsub_epi32(__m256 a, __m256 b) {
240318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.d
241318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsub_epi32(a, b);
242318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
243318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
244318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper__m256 test_mm256_hsubs_epi16(__m256 a, __m256 b) {
245318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  // CHECK: @llvm.x86.avx2.phsub.sw
246318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper  return _mm256_hsubs_epi16(a, b);
247318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
2484a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
2494a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper__m256 test_mm256_maddubs_epi16(__m256 a, __m256 b) {
2504a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  // CHECK: @llvm.x86.avx2.pmadd.ub.sw
2514a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  return _mm256_maddubs_epi16(a, b);
2524a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
2534a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
2544a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper__m256 test_mm256_madd_epi16(__m256 a, __m256 b) {
2554a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  // CHECK: @llvm.x86.avx2.pmadd.wd
2564a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  return _mm256_madd_epi16(a, b);
2574a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
258231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
259231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epi8(__m256 a, __m256 b) {
260231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.b
261231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi8(a, b);
262231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
263231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
264231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epi16(__m256 a, __m256 b) {
265231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.w
266231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi16(a, b);
267231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
268231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
269231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epi32(__m256 a, __m256 b) {
270231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxs.d
271231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epi32(a, b);
272231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
273231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
274231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epu8(__m256 a, __m256 b) {
275231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.b
276231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu8(a, b);
277231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
278231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
279231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epu16(__m256 a, __m256 b) {
280231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.w
281231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu16(a, b);
282231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
283231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
284231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_max_epu32(__m256 a, __m256 b) {
285231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmaxu.d
286231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_max_epu32(a, b);
287231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
288231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
289231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epi8(__m256 a, __m256 b) {
290231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.b
291231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi8(a, b);
292231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
293231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
294231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epi16(__m256 a, __m256 b) {
295231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.w
296231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi16(a, b);
297231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
298231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
299231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epi32(__m256 a, __m256 b) {
300231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmins.d
301231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epi32(a, b);
302231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
303231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
304231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epu8(__m256 a, __m256 b) {
305231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.b
306231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu8(a, b);
307231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
308231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
309231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epu16(__m256 a, __m256 b) {
310231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.w
311231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu16(a, b);
312231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
313231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
314231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_min_epu32(__m256 a, __m256 b) {
315231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pminu.d
316231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_min_epu32(a, b);
317231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
318231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
319231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperint test_mm256_movemask_epi8(__m256 a) {
320231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovmskb
321231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_movemask_epi8(a);
322231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
323231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
324231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi8_epi16(__m128 a) {
325231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbw
326231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi16(a);
327231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
328231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
329231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi8_epi32(__m128 a) {
330231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbd
331231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi32(a);
332231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
333231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
334231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi8_epi64(__m128 a) {
335231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxbq
336231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi8_epi64(a);
337231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
338231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
339231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi16_epi32(__m128 a) {
340231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxwd
341231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi16_epi32(a);
342231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
343231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
344231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi16_epi64(__m128 a) {
345231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxwq
346231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi16_epi64(a);
347231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
348231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
349231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepi32_epi64(__m128 a) {
350231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovsxdq
351231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepi32_epi64(a);
352231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
353231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
354231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu8_epi16(__m128 a) {
355231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbw
356231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi16(a);
357231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
358231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
359231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu8_epi32(__m128 a) {
360231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbd
361231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi32(a);
362231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
363231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
364231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu8_epi64(__m128 a) {
365231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxbq
366231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu8_epi64(a);
367231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
368231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
369231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu16_epi32(__m128 a) {
370231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxwd
371231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu16_epi32(a);
372231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
373231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
374231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu16_epi64(__m128 a) {
375231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxwq
376231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu16_epi64(a);
377231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
378231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
379231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper__m256 test_mm256_cvtepu32_epi64(__m128 a) {
380231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  // CHECK: @llvm.x86.avx2.pmovzxdq
381231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return _mm256_cvtepu32_epi64(a);
382231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
383