102 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+gfni | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -mtriple=x86_64-- -mattr=+gfni,+avx | FileCheck %s --check-prefixes=AVX4; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+gfni,+avx512bw | FileCheck %s --check-prefixes=AVX5125 6define <16 x i8> @gf2p8affineqb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {7; SSE-LABEL: gf2p8affineqb_freeze:8; SSE: # %bb.0:9; SSE-NEXT: pxor %xmm3, %xmm310; SSE-NEXT: pcmpgtb %xmm2, %xmm311; SSE-NEXT: gf2p8affineqb $11, %xmm1, %xmm112; SSE-NEXT: pand %xmm3, %xmm113; SSE-NEXT: pandn %xmm0, %xmm314; SSE-NEXT: por %xmm1, %xmm315; SSE-NEXT: movdqa %xmm3, %xmm016; SSE-NEXT: retq17;18; AVX-LABEL: gf2p8affineqb_freeze:19; AVX: # %bb.0:20; AVX-NEXT: vgf2p8affineqb $11, %xmm1, %xmm1, %xmm121; AVX-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm022; AVX-NEXT: retq23;24; AVX512-LABEL: gf2p8affineqb_freeze:25; AVX512: # %bb.0:26; AVX512-NEXT: vpmovb2m %xmm2, %k127; AVX512-NEXT: vgf2p8affineqb $11, %xmm1, %xmm1, %xmm0 {%k1}28; AVX512-NEXT: retq29 %i = icmp slt <16 x i8> %a2, zeroinitializer30 %g = call <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8> %a1, <16 x i8> %a1, i8 11)31 %f = freeze <16 x i8> %g32 %r = select <16 x i1> %i, <16 x i8> %f, <16 x i8> %a033 ret <16 x i8> %r34}35 36define <16 x i8> @gf2p8affineinvqb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {37; SSE-LABEL: gf2p8affineinvqb_freeze:38; SSE: # %bb.0:39; SSE-NEXT: pxor %xmm3, %xmm340; SSE-NEXT: pcmpgtb %xmm2, %xmm341; SSE-NEXT: gf2p8affineinvqb $11, %xmm1, %xmm142; SSE-NEXT: pand %xmm3, %xmm143; SSE-NEXT: pandn %xmm0, %xmm344; SSE-NEXT: por %xmm1, %xmm345; SSE-NEXT: movdqa %xmm3, %xmm046; SSE-NEXT: retq47;48; AVX-LABEL: gf2p8affineinvqb_freeze:49; AVX: # %bb.0:50; AVX-NEXT: vgf2p8affineinvqb $11, %xmm1, %xmm1, %xmm151; AVX-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm052; AVX-NEXT: retq53;54; AVX512-LABEL: gf2p8affineinvqb_freeze:55; AVX512: # %bb.0:56; AVX512-NEXT: vpmovb2m %xmm2, %k157; AVX512-NEXT: vgf2p8affineinvqb $11, %xmm1, %xmm1, %xmm0 {%k1}58; AVX512-NEXT: retq59 %i = icmp slt <16 x i8> %a2, zeroinitializer60 %g = call <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8> %a1, <16 x i8> %a1, i8 11)61 %f = freeze <16 x i8> %g62 %r = select <16 x i1> %i, <16 x i8> %f, <16 x i8> %a063 ret <16 x i8> %r64}65 66define <16 x i8> @gf2p8mulb_freeze(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {67; SSE-LABEL: gf2p8mulb_freeze:68; SSE: # %bb.0:69; SSE-NEXT: pxor %xmm3, %xmm370; SSE-NEXT: pcmpgtb %xmm2, %xmm371; SSE-NEXT: gf2p8mulb %xmm1, %xmm172; SSE-NEXT: pand %xmm3, %xmm173; SSE-NEXT: pandn %xmm0, %xmm374; SSE-NEXT: por %xmm1, %xmm375; SSE-NEXT: movdqa %xmm3, %xmm076; SSE-NEXT: retq77;78; AVX-LABEL: gf2p8mulb_freeze:79; AVX: # %bb.0:80; AVX-NEXT: vgf2p8mulb %xmm1, %xmm1, %xmm181; AVX-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm082; AVX-NEXT: retq83;84; AVX512-LABEL: gf2p8mulb_freeze:85; AVX512: # %bb.0:86; AVX512-NEXT: vpmovb2m %xmm2, %k187; AVX512-NEXT: vgf2p8mulb %xmm1, %xmm1, %xmm0 {%k1}88; AVX512-NEXT: retq89 %i = icmp slt <16 x i8> %a2, zeroinitializer90 %g = call <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8> %a1, <16 x i8> %a1)91 %f = freeze <16 x i8> %g92 %r = select <16 x i1> %i, <16 x i8> %f, <16 x i8> %a093 ret <16 x i8> %r94}95 96declare <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8>, <16 x i8>, i8)97declare <32 x i8> @llvm.x86.vgf2p8affineqb.256(<32 x i8>, <32 x i8>, i8)98declare <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8>, <16 x i8>, i8)99declare <32 x i8> @llvm.x86.vgf2p8affineinvqb.256(<32 x i8>, <32 x i8>, i8)100declare <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8>, <16 x i8>)101declare <32 x i8> @llvm.x86.vgf2p8mulb.256(<32 x i8>, <32 x i8>)102