llvm-project/clang/test/CodeGen/avx512f-builtins.c

185 lines
5.0 KiB
C

// RUN: %clang_cc1 %s -O0 -triple=x86_64-apple-darwin -target-feature +avx512f -emit-llvm -o - -Werror | FileCheck %s
// Don't include mm_malloc.h, it's system specific.
#define __MM_MALLOC_H
#include <immintrin.h>
__m512d test_mm512_sqrt_pd(__m512d a)
{
// CHECK-LABEL: @test_mm512_sqrt_pd
// CHECK: @llvm.x86.avx512.sqrt.pd.512
return _mm512_sqrt_pd(a);
}
__m512 test_mm512_sqrt_ps(__m512 a)
{
// CHECK-LABEL: @test_mm512_sqrt_ps
// CHECK: @llvm.x86.avx512.sqrt.ps.512
return _mm512_sqrt_ps(a);
}
__m512d test_mm512_rsqrt14_pd(__m512d a)
{
// CHECK-LABEL: @test_mm512_rsqrt14_pd
// CHECK: @llvm.x86.avx512.rsqrt14.pd.512
return _mm512_rsqrt14_pd(a);
}
__m512 test_mm512_rsqrt14_ps(__m512 a)
{
// CHECK-LABEL: @test_mm512_rsqrt14_ps
// CHECK: @llvm.x86.avx512.rsqrt14.ps.512
return _mm512_rsqrt14_ps(a);
}
__m512 test_mm512_add_ps(__m512 a, __m512 b)
{
// CHECK-LABEL: @test_mm512_add_ps
// CHECK: fadd <16 x float>
return _mm512_add_ps(a, b);
}
__m512d test_mm512_add_pd(__m512d a, __m512d b)
{
// CHECK-LABEL: @test_mm512_add_pd
// CHECK: fadd <8 x double>
return _mm512_add_pd(a, b);
}
__m512 test_mm512_mul_ps(__m512 a, __m512 b)
{
// CHECK-LABEL: @test_mm512_mul_ps
// CHECK: fmul <16 x float>
return _mm512_mul_ps(a, b);
}
__m512d test_mm512_mul_pd(__m512d a, __m512d b)
{
// CHECK-LABEL: @test_mm512_mul_pd
// CHECK: fmul <8 x double>
return _mm512_mul_pd(a, b);
}
void test_mm512_storeu_ps(void *p, __m512 a)
{
// CHECK-LABEL: @test_mm512_storeu_ps
// CHECK: @llvm.x86.avx512.mask.storeu.ps.512
_mm512_storeu_ps(p, a);
}
void test_mm512_storeu_pd(void *p, __m512d a)
{
// CHECK-LABEL: @test_mm512_storeu_pd
// CHECK: @llvm.x86.avx512.mask.storeu.pd.512
_mm512_storeu_pd(p, a);
}
void test_mm512_store_ps(void *p, __m512 a)
{
// CHECK-LABEL: @test_mm512_store_ps
// CHECK: store <16 x float>
_mm512_store_ps(p, a);
}
void test_mm512_store_pd(void *p, __m512d a)
{
// CHECK-LABEL: @test_mm512_store_pd
// CHECK: store <8 x double>
_mm512_store_pd(p, a);
}
__m512 test_mm512_loadu_ps(void *p)
{
// CHECK-LABEL: @test_mm512_loadu_ps
// CHECK: load <16 x float>* {{.*}}, align 1{{$}}
return _mm512_loadu_ps(p);
}
__m512d test_mm512_loadu_pd(void *p)
{
// CHECK-LABEL: @test_mm512_loadu_pd
// CHECK: load <8 x double>* {{.*}}, align 1{{$}}
return _mm512_loadu_pd(p);
}
__m512d test_mm512_set1_pd(double d)
{
// CHECK-LABEL: @test_mm512_set1_pd
// CHECK: insertelement <8 x double> {{.*}}, i32 0
// CHECK: insertelement <8 x double> {{.*}}, i32 1
// CHECK: insertelement <8 x double> {{.*}}, i32 2
// CHECK: insertelement <8 x double> {{.*}}, i32 3
// CHECK: insertelement <8 x double> {{.*}}, i32 4
// CHECK: insertelement <8 x double> {{.*}}, i32 5
// CHECK: insertelement <8 x double> {{.*}}, i32 6
// CHECK: insertelement <8 x double> {{.*}}, i32 7
return _mm512_set1_pd(d);
}
__m512d test_mm512_castpd256_pd512(__m256d a)
{
// CHECK-LABEL: @test_mm512_castpd256_pd512
// CHECK: shufflevector <4 x double> {{.*}} <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
return _mm512_castpd256_pd512(a);
}
__mmask16 test_mm512_knot(__mmask16 a)
{
// CHECK-LABEL: @test_mm512_knot
// CHECK: @llvm.x86.avx512.knot.w
return _mm512_knot(a);
}
__m512i test_mm512_valign_epi64(__m512i a, __m512i b)
{
// CHECK-LABEL: @test_mm512_valign_epi64
// CHECK: @llvm.x86.avx512.mask.valign.q.512
return _mm512_valign_epi64(a, b, 2);
}
__m512d test_mm512_broadcastsd_pd(__m128d a)
{
// CHECK-LABEL: @test_mm512_broadcastsd_pd
// CHECK: insertelement <8 x double> {{.*}}, i32 0
// CHECK: insertelement <8 x double> {{.*}}, i32 1
// CHECK: insertelement <8 x double> {{.*}}, i32 2
// CHECK: insertelement <8 x double> {{.*}}, i32 3
// CHECK: insertelement <8 x double> {{.*}}, i32 4
// CHECK: insertelement <8 x double> {{.*}}, i32 5
// CHECK: insertelement <8 x double> {{.*}}, i32 6
// CHECK: insertelement <8 x double> {{.*}}, i32 7
return _mm512_broadcastsd_pd(a);
}
__m512i test_mm512_fmadd_pd(__m512d a, __m512d b, __m512d c)
{
// CHECK-LABEL: @test_mm512_fmadd_pd
// CHECK: @llvm.x86.fma.mask.vfmadd.pd.512
return _mm512_fmadd_pd(a, b, c);
}
__mmask16 test_mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) {
// CHECK-LABEL: @test_mm512_cmpeq_epi32_mask
// CHECK: @llvm.x86.avx512.mask.pcmpeq.d.512
return (__mmask16)_mm512_cmpeq_epi32_mask(__a, __b);
}
__mmask16 test_mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
// CHECK-LABEL: @test_mm512_mask_cmpeq_epi32_mask
// CHECK: @llvm.x86.avx512.mask.pcmpeq.d.512
return (__mmask16)_mm512_mask_cmpeq_epi32_mask(__u, __a, __b);
}
__mmask8 test_mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
// CHECK-LABEL: @test_mm512_mask_cmpeq_epi64_mask
// CHECK: @llvm.x86.avx512.mask.pcmpeq.q.512
return (__mmask8)_mm512_mask_cmpeq_epi64_mask(__u, __a, __b);
}
__mmask8 test_mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) {
// CHECK-LABEL: @test_mm512_cmpeq_epi64_mask
// CHECK: @llvm.x86.avx512.mask.pcmpeq.q.512
return (__mmask8)_mm512_cmpeq_epi64_mask(__a, __b);
}