Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions llvm/test/CodeGen/X86/pr162812.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
; 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 %xmm2, %xmm5
; SSE42-NEXT: movdqa %xmm0, %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm6
; SSE42-NEXT: psllw $2, %xmm6
; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
; SSE42-NEXT: pand %xmm7, %xmm6
; SSE42-NEXT: psrlw $2, %xmm5
; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [8224,8224,8224,8224,8224,8224,8224,8224]
; SSE42-NEXT: pand %xmm4, %xmm5
; SSE42-NEXT: paddb %xmm5, %xmm5
; SSE42-NEXT: movdqa %xmm5, %xmm0
; SSE42-NEXT: pblendvb %xmm0, %xmm6, %xmm2
; SSE42-NEXT: movdqa %xmm2, %xmm6
; SSE42-NEXT: paddb %xmm2, %xmm6
; SSE42-NEXT: paddb %xmm5, %xmm5
; SSE42-NEXT: movdqa %xmm5, %xmm0
; SSE42-NEXT: pblendvb %xmm0, %xmm6, %xmm2
; SSE42-NEXT: movdqa %xmm1, %xmm5
; SSE42-NEXT: psllw $2, %xmm5
; SSE42-NEXT: pand %xmm7, %xmm5
; SSE42-NEXT: psrlw $2, %xmm3
; SSE42-NEXT: pand %xmm3, %xmm4
; SSE42-NEXT: paddb %xmm4, %xmm4
; SSE42-NEXT: movdqa %xmm4, %xmm0
; SSE42-NEXT: pblendvb %xmm0, %xmm5, %xmm1
; SSE42-NEXT: movdqa %xmm1, %xmm3
; SSE42-NEXT: paddb %xmm1, %xmm3
; SSE42-NEXT: paddb %xmm4, %xmm4
; SSE42-NEXT: movdqa %xmm4, %xmm0
; SSE42-NEXT: pblendvb %xmm0, %xmm3, %xmm1
; SSE42-NEXT: movdqa %xmm2, %xmm0
; SSE42-NEXT: retq
;
; AVX2-LABEL: PR162812:
; AVX2: # %bb.0:
; AVX2-NEXT: vpsllw $2, %ymm0, %ymm2
; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %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: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm2
; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: PR162812:
; AVX512: # %bb.0:
; AVX512-NEXT: vpsllw $2, %ymm0, %ymm2
; AVX512-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm2, %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: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
; AVX512-NEXT: vpaddb %ymm0, %ymm0, %ymm2
; 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
}
Loading