blob: 28f313bf6a0fa5971438863b863992c4e4bd1caa [file] [log] [blame] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=x86_64-unknown-unknown -O2 -mcpu=skylake-avx512 < %s -o - | FileCheck %s --check-prefixes=X64
define <16 x i8> @interleave_masked_select(ptr %mask, ptr %src) nounwind {
; X64-LABEL: interleave_masked_select:
; X64: # %bb.0:
; X64-NEXT: kmovw (%rdi), %k1
; X64-NEXT: vpxor %xmm0, %xmm0, %xmm0
; X64-NEXT: vpunpcklbw {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]
; X64-NEXT: retq
%mask_vec = load <16 x i1>, ptr %mask
%vec2 = load <16 x i8>, ptr %src
%selected = select <16 x i1> %mask_vec, <16 x i8> %vec2, <16 x i8> splat (i8 1)
%interleaved = shufflevector <16 x i8> zeroinitializer, <16 x i8> %selected, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
%masked = select <16 x i1> %mask_vec, <16 x i8> %interleaved, <16 x i8> zeroinitializer
ret <16 x i8> %masked
}
define <16 x i1> @interleave_masked_blend(i16 %mask, ptr %src1, ptr %src2) nounwind {
; X64-LABEL: interleave_masked_blend:
; X64: # %bb.0:
; X64-NEXT: vmovdqa (%rsi), %xmm0
; X64-NEXT: kmovd %edi, %k1
; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
; X64-NEXT: vpunpcklbw {{.*#+}} xmm2 {%k1} {z} = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3],xmm1[4],mem[4],xmm1[5],mem[5],xmm1[6],mem[6],xmm1[7],mem[7]
; X64-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
; X64-NEXT: vpcmpeqb %xmm0, %xmm2, %xmm0
; X64-NEXT: retq
%mask_vec = bitcast i16 %mask to <16 x i1>
%vec1 = load <16 x i8>, ptr %src1
%vec2 = load <16 x i8>, ptr %src2
%blended = select <16 x i1> %mask_vec, <16 x i8> %vec2, <16 x i8> %vec1
%interleaved1 = shufflevector <16 x i8> zeroinitializer, <16 x i8> %blended, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
%masked = select <16 x i1> %mask_vec, <16 x i8> %interleaved1, <16 x i8> zeroinitializer
%interleaved2 = shufflevector <16 x i8> zeroinitializer, <16 x i8> %vec1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
%cmp = icmp eq <16 x i8> %masked, %interleaved2
ret <16 x i1> %cmp
}