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