@@ -500,3 +500,110 @@ define void @trunc_wb_128_mem(<8 x i16> %i, <8 x i8>* %res) #0 {
500
500
store <8 x i8 > %x , <8 x i8 >* %res
501
501
ret void
502
502
}
503
+
504
+
505
+ define void @usat_trunc_wb_256_mem (<16 x i16 > %i , <16 x i8 >* %res ) {
506
+ ; KNL-LABEL: usat_trunc_wb_256_mem:
507
+ ; KNL: ## BB#0:
508
+ ; KNL-NEXT: vpminuw {{.*}}(%rip), %ymm0, %ymm0
509
+ ; KNL-NEXT: vpmovsxwd %ymm0, %zmm0
510
+ ; KNL-NEXT: vpmovdb %zmm0, %xmm0
511
+ ; KNL-NEXT: vmovdqu %xmm0, (%rdi)
512
+ ; KNL-NEXT: retq
513
+ ;
514
+ ; SKX-LABEL: usat_trunc_wb_256_mem:
515
+ ; SKX: ## BB#0:
516
+ ; SKX-NEXT: vpmovuswb %ymm0, (%rdi)
517
+ ; SKX-NEXT: retq
518
+ %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 >
519
+ %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 >
520
+ %x6 = trunc <16 x i16 > %x5 to <16 x i8 >
521
+ store <16 x i8 > %x6 , <16 x i8 >* %res , align 1
522
+ ret void
523
+ }
524
+
525
+ define <16 x i8 > @usat_trunc_wb_256 (<16 x i16 > %i ) {
526
+ ; KNL-LABEL: usat_trunc_wb_256:
527
+ ; KNL: ## BB#0:
528
+ ; KNL-NEXT: vpminuw {{.*}}(%rip), %ymm0, %ymm0
529
+ ; KNL-NEXT: vpmovsxwd %ymm0, %zmm0
530
+ ; KNL-NEXT: vpmovdb %zmm0, %xmm0
531
+ ; KNL-NEXT: retq
532
+ ;
533
+ ; SKX-LABEL: usat_trunc_wb_256:
534
+ ; SKX: ## BB#0:
535
+ ; SKX-NEXT: vpmovuswb %ymm0, %xmm0
536
+ ; SKX-NEXT: retq
537
+ %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 >
538
+ %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 >
539
+ %x6 = trunc <16 x i16 > %x5 to <16 x i8 >
540
+ ret <16 x i8 > %x6
541
+ }
542
+
543
+ define void @usat_trunc_wb_128_mem (<8 x i16 > %i , <8 x i8 >* %res ) {
544
+ ; KNL-LABEL: usat_trunc_wb_128_mem:
545
+ ; KNL: ## BB#0:
546
+ ; KNL-NEXT: vpminuw {{.*}}(%rip), %xmm0, %xmm0
547
+ ; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
548
+ ; KNL-NEXT: vmovq %xmm0, (%rdi)
549
+ ; KNL-NEXT: retq
550
+ ;
551
+ ; SKX-LABEL: usat_trunc_wb_128_mem:
552
+ ; SKX: ## BB#0:
553
+ ; SKX-NEXT: vpmovuswb %xmm0, (%rdi)
554
+ ; SKX-NEXT: retq
555
+ %x3 = icmp ult <8 x i16 > %i , <i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 >
556
+ %x5 = select <8 x i1 > %x3 , <8 x i16 > %i , <8 x i16 > <i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 , i16 255 >
557
+ %x6 = trunc <8 x i16 > %x5 to <8 x i8 >
558
+ store <8 x i8 > %x6 , <8 x i8 >* %res , align 1
559
+ ret void
560
+ }
561
+
562
+ define void @usat_trunc_db_512_mem (<16 x i32 > %i , <16 x i8 >* %res ) {
563
+ ; ALL-LABEL: usat_trunc_db_512_mem:
564
+ ; ALL: ## BB#0:
565
+ ; ALL-NEXT: vpmovusdb %zmm0, (%rdi)
566
+ ; ALL-NEXT: retq
567
+ %x3 = icmp ult <16 x i32 > %i , <i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 >
568
+ %x5 = select <16 x i1 > %x3 , <16 x i32 > %i , <16 x i32 > <i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 , i32 255 >
569
+ %x6 = trunc <16 x i32 > %x5 to <16 x i8 >
570
+ store <16 x i8 > %x6 , <16 x i8 >* %res , align 1
571
+ ret void
572
+ }
573
+
574
+ define void @usat_trunc_qb_512_mem (<8 x i64 > %i , <8 x i8 >* %res ) {
575
+ ; ALL-LABEL: usat_trunc_qb_512_mem:
576
+ ; ALL: ## BB#0:
577
+ ; ALL-NEXT: vpmovusqb %zmm0, (%rdi)
578
+ ; ALL-NEXT: retq
579
+ %x3 = icmp ult <8 x i64 > %i , <i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 >
580
+ %x5 = select <8 x i1 > %x3 , <8 x i64 > %i , <8 x i64 > <i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 , i64 255 >
581
+ %x6 = trunc <8 x i64 > %x5 to <8 x i8 >
582
+ store <8 x i8 > %x6 , <8 x i8 >* %res , align 1
583
+ ret void
584
+ }
585
+
586
+ define void @usat_trunc_qd_512_mem (<8 x i64 > %i , <8 x i32 >* %res ) {
587
+ ; ALL-LABEL: usat_trunc_qd_512_mem:
588
+ ; ALL: ## BB#0:
589
+ ; ALL-NEXT: vpmovusqd %zmm0, (%rdi)
590
+ ; ALL-NEXT: retq
591
+ %x3 = icmp ult <8 x i64 > %i , <i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 >
592
+ %x5 = select <8 x i1 > %x3 , <8 x i64 > %i , <8 x i64 > <i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 , i64 4294967295 >
593
+ %x6 = trunc <8 x i64 > %x5 to <8 x i32 >
594
+ store <8 x i32 > %x6 , <8 x i32 >* %res , align 1
595
+ ret void
596
+ }
597
+
598
+ define void @usat_trunc_qw_512_mem (<8 x i64 > %i , <8 x i16 >* %res ) {
599
+ ; ALL-LABEL: usat_trunc_qw_512_mem:
600
+ ; ALL: ## BB#0:
601
+ ; ALL-NEXT: vpmovusqw %zmm0, (%rdi)
602
+ ; ALL-NEXT: retq
603
+ %x3 = icmp ult <8 x i64 > %i , <i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 >
604
+ %x5 = select <8 x i1 > %x3 , <8 x i64 > %i , <8 x i64 > <i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 , i64 65535 >
605
+ %x6 = trunc <8 x i64 > %x5 to <8 x i16 >
606
+ store <8 x i16 > %x6 , <8 x i16 >* %res , align 1
607
+ ret void
608
+ }
609
+
0 commit comments