avx2-builtins.c revision 735ceaa4ccb60df5993245e645f7127bf4a4325f
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) {
899c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  // CHECK: shufflevector <32 x i8> %1, <32 x i8> %0, <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}
158