193 lines · c
1// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -emit-llvm -o - | FileCheck %s --check-prefix SSE2// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX3// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX5124// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX512,AVX512BW5 6#include <immintrin.h>7 8__m128i test_mm_gf2p8affineinv_epi64_epi8(__m128i A, __m128i B) {9 // SSE-LABEL: @test_mm_gf2p8affineinv_epi64_epi810 // SSE: @llvm.x86.vgf2p8affineinvqb.12811 return _mm_gf2p8affineinv_epi64_epi8(A, B, 1);12}13 14__m128i test_mm_gf2p8affine_epi64_epi8(__m128i A, __m128i B) {15 // SSE-LABEL: @test_mm_gf2p8affine_epi64_epi816 // SSE: @llvm.x86.vgf2p8affineqb.12817 return _mm_gf2p8affine_epi64_epi8(A, B, 1);18}19 20__m128i test_mm_gf2p8mul_epi8(__m128i A, __m128i B) {21 // SSE-LABEL: @test_mm_gf2p8mul_epi822 // SSE: @llvm.x86.vgf2p8mulb.12823 return _mm_gf2p8mul_epi8(A, B);24}25 26#ifdef __AVX__27__m256i test_mm256_gf2p8affineinv_epi64_epi8(__m256i A, __m256i B) {28 // AVX-LABEL: @test_mm256_gf2p8affineinv_epi64_epi829 // AVX: @llvm.x86.vgf2p8affineinvqb.25630 return _mm256_gf2p8affineinv_epi64_epi8(A, B, 1);31}32 33__m256i test_mm256_gf2p8affine_epi64_epi8(__m256i A, __m256i B) {34 // AVX-LABEL: @test_mm256_gf2p8affine_epi64_epi835 // AVX: @llvm.x86.vgf2p8affineqb.25636 return _mm256_gf2p8affine_epi64_epi8(A, B, 1);37}38 39__m256i test_mm256_gf2p8mul_epi8(__m256i A, __m256i B) {40 // AVX-LABEL: @test_mm256_gf2p8mul_epi841 // AVX: @llvm.x86.vgf2p8mulb.25642 return _mm256_gf2p8mul_epi8(A, B);43}44#endif // __AVX__45 46#ifdef __AVX512F__47__m512i test_mm512_gf2p8affineinv_epi64_epi8(__m512i A, __m512i B) {48 // AVX512-LABEL: @test_mm512_gf2p8affineinv_epi64_epi849 // AVX512: @llvm.x86.vgf2p8affineinvqb.51250 return _mm512_gf2p8affineinv_epi64_epi8(A, B, 1);51}52 53__m512i test_mm512_gf2p8affine_epi64_epi8(__m512i A, __m512i B) {54 // AVX512-LABEL: @test_mm512_gf2p8affine_epi64_epi855 // AVX512: @llvm.x86.vgf2p8affineqb.51256 return _mm512_gf2p8affine_epi64_epi8(A, B, 1);57}58 59__m512i test_mm512_gf2p8mul_epi8(__m512i A, __m512i B) {60 // AVX512-LABEL: @test_mm512_gf2p8mul_epi861 // AVX512: @llvm.x86.vgf2p8mulb.51262 return _mm512_gf2p8mul_epi8(A, B);63}64#endif // __AVX512F__65 66#ifdef __AVX512BW__67__m512i test_mm512_mask_gf2p8affineinv_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {68 // AVX512BW-LABEL: @test_mm512_mask_gf2p8affineinv_epi64_epi869 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.51270 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}71 return _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);72}73 74__m512i test_mm512_maskz_gf2p8affineinv_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {75 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8affineinv_epi64_epi876 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.51277 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}78 return _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);79}80 81__m128i test_mm_mask_gf2p8affineinv_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {82 // AVX512BW-LABEL: @test_mm_mask_gf2p8affineinv_epi64_epi883 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.12884 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}85 return _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);86}87 88__m128i test_mm_maskz_gf2p8affineinv_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {89 // AVX512BW-LABEL: @test_mm_maskz_gf2p8affineinv_epi64_epi890 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.12891 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}92 return _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);93}94 95__m256i test_mm256_mask_gf2p8affineinv_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {96 // AVX512BW-LABEL: @test_mm256_mask_gf2p8affineinv_epi64_epi897 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.25698 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}99 return _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);100}101 102__m256i test_mm256_maskz_gf2p8affineinv_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {103 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8affineinv_epi64_epi8104 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.256105 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}106 return _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);107}108 109__m512i test_mm512_mask_gf2p8affine_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {110 // AVX512BW-LABEL: @test_mm512_mask_gf2p8affine_epi64_epi8111 // AVX512BW: @llvm.x86.vgf2p8affineqb.512112 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}113 return _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);114}115 116__m512i test_mm512_maskz_gf2p8affine_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {117 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8affine_epi64_epi8118 // AVX512BW: @llvm.x86.vgf2p8affineqb.512119 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}120 return _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);121}122 123__m128i test_mm_mask_gf2p8affine_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {124 // AVX512BW-LABEL: @test_mm_mask_gf2p8affine_epi64_epi8125 // AVX512BW: @llvm.x86.vgf2p8affineqb.128126 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}127 return _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);128}129 130__m128i test_mm_maskz_gf2p8affine_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {131 // AVX512BW-LABEL: @test_mm_maskz_gf2p8affine_epi64_epi8132 // AVX512BW: @llvm.x86.vgf2p8affineqb.128133 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}134 return _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);135}136 137__m256i test_mm256_mask_gf2p8affine_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {138 // AVX512BW-LABEL: @test_mm256_mask_gf2p8affine_epi64_epi8139 // AVX512BW: @llvm.x86.vgf2p8affineqb.256140 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}141 return _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);142}143 144__m256i test_mm256_maskz_gf2p8affine_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {145 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8affine_epi64_epi8146 // AVX512BW: @llvm.x86.vgf2p8affineqb.256147 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}148 return _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);149}150 151__m512i test_mm512_mask_gf2p8mul_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {152 // AVX512BW-LABEL: @test_mm512_mask_gf2p8mul_epi8153 // AVX512BW: @llvm.x86.vgf2p8mulb.512154 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}155 return _mm512_mask_gf2p8mul_epi8(S, U, A, B);156}157 158__m512i test_mm512_maskz_gf2p8mul_epi8(__mmask64 U, __m512i A, __m512i B) {159 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8mul_epi8160 // AVX512BW: @llvm.x86.vgf2p8mulb.512161 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}162 return _mm512_maskz_gf2p8mul_epi8(U, A, B);163}164 165__m128i test_mm_mask_gf2p8mul_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {166 // AVX512BW-LABEL: @test_mm_mask_gf2p8mul_epi8167 // AVX512BW: @llvm.x86.vgf2p8mulb.128168 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}169 return _mm_mask_gf2p8mul_epi8(S, U, A, B);170}171 172__m128i test_mm_maskz_gf2p8mul_epi8(__mmask16 U, __m128i A, __m128i B) {173 // AVX512BW-LABEL: @test_mm_maskz_gf2p8mul_epi8174 // AVX512BW: @llvm.x86.vgf2p8mulb.128175 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}176 return _mm_maskz_gf2p8mul_epi8(U, A, B);177}178 179__m256i test_mm256_mask_gf2p8mul_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {180 // AVX512BW-LABEL: @test_mm256_mask_gf2p8mul_epi8181 // AVX512BW: @llvm.x86.vgf2p8mulb.256182 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}183 return _mm256_mask_gf2p8mul_epi8(S, U, A, B);184}185 186__m256i test_mm256_maskz_gf2p8mul_epi8(__mmask32 U, __m256i A, __m256i B) {187 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8mul_epi8188 // AVX512BW: @llvm.x86.vgf2p8mulb.256189 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}190 return _mm256_maskz_gf2p8mul_epi8(U, A, B);191}192#endif // __AVX512BW__193