[llvm] r330090 - [X86] Tests for unsigned saturation downconvert detection.
Artur Gainullin via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 14 13:10:17 PDT 2018
Author: arturgainullin
Date: Sat Apr 14 13:10:17 2018
New Revision: 330090
URL: http://llvm.org/viewvc/llvm-project?rev=330090&view=rev
Log:
[X86] Tests for unsigned saturation downconvert detection.
One more test for smax(smin(x, C2), C1) pattern.
Modified:
llvm/trunk/test/CodeGen/X86/avx512-trunc.ll
Modified: llvm/trunk/test/CodeGen/X86/avx512-trunc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc.ll?rev=330090&r1=330089&r2=330090&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/avx512-trunc.ll (original)
+++ llvm/trunk/test/CodeGen/X86/avx512-trunc.ll Sat Apr 14 13:10:17 2018
@@ -775,9 +775,8 @@ define <16 x i8> @usat_trunc_db_256(<8 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(
; 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
@@ -802,6 +801,35 @@ define void @smax_usat_trunc_wb_256_mem(
%x6 = trunc <16 x i16> %x5 to <16 x i8>
store <16 x i8> %x6, <16 x i8>* %res, align 1
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, <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>
+ %x2 = select <16 x i1> %x1, <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>
+ %x3 = icmp sgt <16 x i16> %x2, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
+ %x5 = select <16 x i1> %x3, <16 x i16> %x2, <16 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
+ %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) {
More information about the llvm-commits
mailing list