diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-28 21:23:03 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-28 21:23:03 +0000 |
commit | 55e6d896ad333f07bb3b1ba487df214fc268a4ab (patch) | |
tree | 9ac2087dfbe8507c56dd39d17cad42836448829f /test/CodeGen | |
parent | 1de93ee5610e8a97e753c881c574f8d994e71373 (diff) |
Notes
Diffstat (limited to 'test/CodeGen')
-rw-r--r-- | test/CodeGen/attr-target-x86.c | 6 | ||||
-rw-r--r-- | test/CodeGen/avx512bitalg-builtins.c | 54 | ||||
-rw-r--r-- | test/CodeGen/avx512vbmi2-builtins.c | 304 | ||||
-rw-r--r-- | test/CodeGen/avx512vlbitalg-builtins.c | 104 | ||||
-rw-r--r-- | test/CodeGen/avx512vlvbmi2-builtins.c | 604 | ||||
-rw-r--r-- | test/CodeGen/avx512vlvnni-builtins.c | 148 | ||||
-rw-r--r-- | test/CodeGen/avx512vnni-builtins.c | 76 | ||||
-rw-r--r-- | test/CodeGen/gfni-builtins.c | 182 | ||||
-rw-r--r-- | test/CodeGen/vaes-builtins.c | 55 | ||||
-rw-r--r-- | test/CodeGen/vpclmulqdq-builtins.c | 17 |
10 files changed, 1547 insertions, 3 deletions
diff --git a/test/CodeGen/attr-target-x86.c b/test/CodeGen/attr-target-x86.c index 6ec2d6578dc43..9e46de74916bc 100644 --- a/test/CodeGen/attr-target-x86.c +++ b/test/CodeGen/attr-target-x86.c @@ -38,9 +38,9 @@ int __attribute__((target("arch=lakemont,mmx"))) lake(int a) { return 4; } // CHECK: lake{{.*}} #7 // CHECK: #0 = {{.*}}"target-cpu"="i686" "target-features"="+x87" // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="i686" "target-features"="+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-avx512vpopcntdq,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="i686" "target-features"="+x87,-aes,-avx,-avx2,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vpopcntdq,-f16c,-fma,-fma4,-gfni,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-xop,-xsave,-xsaveopt" // CHECK: #3 = {{.*}}"target-cpu"="i686" "target-features"="+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" -// CHECK: #4 = {{.*}}"target-cpu"="i686" "target-features"="+x87,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-avx512vpopcntdq,-f16c,-fma,-fma4,-sse4.1,-sse4.2,-xop,-xsave,-xsaveopt" -// CHECK: #5 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #4 = {{.*}}"target-cpu"="i686" "target-features"="+x87,-avx,-avx2,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vpopcntdq,-f16c,-fma,-fma4,-sse4.1,-sse4.2,-vaes,-vpclmulqdq,-xop,-xsave,-xsaveopt" +// CHECK: #5 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes,-vaes" // CHECK: #6 = {{.*}}"target-cpu"="i686" "target-features"="+x87,-3dnow,-3dnowa,-mmx" // CHECK: #7 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx" diff --git a/test/CodeGen/avx512bitalg-builtins.c b/test/CodeGen/avx512bitalg-builtins.c new file mode 100644 index 0000000000000..5770c662f07e7 --- /dev/null +++ b/test/CodeGen/avx512bitalg-builtins.c @@ -0,0 +1,54 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m512i test_mm512_popcnt_epi16(__m512i __A) { + // CHECK-LABEL: @test_mm512_popcnt_epi16 + // CHECK: @llvm.ctpop.v32i16 + return _mm512_popcnt_epi16(__A); +} + +__m512i test_mm512_mask_popcnt_epi16(__m512i __A, __mmask32 __U, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_popcnt_epi16 + // CHECK: @llvm.ctpop.v32i16 + // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i16> %{{[0-9]+}}, <32 x i16> {{.*}} + return _mm512_mask_popcnt_epi16(__A, __U, __B); +} +__m512i test_mm512_maskz_popcnt_epi16(__mmask32 __U, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_popcnt_epi16 + // CHECK: @llvm.ctpop.v32i16 + // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i16> %{{[0-9]+}}, <32 x i16> {{.*}} + return _mm512_maskz_popcnt_epi16(__U, __B); +} + +__m512i test_mm512_popcnt_epi8(__m512i __A) { + // CHECK-LABEL: @test_mm512_popcnt_epi8 + // CHECK: @llvm.ctpop.v64i8 + return _mm512_popcnt_epi8(__A); +} + +__m512i test_mm512_mask_popcnt_epi8(__m512i __A, __mmask64 __U, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_popcnt_epi8 + // CHECK: @llvm.ctpop.v64i8 + // CHECK: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_mask_popcnt_epi8(__A, __U, __B); +} +__m512i test_mm512_maskz_popcnt_epi8(__mmask64 __U, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_popcnt_epi8 + // CHECK: @llvm.ctpop.v64i8 + // CHECK: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_maskz_popcnt_epi8(__U, __B); +} + +__mmask64 test_mm512_mask_bitshuffle_epi64_mask(__mmask64 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_bitshuffle_epi64_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.512 + return _mm512_mask_bitshuffle_epi64_mask(__U, __A, __B); +} + +__mmask64 test_mm512_bitshuffle_epi64_mask(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_bitshuffle_epi64_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.512 + return _mm512_bitshuffle_epi64_mask(__A, __B); +} + diff --git a/test/CodeGen/avx512vbmi2-builtins.c b/test/CodeGen/avx512vbmi2-builtins.c new file mode 100644 index 0000000000000..4da21e39d4e37 --- /dev/null +++ b/test/CodeGen/avx512vbmi2-builtins.c @@ -0,0 +1,304 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m512i test_mm512_mask_compress_epi16(__m512i __S, __mmask32 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.512 + return _mm512_mask_compress_epi16(__S, __U, __D); +} + +__m512i test_mm512_maskz_compress_epi16(__mmask32 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_maskz_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.512 + return _mm512_maskz_compress_epi16(__U, __D); +} + +__m512i test_mm512_mask_compress_epi8(__m512i __S, __mmask64 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.512 + return _mm512_mask_compress_epi8(__S, __U, __D); +} + +__m512i test_mm512_maskz_compress_epi8(__mmask64 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_maskz_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.512 + return _mm512_maskz_compress_epi8(__U, __D); +} + +void test_mm512_mask_compressstoreu_epi16(void *__P, __mmask32 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.store.w.512 + _mm512_mask_compressstoreu_epi16(__P, __U, __D); +} + +void test_mm512_mask_compressstoreu_epi8(void *__P, __mmask64 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.store.b.512 + _mm512_mask_compressstoreu_epi8(__P, __U, __D); +} + +__m512i test_mm512_mask_expand_epi16(__m512i __S, __mmask32 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.512 + return _mm512_mask_expand_epi16(__S, __U, __D); +} + +__m512i test_mm512_maskz_expand_epi16(__mmask32 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_maskz_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.512 + return _mm512_maskz_expand_epi16(__U, __D); +} + +__m512i test_mm512_mask_expand_epi8(__m512i __S, __mmask64 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_mask_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.512 + return _mm512_mask_expand_epi8(__S, __U, __D); +} + +__m512i test_mm512_maskz_expand_epi8(__mmask64 __U, __m512i __D) { + // CHECK-LABEL: @test_mm512_maskz_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.512 + return _mm512_maskz_expand_epi8(__U, __D); +} + +__m512i test_mm512_mask_expandloadu_epi16(__m512i __S, __mmask32 __U, void const* __P) { + // CHECK-LABEL: @test_mm512_mask_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.512 + return _mm512_mask_expandloadu_epi16(__S, __U, __P); +} + +__m512i test_mm512_maskz_expandloadu_epi16(__mmask32 __U, void const* __P) { + // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.512 + return _mm512_maskz_expandloadu_epi16(__U, __P); +} + +__m512i test_mm512_mask_expandloadu_epi8(__m512i __S, __mmask64 __U, void const* __P) { + // CHECK-LABEL: @test_mm512_mask_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.512 + return _mm512_mask_expandloadu_epi8(__S, __U, __P); +} + +__m512i test_mm512_maskz_expandloadu_epi8(__mmask64 __U, void const* __P) { + // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.512 + return _mm512_maskz_expandloadu_epi8(__U, __P); +} + +__m512i test_mm512_mask_shldi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.512 + return _mm512_mask_shldi_epi64(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shldi_epi64(__mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.512 + return _mm512_maskz_shldi_epi64(__U, __A, __B, 63); +} + +__m512i test_mm512_shldi_epi64(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.512 + return _mm512_shldi_epi64(__A, __B, 31); +} + +__m512i test_mm512_mask_shldi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.512 + return _mm512_mask_shldi_epi32(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shldi_epi32(__mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.512 + return _mm512_maskz_shldi_epi32(__U, __A, __B, 63); +} + +__m512i test_mm512_shldi_epi32(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.512 + return _mm512_shldi_epi32(__A, __B, 31); +} + +__m512i test_mm512_mask_shldi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.512 + return _mm512_mask_shldi_epi16(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shldi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.512 + return _mm512_maskz_shldi_epi16(__U, __A, __B, 63); +} + +__m512i test_mm512_shldi_epi16(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.512 + return _mm512_shldi_epi16(__A, __B, 31); +} + +__m512i test_mm512_mask_shrdi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.512 + return _mm512_mask_shrdi_epi64(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shrdi_epi64(__mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.512 + return _mm512_maskz_shrdi_epi64(__U, __A, __B, 63); +} + +__m512i test_mm512_shrdi_epi64(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.512 + return _mm512_shrdi_epi64(__A, __B, 31); +} + +__m512i test_mm512_mask_shrdi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.512 + return _mm512_mask_shrdi_epi32(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shrdi_epi32(__mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.512 + return _mm512_maskz_shrdi_epi32(__U, __A, __B, 63); +} + +__m512i test_mm512_shrdi_epi32(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.512 + return _mm512_shrdi_epi32(__A, __B, 31); +} + +__m512i test_mm512_mask_shrdi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.512 + return _mm512_mask_shrdi_epi16(__S, __U, __A, __B, 127); +} + +__m512i test_mm512_maskz_shrdi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.512 + return _mm512_maskz_shrdi_epi16(__U, __A, __B, 63); +} + +__m512i test_mm512_shrdi_epi16(__m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.512 + return _mm512_shrdi_epi16(__A, __B, 31); +} + +__m512i test_mm512_mask_shldv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.512 + return _mm512_mask_shldv_epi64(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.q.512 + return _mm512_maskz_shldv_epi64(__U, __S, __A, __B); +} + +__m512i test_mm512_shldv_epi64(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.512 + return _mm512_shldv_epi64(__S, __A, __B); +} + +__m512i test_mm512_mask_shldv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.512 + return _mm512_mask_shldv_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.d.512 + return _mm512_maskz_shldv_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_shldv_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.512 + return _mm512_shldv_epi32(__S, __A, __B); +} + +__m512i test_mm512_mask_shldv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.512 + return _mm512_mask_shldv_epi16(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shldv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.w.512 + return _mm512_maskz_shldv_epi16(__U, __S, __A, __B); +} + +__m512i test_mm512_shldv_epi16(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.512 + return _mm512_shldv_epi16(__S, __A, __B); +} + +__m512i test_mm512_mask_shrdv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.512 + return _mm512_mask_shrdv_epi64(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.q.512 + return _mm512_maskz_shrdv_epi64(__U, __S, __A, __B); +} + +__m512i test_mm512_shrdv_epi64(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.512 + return _mm512_shrdv_epi64(__S, __A, __B); +} + +__m512i test_mm512_mask_shrdv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.512 + return _mm512_mask_shrdv_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.d.512 + return _mm512_maskz_shrdv_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_shrdv_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.512 + return _mm512_shrdv_epi32(__S, __A, __B); +} + +__m512i test_mm512_mask_shrdv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.512 + return _mm512_mask_shrdv_epi16(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_shrdv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.w.512 + return _mm512_maskz_shrdv_epi16(__U, __S, __A, __B); +} + +__m512i test_mm512_shrdv_epi16(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.512 + return _mm512_shrdv_epi16(__S, __A, __B); +} + diff --git a/test/CodeGen/avx512vlbitalg-builtins.c b/test/CodeGen/avx512vlbitalg-builtins.c new file mode 100644 index 0000000000000..9b2a1a469b2a5 --- /dev/null +++ b/test/CodeGen/avx512vlbitalg-builtins.c @@ -0,0 +1,104 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m256i test_mm256_popcnt_epi16(__m256i __A) { + // CHECK-LABEL: @test_mm256_popcnt_epi16 + // CHECK: @llvm.ctpop.v16i16 + return _mm256_popcnt_epi16(__A); +} + +__m256i test_mm256_mask_popcnt_epi16(__m256i __A, __mmask16 __U, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_popcnt_epi16 + // CHECK: @llvm.ctpop.v16i16 + // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i16> %{{[0-9]+}}, <16 x i16> {{.*}} + return _mm256_mask_popcnt_epi16(__A, __U, __B); +} +__m256i test_mm256_maskz_popcnt_epi16(__mmask16 __U, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_popcnt_epi16 + // CHECK: @llvm.ctpop.v16i16 + // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i16> %{{[0-9]+}}, <16 x i16> {{.*}} + return _mm256_maskz_popcnt_epi16(__U, __B); +} + +__m128i test_mm128_popcnt_epi16(__m128i __A) { + // CHECK-LABEL: @test_mm128_popcnt_epi16 + // CHECK: @llvm.ctpop.v8i16 + return _mm128_popcnt_epi16(__A); +} + +__m128i test_mm128_mask_popcnt_epi16(__m128i __A, __mmask8 __U, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_popcnt_epi16 + // CHECK: @llvm.ctpop.v8i16 + // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i16> {{.*}} + return _mm128_mask_popcnt_epi16(__A, __U, __B); +} +__m128i test_mm128_maskz_popcnt_epi16(__mmask8 __U, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_popcnt_epi16 + // CHECK: @llvm.ctpop.v8i16 + // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i16> {{.*}} + return _mm128_maskz_popcnt_epi16(__U, __B); +} + +__m256i test_mm256_popcnt_epi8(__m256i __A) { + // CHECK-LABEL: @test_mm256_popcnt_epi8 + // CHECK: @llvm.ctpop.v32i8 + return _mm256_popcnt_epi8(__A); +} + +__m256i test_mm256_mask_popcnt_epi8(__m256i __A, __mmask32 __U, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_popcnt_epi8 + // CHECK: @llvm.ctpop.v32i8 + // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_mask_popcnt_epi8(__A, __U, __B); +} +__m256i test_mm256_maskz_popcnt_epi8(__mmask32 __U, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_popcnt_epi8 + // CHECK: @llvm.ctpop.v32i8 + // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_maskz_popcnt_epi8(__U, __B); +} + +__m128i test_mm128_popcnt_epi8(__m128i __A) { + // CHECK-LABEL: @test_mm128_popcnt_epi8 + // CHECK: @llvm.ctpop.v16i8 + return _mm128_popcnt_epi8(__A); +} + +__m128i test_mm128_mask_popcnt_epi8(__m128i __A, __mmask16 __U, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_popcnt_epi8 + // CHECK: @llvm.ctpop.v16i8 + // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm128_mask_popcnt_epi8(__A, __U, __B); +} +__m128i test_mm128_maskz_popcnt_epi8(__mmask16 __U, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_popcnt_epi8 + // CHECK: @llvm.ctpop.v16i8 + // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm128_maskz_popcnt_epi8(__U, __B); +} + +__mmask32 test_mm256_mask_bitshuffle_epi32_mask(__mmask32 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_bitshuffle_epi32_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.256 + return _mm256_mask_bitshuffle_epi32_mask(__U, __A, __B); +} + +__mmask32 test_mm256_bitshuffle_epi32_mask(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_bitshuffle_epi32_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.256 + return _mm256_bitshuffle_epi32_mask(__A, __B); +} + +__mmask16 test_mm128_mask_bitshuffle_epi16_mask(__mmask16 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_bitshuffle_epi16_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.128 + return _mm128_mask_bitshuffle_epi16_mask(__U, __A, __B); +} + +__mmask16 test_mm128_bitshuffle_epi16_mask(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_bitshuffle_epi16_mask + // CHECK: @llvm.x86.avx512.mask.vpshufbitqmb.128 + return _mm128_bitshuffle_epi16_mask(__A, __B); +} + diff --git a/test/CodeGen/avx512vlvbmi2-builtins.c b/test/CodeGen/avx512vlvbmi2-builtins.c new file mode 100644 index 0000000000000..6edc66d30eee2 --- /dev/null +++ b/test/CodeGen/avx512vlvbmi2-builtins.c @@ -0,0 +1,604 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m128i test_mm128_mask_compress_epi16(__m128i __S, __mmask8 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.128 + return _mm128_mask_compress_epi16(__S, __U, __D); +} + +__m128i test_mm128_maskz_compress_epi16(__mmask8 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_maskz_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.128 + return _mm128_maskz_compress_epi16(__U, __D); +} + +__m128i test_mm128_mask_compress_epi8(__m128i __S, __mmask16 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.128 + return _mm128_mask_compress_epi8(__S, __U, __D); +} + +__m128i test_mm128_maskz_compress_epi8(__mmask16 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_maskz_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.128 + return _mm128_maskz_compress_epi8(__U, __D); +} + +void test_mm128_mask_compressstoreu_epi16(void *__P, __mmask8 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_compressstoreu_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.store.w.128 + _mm128_mask_compressstoreu_epi16(__P, __U, __D); +} + +void test_mm128_mask_compressstoreu_epi8(void *__P, __mmask16 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_compressstoreu_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.store.b.128 + _mm128_mask_compressstoreu_epi8(__P, __U, __D); +} + +__m128i test_mm128_mask_expand_epi16(__m128i __S, __mmask8 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.128 + return _mm128_mask_expand_epi16(__S, __U, __D); +} + +__m128i test_mm128_maskz_expand_epi16(__mmask8 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_maskz_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.128 + return _mm128_maskz_expand_epi16(__U, __D); +} + +__m128i test_mm128_mask_expand_epi8(__m128i __S, __mmask16 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_mask_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.128 + return _mm128_mask_expand_epi8(__S, __U, __D); +} + +__m128i test_mm128_maskz_expand_epi8(__mmask16 __U, __m128i __D) { + // CHECK-LABEL: @test_mm128_maskz_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.128 + return _mm128_maskz_expand_epi8(__U, __D); +} + +__m128i test_mm128_mask_expandloadu_epi16(__m128i __S, __mmask8 __U, void const* __P) { + // CHECK-LABEL: @test_mm128_mask_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.128 + return _mm128_mask_expandloadu_epi16(__S, __U, __P); +} + +__m128i test_mm128_maskz_expandloadu_epi16(__mmask8 __U, void const* __P) { + // CHECK-LABEL: @test_mm128_maskz_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.128 + return _mm128_maskz_expandloadu_epi16(__U, __P); +} + +__m128i test_mm128_mask_expandloadu_epi8(__m128i __S, __mmask16 __U, void const* __P) { + // CHECK-LABEL: @test_mm128_mask_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.128 + return _mm128_mask_expandloadu_epi8(__S, __U, __P); +} + +__m128i test_mm128_maskz_expandloadu_epi8(__mmask16 __U, void const* __P) { + // CHECK-LABEL: @test_mm128_maskz_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.128 + return _mm128_maskz_expandloadu_epi8(__U, __P); +} + +__m256i test_mm256_mask_compress_epi16(__m256i __S, __mmask16 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.256 + return _mm256_mask_compress_epi16(__S, __U, __D); +} + +__m256i test_mm256_maskz_compress_epi16(__mmask16 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_maskz_compress_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.w.256 + return _mm256_maskz_compress_epi16(__U, __D); +} + +__m256i test_mm256_mask_compress_epi8(__m256i __S, __mmask32 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.256 + return _mm256_mask_compress_epi8(__S, __U, __D); +} + +__m256i test_mm256_maskz_compress_epi8(__mmask32 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_maskz_compress_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.b.256 + return _mm256_maskz_compress_epi8(__U, __D); +} + +void test_mm256_mask_compressstoreu_epi16(void *__P, __mmask16 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi16 + // CHECK: @llvm.x86.avx512.mask.compress.store.w.256 + _mm256_mask_compressstoreu_epi16(__P, __U, __D); +} + +void test_mm256_mask_compressstoreu_epi8(void *__P, __mmask32 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi8 + // CHECK: @llvm.x86.avx512.mask.compress.store.b.256 + _mm256_mask_compressstoreu_epi8(__P, __U, __D); +} + +__m256i test_mm256_mask_expand_epi16(__m256i __S, __mmask16 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.256 + return _mm256_mask_expand_epi16(__S, __U, __D); +} + +__m256i test_mm256_maskz_expand_epi16(__mmask16 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_maskz_expand_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.w.256 + return _mm256_maskz_expand_epi16(__U, __D); +} + +__m256i test_mm256_mask_expand_epi8(__m256i __S, __mmask32 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_mask_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.256 + return _mm256_mask_expand_epi8(__S, __U, __D); +} + +__m256i test_mm256_maskz_expand_epi8(__mmask32 __U, __m256i __D) { + // CHECK-LABEL: @test_mm256_maskz_expand_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.b.256 + return _mm256_maskz_expand_epi8(__U, __D); +} + +__m256i test_mm256_mask_expandloadu_epi16(__m256i __S, __mmask16 __U, void const* __P) { + // CHECK-LABEL: @test_mm256_mask_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.256 + return _mm256_mask_expandloadu_epi16(__S, __U, __P); +} + +__m256i test_mm256_maskz_expandloadu_epi16(__mmask16 __U, void const* __P) { + // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi16 + // CHECK: @llvm.x86.avx512.mask.expand.load.w.256 + return _mm256_maskz_expandloadu_epi16(__U, __P); +} + +__m256i test_mm256_mask_expandloadu_epi8(__m256i __S, __mmask32 __U, void const* __P) { + // CHECK-LABEL: @test_mm256_mask_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.256 + return _mm256_mask_expandloadu_epi8(__S, __U, __P); +} + +__m256i test_mm256_maskz_expandloadu_epi8(__mmask32 __U, void const* __P) { + // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi8 + // CHECK: @llvm.x86.avx512.mask.expand.load.b.256 + return _mm256_maskz_expandloadu_epi8(__U, __P); +} + +__m256i test_mm256_mask_shldi_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.256 + return _mm256_mask_shldi_epi64(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shldi_epi64(__mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.256 + return _mm256_maskz_shldi_epi64(__U, __A, __B, 63); +} + +__m256i test_mm256_shldi_epi64(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.256 + return _mm256_shldi_epi64(__A, __B, 31); +} + +__m128i test_mm128_mask_shldi_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.128 + return _mm128_mask_shldi_epi64(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shldi_epi64(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.128 + return _mm128_maskz_shldi_epi64(__U, __A, __B, 63); +} + +__m128i test_mm128_shldi_epi64(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshld.q.128 + return _mm128_shldi_epi64(__A, __B, 31); +} + +__m256i test_mm256_mask_shldi_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.256 + return _mm256_mask_shldi_epi32(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shldi_epi32(__mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.256 + return _mm256_maskz_shldi_epi32(__U, __A, __B, 63); +} + +__m256i test_mm256_shldi_epi32(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.256 + return _mm256_shldi_epi32(__A, __B, 31); +} + +__m128i test_mm128_mask_shldi_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.128 + return _mm128_mask_shldi_epi32(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shldi_epi32(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.128 + return _mm128_maskz_shldi_epi32(__U, __A, __B, 63); +} + +__m128i test_mm128_shldi_epi32(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshld.d.128 + return _mm128_shldi_epi32(__A, __B, 31); +} + +__m256i test_mm256_mask_shldi_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.256 + return _mm256_mask_shldi_epi16(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shldi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.256 + return _mm256_maskz_shldi_epi16(__U, __A, __B, 63); +} + +__m256i test_mm256_shldi_epi16(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.256 + return _mm256_shldi_epi16(__A, __B, 31); +} + +__m128i test_mm128_mask_shldi_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.128 + return _mm128_mask_shldi_epi16(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shldi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.128 + return _mm128_maskz_shldi_epi16(__U, __A, __B, 63); +} + +__m128i test_mm128_shldi_epi16(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshld.w.128 + return _mm128_shldi_epi16(__A, __B, 31); +} + +__m256i test_mm256_mask_shrdi_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.256 + return _mm256_mask_shrdi_epi64(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shrdi_epi64(__mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.256 + return _mm256_maskz_shrdi_epi64(__U, __A, __B, 63); +} + +__m256i test_mm256_shrdi_epi64(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.256 + return _mm256_shrdi_epi64(__A, __B, 31); +} + +__m128i test_mm128_mask_shrdi_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.128 + return _mm128_mask_shrdi_epi64(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shrdi_epi64(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.128 + return _mm128_maskz_shrdi_epi64(__U, __A, __B, 63); +} + +__m128i test_mm128_shrdi_epi64(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdi_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrd.q.128 + return _mm128_shrdi_epi64(__A, __B, 31); +} + +__m256i test_mm256_mask_shrdi_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.256 + return _mm256_mask_shrdi_epi32(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shrdi_epi32(__mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.256 + return _mm256_maskz_shrdi_epi32(__U, __A, __B, 63); +} + +__m256i test_mm256_shrdi_epi32(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.256 + return _mm256_shrdi_epi32(__A, __B, 31); +} + +__m128i test_mm128_mask_shrdi_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.128 + return _mm128_mask_shrdi_epi32(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shrdi_epi32(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.128 + return _mm128_maskz_shrdi_epi32(__U, __A, __B, 63); +} + +__m128i test_mm128_shrdi_epi32(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdi_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrd.d.128 + return _mm128_shrdi_epi32(__A, __B, 31); +} + +__m256i test_mm256_mask_shrdi_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.256 + return _mm256_mask_shrdi_epi16(__S, __U, __A, __B, 127); +} + +__m256i test_mm256_maskz_shrdi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.256 + return _mm256_maskz_shrdi_epi16(__U, __A, __B, 63); +} + +__m256i test_mm256_shrdi_epi16(__m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.256 + return _mm256_shrdi_epi16(__A, __B, 31); +} + +__m128i test_mm128_mask_shrdi_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.128 + return _mm128_mask_shrdi_epi16(__S, __U, __A, __B, 127); +} + +__m128i test_mm128_maskz_shrdi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.128 + return _mm128_maskz_shrdi_epi16(__U, __A, __B, 63); +} + +__m128i test_mm128_shrdi_epi16(__m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdi_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrd.w.128 + return _mm128_shrdi_epi16(__A, __B, 31); +} + +__m256i test_mm256_mask_shldv_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.256 + return _mm256_mask_shldv_epi64(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shldv_epi64(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.q.256 + return _mm256_maskz_shldv_epi64(__U, __S, __A, __B); +} + +__m256i test_mm256_shldv_epi64(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.256 + return _mm256_shldv_epi64(__S, __A, __B); +} + +__m128i test_mm128_mask_shldv_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.128 + return _mm128_mask_shldv_epi64(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shldv_epi64(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.q.128 + return _mm128_maskz_shldv_epi64(__U, __S, __A, __B); +} + +__m128i test_mm128_shldv_epi64(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshldv.q.128 + return _mm128_shldv_epi64(__S, __A, __B); +} + +__m256i test_mm256_mask_shldv_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.256 + return _mm256_mask_shldv_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shldv_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.d.256 + return _mm256_maskz_shldv_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_shldv_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.256 + return _mm256_shldv_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_shldv_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.128 + return _mm128_mask_shldv_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shldv_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.d.128 + return _mm128_maskz_shldv_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_shldv_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshldv.d.128 + return _mm128_shldv_epi32(__S, __A, __B); +} + +__m256i test_mm256_mask_shldv_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.256 + return _mm256_mask_shldv_epi16(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shldv_epi16(__mmask16 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shldv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.w.256 + return _mm256_maskz_shldv_epi16(__U, __S, __A, __B); +} + +__m256i test_mm256_shldv_epi16(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.256 + return _mm256_shldv_epi16(__S, __A, __B); +} + +__m128i test_mm128_mask_shldv_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.128 + return _mm128_mask_shldv_epi16(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shldv_epi16(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shldv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshldv.w.128 + return _mm128_maskz_shldv_epi16(__U, __S, __A, __B); +} + +__m128i test_mm128_shldv_epi16(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shldv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshldv.w.128 + return _mm128_shldv_epi16(__S, __A, __B); +} + +__m256i test_mm256_mask_shrdv_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.256 + return _mm256_mask_shrdv_epi64(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shrdv_epi64(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.q.256 + return _mm256_maskz_shrdv_epi64(__U, __S, __A, __B); +} + +__m256i test_mm256_shrdv_epi64(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.256 + return _mm256_shrdv_epi64(__S, __A, __B); +} + +__m128i test_mm128_mask_shrdv_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.128 + return _mm128_mask_shrdv_epi64(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shrdv_epi64(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdv_epi64 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.q.128 + return _mm128_maskz_shrdv_epi64(__U, __S, __A, __B); +} + +__m128i test_mm128_shrdv_epi64(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdv_epi64 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.q.128 + return _mm128_shrdv_epi64(__S, __A, __B); +} + +__m256i test_mm256_mask_shrdv_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.256 + return _mm256_mask_shrdv_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shrdv_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.d.256 + return _mm256_maskz_shrdv_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_shrdv_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.256 + return _mm256_shrdv_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_shrdv_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.128 + return _mm128_mask_shrdv_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shrdv_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdv_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.d.128 + return _mm128_maskz_shrdv_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_shrdv_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdv_epi32 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.d.128 + return _mm128_shrdv_epi32(__S, __A, __B); +} + +__m256i test_mm256_mask_shrdv_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.256 + return _mm256_mask_shrdv_epi16(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_shrdv_epi16(__mmask16 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_shrdv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.w.256 + return _mm256_maskz_shrdv_epi16(__U, __S, __A, __B); +} + +__m256i test_mm256_shrdv_epi16(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.256 + return _mm256_shrdv_epi16(__S, __A, __B); +} + +__m128i test_mm128_mask_shrdv_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.128 + return _mm128_mask_shrdv_epi16(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_shrdv_epi16(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_shrdv_epi16 + // CHECK: @llvm.x86.avx512.maskz.vpshrdv.w.128 + return _mm128_maskz_shrdv_epi16(__U, __S, __A, __B); +} + +__m128i test_mm128_shrdv_epi16(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_shrdv_epi16 + // CHECK: @llvm.x86.avx512.mask.vpshrdv.w.128 + return _mm128_shrdv_epi16(__S, __A, __B); +} + diff --git a/test/CodeGen/avx512vlvnni-builtins.c b/test/CodeGen/avx512vlvnni-builtins.c new file mode 100644 index 0000000000000..861b915fdb290 --- /dev/null +++ b/test/CodeGen/avx512vlvnni-builtins.c @@ -0,0 +1,148 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m256i test_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.256 + return _mm256_mask_dpbusd_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusd.256 + return _mm256_maskz_dpbusd_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.256 + return _mm256_dpbusd_epi32(__S, __A, __B); +} + +__m256i test_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.256 + return _mm256_mask_dpbusds_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusds.256 + return _mm256_maskz_dpbusds_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.256 + return _mm256_dpbusds_epi32(__S, __A, __B); +} + +__m256i test_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.256 + return _mm256_mask_dpwssd_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssd.256 + return _mm256_maskz_dpwssd_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.256 + return _mm256_dpwssd_epi32(__S, __A, __B); +} + +__m256i test_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.256 + return _mm256_mask_dpwssds_epi32(__S, __U, __A, __B); +} + +__m256i test_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssds.256 + return _mm256_maskz_dpwssds_epi32(__U, __S, __A, __B); +} + +__m256i test_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.256 + return _mm256_dpwssds_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.128 + return _mm128_mask_dpbusd_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusd.128 + return _mm128_maskz_dpbusd_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.128 + return _mm128_dpbusd_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.128 + return _mm128_mask_dpbusds_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusds.128 + return _mm128_maskz_dpbusds_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.128 + return _mm128_dpbusds_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.128 + return _mm128_mask_dpwssd_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssd.128 + return _mm128_maskz_dpwssd_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.128 + return _mm128_dpwssd_epi32(__S, __A, __B); +} + +__m128i test_mm128_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_mask_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.128 + return _mm128_mask_dpwssds_epi32(__S, __U, __A, __B); +} + +__m128i test_mm128_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_maskz_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssds.128 + return _mm128_maskz_dpwssds_epi32(__U, __S, __A, __B); +} + +__m128i test_mm128_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm128_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.128 + return _mm128_dpwssds_epi32(__S, __A, __B); +} + diff --git a/test/CodeGen/avx512vnni-builtins.c b/test/CodeGen/avx512vnni-builtins.c new file mode 100644 index 0000000000000..d79046aa04995 --- /dev/null +++ b/test/CodeGen/avx512vnni-builtins.c @@ -0,0 +1,76 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include <immintrin.h> + +__m512i test_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.512 + return _mm512_mask_dpbusd_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusd.512 + return _mm512_maskz_dpbusd_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_dpbusd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusd.512 + return _mm512_dpbusd_epi32(__S, __A, __B); +} + +__m512i test_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.512 + return _mm512_mask_dpbusds_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpbusds.512 + return _mm512_maskz_dpbusds_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_dpbusds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpbusds.512 + return _mm512_dpbusds_epi32(__S, __A, __B); +} + +__m512i test_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.512 + return _mm512_mask_dpwssd_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssd.512 + return _mm512_maskz_dpwssd_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_dpwssd_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssd.512 + return _mm512_dpwssd_epi32(__S, __A, __B); +} + +__m512i test_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_mask_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.512 + return _mm512_mask_dpwssds_epi32(__S, __U, __A, __B); +} + +__m512i test_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_maskz_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.maskz.vpdpwssds.512 + return _mm512_maskz_dpwssds_epi32(__U, __S, __A, __B); +} + +__m512i test_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B) { + // CHECK-LABEL: @test_mm512_dpwssds_epi32 + // CHECK: @llvm.x86.avx512.mask.vpdpwssds.512 + return _mm512_dpwssds_epi32(__S, __A, __B); +} + diff --git a/test/CodeGen/gfni-builtins.c b/test/CodeGen/gfni-builtins.c new file mode 100644 index 0000000000000..95cfd4fcd5c79 --- /dev/null +++ b/test/CodeGen/gfni-builtins.c @@ -0,0 +1,182 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -emit-llvm -o - | FileCheck %s --check-prefix SSE +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX -target-feature +gfni -target-feature +avx -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX512 -target-feature +gfni -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX512 + +#include <immintrin.h> + +__m128i test_mm_gf2p8affineinv_epi64_epi8(__m128i A, __m128i B) { + // SSE-LABEL: @test_mm_gf2p8affineinv_epi64_epi8 + // SSE: @llvm.x86.vgf2p8affineinvqb.128 + return _mm_gf2p8affineinv_epi64_epi8(A, B, 1); +} + +__m128i test_mm_gf2p8affine_epi64_epi8(__m128i A, __m128i B) { + // SSE-LABEL: @test_mm_gf2p8affine_epi64_epi8 + // SSE: @llvm.x86.vgf2p8affineqb.128 + return _mm_gf2p8affine_epi64_epi8(A, B, 1); +} + +__m128i test_mm_gf2p8mul_epi8(__m128i A, __m128i B) { + // SSE-LABEL: @test_mm_gf2p8mul_epi8 + // SSE: @llvm.x86.vgf2p8mulb.128 + return _mm_gf2p8mul_epi8(A, B); +} + +#if defined(AVX) || defined(AVX512) +__m256i test_mm256_gf2p8affineinv_epi64_epi8(__m256i A, __m256i B) { + // AVX-LABEL: @test_mm256_gf2p8affineinv_epi64_epi8 + // AVX: @llvm.x86.vgf2p8affineinvqb.256 + return _mm256_gf2p8affineinv_epi64_epi8(A, B, 1); +} + +__m256i test_mm256_gf2p8affine_epi64_epi8(__m256i A, __m256i B) { + // AVX-LABEL: @test_mm256_gf2p8affine_epi64_epi8 + // AVX: @llvm.x86.vgf2p8affineqb.256 + return _mm256_gf2p8affine_epi64_epi8(A, B, 1); +} + +__m256i test_mm256_gf2p8mul_epi8(__m256i A, __m256i B) { + // AVX-LABEL: @test_mm256_gf2p8mul_epi8 + // AVX: @llvm.x86.vgf2p8mulb.256 + return _mm256_gf2p8mul_epi8(A, B); +} +#endif // AVX + +#ifdef AVX512 +__m512i test_mm512_gf2p8affineinv_epi64_epi8(__m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_gf2p8affineinv_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineinvqb.512 + return _mm512_gf2p8affineinv_epi64_epi8(A, B, 1); +} + +__m512i test_mm512_mask_gf2p8affineinv_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_mask_gf2p8affineinv_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineinvqb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1); +} + +__m512i test_mm512_maskz_gf2p8affineinv_epi64_epi8(__mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_maskz_gf2p8affineinv_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineinvqb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1); +} + +__m256i test_mm256_mask_gf2p8affineinv_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_mask_gf2p8affineinv_epi64_epi8 + // AVX256: @llvm.x86.vgf2p8affineinvqb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1); +} + +__m256i test_mm256_maskz_gf2p8affineinv_epi64_epi8(__mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_maskz_gf2p8affineinv_epi64_epi8 + // AVX256: @llvm.x86.vgf2p8affineinvqb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1); +} + +__m128i test_mm_mask_gf2p8affineinv_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) { + // AVX512-LABEL: @test_mm_mask_gf2p8affineinv_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineinvqb.128 + // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1); +} + +__m128i test_mm_maskz_gf2p8affineinv_epi64_epi8(__mmask16 U, __m128i A, __m128i B) { + // AVX512-LABEL: @test_mm_maskz_gf2p8affineinv_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineinvqb.128 + // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1); +} + +__m512i test_mm512_gf2p8affine_epi64_epi8(__m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_gf2p8affine_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineqb.512 + return _mm512_gf2p8affine_epi64_epi8(A, B, 1); +} + +__m512i test_mm512_mask_gf2p8affine_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_mask_gf2p8affine_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineqb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1); +} + +__m512i test_mm512_maskz_gf2p8affine_epi64_epi8(__mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_maskz_gf2p8affine_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineqb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, 1); +} + +__m256i test_mm256_mask_gf2p8affine_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_mask_gf2p8affine_epi64_epi8 + // AVX256: @llvm.x86.vgf2p8affineqb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1); +} + +__m256i test_mm256_maskz_gf2p8affine_epi64_epi8(__mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_maskz_gf2p8affine_epi64_epi8 + // AVX256: @llvm.x86.vgf2p8affineqb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, 1); +} + +__m128i test_mm_mask_gf2p8affine_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) { + // AVX512-LABEL: @test_mm_mask_gf2p8affine_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineqb.128 + // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1); +} + +__m128i test_mm_maskz_gf2p8affine_epi64_epi8(__mmask16 U, __m128i A, __m128i B) { + // AVX512-LABEL: @test_mm_maskz_gf2p8affine_epi64_epi8 + // AVX512: @llvm.x86.vgf2p8affineqb.128 + // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, 1); +} + +__m512i test_mm512_gf2p8mul_epi8(__m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_gf2p8mul_epi8 + // AVX512: @llvm.x86.vgf2p8mulb.512 + return _mm512_gf2p8mul_epi8(A, B); +} + +__m512i test_mm512_mask_gf2p8mul_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_mask_gf2p8mul_epi8 + // AVX512: @llvm.x86.vgf2p8mulb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_mask_gf2p8mul_epi8(S, U, A, B); +} + +__m512i test_mm512_maskz_gf2p8mul_epi8(__mmask64 U, __m512i A, __m512i B) { + // AVX512-LABEL: @test_mm512_maskz_gf2p8mul_epi8 + // AVX512: @llvm.x86.vgf2p8mulb.512 + // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}} + return _mm512_maskz_gf2p8mul_epi8(U, A, B); +} + +__m256i test_mm256_mask_gf2p8mul_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_mask_gf2p8mul_epi8 + // AVX256: @llvm.x86.vgf2p8mulb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_mask_gf2p8mul_epi8(S, U, A, B); +} + +__m256i test_mm256_maskz_gf2p8mul_epi8(__mmask32 U, __m256i A, __m256i B) { + // AVX256-LABEL: @test_mm256_maskz_gf2p8mul_epi8 + // AVX256: @llvm.x86.vgf2p8mulb.256 + // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}} + return _mm256_maskz_gf2p8mul_epi8(U, A, B); +} + +__m128i test_mm_mask_gf2p8mul_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) { + // AVX512-LABEL: @test_mm_mask_gf2p8mul_epi8 + // AVX512: @llvm.x86.vgf2p8mulb.128 + // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}} + return _mm_mask_gf2p8mul_epi8(S, U, A, B); +} +#endif // AVX512 diff --git a/test/CodeGen/vaes-builtins.c b/test/CodeGen/vaes-builtins.c new file mode 100644 index 0000000000000..df160aa16ee3b --- /dev/null +++ b/test/CodeGen/vaes-builtins.c @@ -0,0 +1,55 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +vaes -emit-llvm -o - | FileCheck %s --check-prefix AVX +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX512 -target-feature +vaes -target-feature +avx512f -emit-llvm -o - | FileCheck %s --check-prefixes AVX,AVX512 + +#include <immintrin.h> + +__m256i test_mm256_aesenc_epi128(__m256i __A, __m256i __B) { + // AVX-LABEL: @test_mm256_aesenc_epi128 + // AVX: @llvm.x86.aesni.aesenc.256 + return _mm256_aesenc_epi128(__A, __B); +} + +__m256i test_mm256_aesenclast_epi128(__m256i __A, __m256i __B) { + // AVX-LABEL: @test_mm256_aesenclast_epi128 + // AVX: @llvm.x86.aesni.aesenclast.256 + return _mm256_aesenclast_epi128(__A, __B); +} + +__m256i test_mm256_aesdec_epi128(__m256i __A, __m256i __B) { + // AVX-LABEL: @test_mm256_aesdec_epi128 + // AVX: @llvm.x86.aesni.aesdec.256 + return _mm256_aesdec_epi128(__A, __B); +} + +__m256i test_mm256_aesdeclast_epi128(__m256i __A, __m256i __B) { + // AVX-LABEL: @test_mm256_aesdeclast_epi128 + // AVX: @llvm.x86.aesni.aesdeclast.256 + return _mm256_aesdeclast_epi128(__A, __B); +} + +#ifdef AVX512 +__m512i test_mm512_aesenc_epi128(__m512i __A, __m512i __B) { + // AVX512-LABEL: @test_mm512_aesenc_epi128 + // AVX512: @llvm.x86.aesni.aesenc.512 + return _mm512_aesenc_epi128(__A, __B); +} + +__m512i test_mm512_aesenclast_epi128(__m512i __A, __m512i __B) { + // AVX512-LABEL: @test_mm512_aesenclast_epi128 + // AVX512: @llvm.x86.aesni.aesenclast.512 + return _mm512_aesenclast_epi128(__A, __B); +} + +__m512i test_mm512_aesdec_epi128(__m512i __A, __m512i __B) { + // AVX512-LABEL: @test_mm512_aesdec_epi128 + // AVX512: @llvm.x86.aesni.aesdec.512 + return _mm512_aesdec_epi128(__A, __B); +} + +__m512i test_mm512_aesdeclast_epi128(__m512i __A, __m512i __B) { + // AVX512-LABEL: @test_mm512_aesdeclast_epi128 + // AVX512: @llvm.x86.aesni.aesdeclast.512 + return _mm512_aesdeclast_epi128(__A, __B); +} +#endif + diff --git a/test/CodeGen/vpclmulqdq-builtins.c b/test/CodeGen/vpclmulqdq-builtins.c new file mode 100644 index 0000000000000..8c610e2d851cd --- /dev/null +++ b/test/CodeGen/vpclmulqdq-builtins.c @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +vpclmulqdq -emit-llvm -o - | FileCheck %s --check-prefix AVX +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX512 -target-feature +vpclmulqdq -target-feature +avx512f -emit-llvm -o - | FileCheck %s --check-prefixes AVX,AVX512 + +#include <immintrin.h> + +__m256i test_mm256_clmulepi64_epi128(__m256i A, __m256i B) { + // AVX: @llvm.x86.pclmulqdq.256 + return _mm256_clmulepi64_epi128(A, B, 0); +} + +#ifdef AVX512 +__m512i test_mm512_clmulepi64_epi128(__m512i A, __m512i B) { + // AVX512: @llvm.x86.pclmulqdq.512 + return _mm512_clmulepi64_epi128(A, B, 0); +} +#endif + |