avx2-builtins.c revision 925be547b163675b312e3cac0cc7f37f31d787c1
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
68925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi8(__m256 a, __m256 b) {
69925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <32 x i8>
70925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi8(a, b);
71925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
72925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
73925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi16(__m256 a, __m256 b) {
74925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <16 x i16>
75925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi16(a, b);
76925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
77925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
78925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi32(__m256 a, __m256 b) {
79925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <8 x i32>
80925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi32(a, b);
81925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
82925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
83925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper__m256 test_mm256_sub_epi64(__m256 a, __m256 b) {
84925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  // CHECK: sub <4 x i64>
85925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return _mm256_sub_epi64(a, b);
86925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
87