Regenerate PACKUS/TRUNCS test (PR31773)

llvm-svn: 317096
This commit is contained in:
Simon Pilgrim 2017-11-01 15:27:23 +00:00
parent 333739d0e2
commit 2b09f39b4d
1 changed files with 41 additions and 6 deletions

View File

@ -1,18 +1,53 @@
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=CHECK --check-prefix=AVX
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512
; This matter of this test is ensuring that vpackus* is not used for umin+trunc combination, since vpackus* input is a signed number. ; This matter of this test is ensuring that vpackus* is not used for umin+trunc combination, since vpackus* input is a signed number.
define <16 x i8> @usat_trunc_wb_256(<16 x i16> %i) { define <16 x i8> @usat_trunc_wb_256(<16 x i16> %i) {
; CHECK-LABEL: usat_trunc_wb_256: ; AVX-LABEL: usat_trunc_wb_256:
; CHECK-NOT: vpackuswb %xmm1, %xmm0, %xmm0 ; AVX: # BB#0:
; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm2
; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
; AVX-NEXT: vpshufb %xmm1, %xmm0, %xmm0
; AVX-NEXT: vpshufb %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
; AVX-NEXT: vzeroupper
; AVX-NEXT: retq
;
; AVX512-LABEL: usat_trunc_wb_256:
; AVX512: # BB#0:
; AVX512-NEXT: vpmovuswb %ymm0, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x3 = icmp ult <16 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> %x3 = icmp ult <16 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
%x5 = select <16 x i1> %x3, <16 x i16> %i, <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255> %x5 = select <16 x i1> %x3, <16 x i16> %i, <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
%x6 = trunc <16 x i16> %x5 to <16 x i8> %x6 = trunc <16 x i16> %x5 to <16 x i8>
ret <16 x i8> %x6 ret <16 x i8> %x6
} }
define <8 x i16> @usat_trunc_dw_256(<8 x i32> %i) { define <8 x i16> @usat_trunc_dw_256(<8 x i32> %i) {
; CHECK-LABEL: usat_trunc_dw_256: ; AVX-LABEL: usat_trunc_dw_256:
; CHECK-NOT: vpackusdw %xmm1, %xmm0, %xmm0 ; AVX: # BB#0:
; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]
; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm2
; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
; AVX-NEXT: vpshufb %xmm1, %xmm0, %xmm0
; AVX-NEXT: vpshufb %xmm1, %xmm2, %xmm1
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
; AVX-NEXT: vzeroupper
; AVX-NEXT: retq
;
; AVX512-LABEL: usat_trunc_dw_256:
; AVX512: # BB#0:
; AVX512-NEXT: vpmovusdw %ymm0, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x3 = icmp ult <8 x i32> %i, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> %x3 = icmp ult <8 x i32> %i, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
%x5 = select <8 x i1> %x3, <8 x i32> %i, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535> %x5 = select <8 x i1> %x3, <8 x i32> %i, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
%x6 = trunc <8 x i32> %x5 to <8 x i16> %x6 = trunc <8 x i32> %x5 to <8 x i16>