From 93a17ddc3d334a3a9f71f3be9f285163ac032f7c Mon Sep 17 00:00:00 2001 From: Artur Gainullin Date: Sat, 14 Apr 2018 20:10:17 +0000 Subject: [PATCH] [X86] Tests for unsigned saturation downconvert detection. One more test for smax(smin(x, C2), C1) pattern. llvm-svn: 330090 --- test/CodeGen/X86/avx512-trunc.ll | 36 ++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/test/CodeGen/X86/avx512-trunc.ll b/test/CodeGen/X86/avx512-trunc.ll index c633c5e718a..8bd29e14809 100644 --- a/test/CodeGen/X86/avx512-trunc.ll +++ b/test/CodeGen/X86/avx512-trunc.ll @@ -775,9 +775,8 @@ define <16 x i8> @usat_trunc_db_256(<8 x i32> %x) { ; %res = trunc %d - -define void @smax_usat_trunc_wb_256_mem(<16 x i16> %i, <16 x i8>* %res) { -; KNL-LABEL: smax_usat_trunc_wb_256_mem: +define void @smax_usat_trunc_wb_256_mem1(<16 x i16> %i, <16 x i8>* %res) { +; KNL-LABEL: smax_usat_trunc_wb_256_mem1: ; KNL: ## %bb.0: ; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; KNL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 @@ -787,7 +786,7 @@ define void @smax_usat_trunc_wb_256_mem(<16 x i16> %i, <16 x i8>* %res) { ; KNL-NEXT: vzeroupper ; KNL-NEXT: retq ; -; SKX-LABEL: smax_usat_trunc_wb_256_mem: +; SKX-LABEL: smax_usat_trunc_wb_256_mem1: ; SKX: ## %bb.0: ; SKX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; SKX-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 @@ -804,6 +803,35 @@ define void @smax_usat_trunc_wb_256_mem(<16 x i16> %i, <16 x i8>* %res) { ret void } +; Test for smax(smin(x, C2), C1). +define void @smax_usat_trunc_wb_256_mem2(<16 x i16> %i, <16 x i8>* %res) { +; KNL-LABEL: smax_usat_trunc_wb_256_mem2: +; KNL: ## %bb.0: +; KNL-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 +; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; KNL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 +; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 +; KNL-NEXT: vpmovdb %zmm0, (%rdi) +; KNL-NEXT: vzeroupper +; KNL-NEXT: retq +; +; SKX-LABEL: smax_usat_trunc_wb_256_mem2: +; SKX: ## %bb.0: +; SKX-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 +; SKX-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; SKX-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 +; SKX-NEXT: vpmovwb %ymm0, (%rdi) +; SKX-NEXT: vzeroupper +; SKX-NEXT: retq + %x1 = icmp slt <16 x i16> %i, + %x2 = select <16 x i1> %x1, <16 x i16> %i, <16 x i16> + %x3 = icmp sgt <16 x i16> %x2, + %x5 = select <16 x i1> %x3, <16 x i16> %x2, <16 x i16> + %x6 = trunc <16 x i16> %x5 to <16 x i8> + store <16 x i8> %x6, <16 x i8>* %res, align 1 + ret void +} + define <16 x i8> @smax_usat_trunc_wb_256(<16 x i16> %i) { ; KNL-LABEL: smax_usat_trunc_wb_256: ; KNL: ## %bb.0: