@@ -775,9 +775,8 @@ define <16 x i8> @usat_trunc_db_256(<8 x i32> %x) {
775
775
; %res = trunc %d
776
776
777
777
778
-
779
- define void @smax_usat_trunc_wb_256_mem (<16 x i16 > %i , <16 x i8 >* %res ) {
780
- ; KNL-LABEL: smax_usat_trunc_wb_256_mem:
778
+ define void @smax_usat_trunc_wb_256_mem1 (<16 x i16 > %i , <16 x i8 >* %res ) {
779
+ ; KNL-LABEL: smax_usat_trunc_wb_256_mem1:
781
780
; KNL: ## %bb.0:
782
781
; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1
783
782
; 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) {
787
786
; KNL-NEXT: vzeroupper
788
787
; KNL-NEXT: retq
789
788
;
790
- ; SKX-LABEL: smax_usat_trunc_wb_256_mem :
789
+ ; SKX-LABEL: smax_usat_trunc_wb_256_mem1 :
791
790
; SKX: ## %bb.0:
792
791
; SKX-NEXT: vpxor %xmm1, %xmm1, %xmm1
793
792
; 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) {
804
803
ret void
805
804
}
806
805
806
+ ; Test for smax(smin(x, C2), C1).
807
+ define void @smax_usat_trunc_wb_256_mem2 (<16 x i16 > %i , <16 x i8 >* %res ) {
808
+ ; KNL-LABEL: smax_usat_trunc_wb_256_mem2:
809
+ ; KNL: ## %bb.0:
810
+ ; KNL-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
811
+ ; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1
812
+ ; KNL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
813
+ ; KNL-NEXT: vpmovsxwd %ymm0, %zmm0
814
+ ; KNL-NEXT: vpmovdb %zmm0, (%rdi)
815
+ ; KNL-NEXT: vzeroupper
816
+ ; KNL-NEXT: retq
817
+ ;
818
+ ; SKX-LABEL: smax_usat_trunc_wb_256_mem2:
819
+ ; SKX: ## %bb.0:
820
+ ; SKX-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
821
+ ; SKX-NEXT: vpxor %xmm1, %xmm1, %xmm1
822
+ ; SKX-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
823
+ ; SKX-NEXT: vpmovwb %ymm0, (%rdi)
824
+ ; SKX-NEXT: vzeroupper
825
+ ; SKX-NEXT: retq
826
+ %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 >
827
+ %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 >
828
+ %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 >
829
+ %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 >
830
+ %x6 = trunc <16 x i16 > %x5 to <16 x i8 >
831
+ store <16 x i8 > %x6 , <16 x i8 >* %res , align 1
832
+ ret void
833
+ }
834
+
807
835
define <16 x i8 > @smax_usat_trunc_wb_256 (<16 x i16 > %i ) {
808
836
; KNL-LABEL: smax_usat_trunc_wb_256:
809
837
; KNL: ## %bb.0:
0 commit comments