; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64    | FileCheck %s --check-prefixes=SSE2
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=SSE42
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=AVX2
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX512

define <32 x i8> @PR162812(<32 x i8> %a, <32 x i8> %mask) {
; SSE2-LABEL: PR162812:
; SSE2:       # %bb.0:
; SSE2-NEXT:    psrlw $2, %xmm2
; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [8224,8224,8224,8224,8224,8224,8224,8224]
; SSE2-NEXT:    pand %xmm4, %xmm2
; SSE2-NEXT:    paddb %xmm2, %xmm2
; SSE2-NEXT:    paddb %xmm2, %xmm2
; SSE2-NEXT:    pxor %xmm5, %xmm5
; SSE2-NEXT:    pxor %xmm6, %xmm6
; SSE2-NEXT:    pcmpgtb %xmm2, %xmm6
; SSE2-NEXT:    movdqa %xmm6, %xmm2
; SSE2-NEXT:    pandn %xmm0, %xmm2
; SSE2-NEXT:    paddb %xmm0, %xmm0
; SSE2-NEXT:    pand %xmm6, %xmm0
; SSE2-NEXT:    por %xmm2, %xmm0
; SSE2-NEXT:    psrlw $2, %xmm3
; SSE2-NEXT:    pand %xmm4, %xmm3
; SSE2-NEXT:    paddb %xmm3, %xmm3
; SSE2-NEXT:    paddb %xmm3, %xmm3
; SSE2-NEXT:    pcmpgtb %xmm3, %xmm5
; SSE2-NEXT:    movdqa %xmm5, %xmm2
; SSE2-NEXT:    pandn %xmm1, %xmm2
; SSE2-NEXT:    paddb %xmm1, %xmm1
; SSE2-NEXT:    pand %xmm5, %xmm1
; SSE2-NEXT:    por %xmm2, %xmm1
; SSE2-NEXT:    retq
;
; SSE42-LABEL: PR162812:
; SSE42:       # %bb.0:
; SSE42-NEXT:    movdqa %xmm0, %xmm4
; SSE42-NEXT:    psrlw $2, %xmm2
; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = [8224,8224,8224,8224,8224,8224,8224,8224]
; SSE42-NEXT:    pand %xmm5, %xmm2
; SSE42-NEXT:    paddb %xmm2, %xmm2
; SSE42-NEXT:    paddb %xmm2, %xmm2
; SSE42-NEXT:    movdqa %xmm0, %xmm6
; SSE42-NEXT:    paddb %xmm0, %xmm6
; SSE42-NEXT:    movdqa %xmm2, %xmm0
; SSE42-NEXT:    pblendvb %xmm0, %xmm6, %xmm4
; SSE42-NEXT:    psrlw $2, %xmm3
; SSE42-NEXT:    pand %xmm3, %xmm5
; SSE42-NEXT:    paddb %xmm5, %xmm5
; SSE42-NEXT:    paddb %xmm5, %xmm5
; SSE42-NEXT:    movdqa %xmm1, %xmm2
; SSE42-NEXT:    paddb %xmm1, %xmm2
; SSE42-NEXT:    movdqa %xmm5, %xmm0
; SSE42-NEXT:    pblendvb %xmm0, %xmm2, %xmm1
; SSE42-NEXT:    movdqa %xmm4, %xmm0
; SSE42-NEXT:    retq
;
; AVX2-LABEL: PR162812:
; AVX2:       # %bb.0:
; AVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm2
; AVX2-NEXT:    vpsrlw $2, %ymm1, %ymm1
; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
; AVX2-NEXT:    retq
;
; AVX512-LABEL: PR162812:
; AVX512:       # %bb.0:
; AVX512-NEXT:    vpaddb %ymm0, %ymm0, %ymm2
; AVX512-NEXT:    vpsrlw $2, %ymm1, %ymm1
; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm1
; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
; AVX512-NEXT:    retq
  %1 = lshr <32 x i8> %mask, splat (i8 7)
  %ret = shl <32 x i8> %a, %1
  ret <32 x i8> %ret
}
