@@ -728,53 +728,77 @@ define void @avg_v32i8_2(ptr %a, ptr %b) nounwind {
728728define  void  @avg_v64i8_2 (ptr  %a , ptr  %b ) nounwind  {
729729; SSE2-LABEL: avg_v64i8_2: 
730730; SSE2: # %bb.0: 
731- ; SSE2-NEXT: movaps (%rsi), %xmm0 
732- ; SSE2-NEXT: movaps 16(%rsi), %xmm1 
733- ; SSE2-NEXT: movaps 32(%rsi), %xmm2 
734- ; SSE2-NEXT: movaps 48(%rsi), %xmm3 
735- ; SSE2-NEXT: movups %xmm3, (%rax) 
736- ; SSE2-NEXT: movups %xmm2, (%rax) 
737- ; SSE2-NEXT: movups %xmm1, (%rax) 
738- ; SSE2-NEXT: movups %xmm0, (%rax) 
731+ ; SSE2-NEXT: movdqa (%rdi), %xmm0 
732+ ; SSE2-NEXT: movdqa 16(%rdi), %xmm1 
733+ ; SSE2-NEXT: movdqa 32(%rdi), %xmm2 
734+ ; SSE2-NEXT: movdqa 48(%rdi), %xmm3 
735+ ; SSE2-NEXT: pavgb (%rsi), %xmm0 
736+ ; SSE2-NEXT: pavgb 16(%rsi), %xmm1 
737+ ; SSE2-NEXT: pavgb 32(%rsi), %xmm2 
738+ ; SSE2-NEXT: pavgb 48(%rsi), %xmm3 
739+ ; SSE2-NEXT: movdqu %xmm3, (%rax) 
740+ ; SSE2-NEXT: movdqu %xmm2, (%rax) 
741+ ; SSE2-NEXT: movdqu %xmm1, (%rax) 
742+ ; SSE2-NEXT: movdqu %xmm0, (%rax) 
739743; SSE2-NEXT: retq 
740744; 
741745; AVX1-LABEL: avg_v64i8_2: 
742746; AVX1: # %bb.0: 
743- ; AVX1-NEXT: vmovaps (%rsi), %ymm0 
744- ; AVX1-NEXT: vmovaps 32(%rsi), %ymm1 
745- ; AVX1-NEXT: vmovups %ymm1, (%rax) 
746- ; AVX1-NEXT: vmovups %ymm0, (%rax) 
747- ; AVX1-NEXT: vzeroupper 
747+ ; AVX1-NEXT: vmovdqa (%rdi), %xmm0 
748+ ; AVX1-NEXT: vmovdqa 16(%rdi), %xmm1 
749+ ; AVX1-NEXT: vmovdqa 32(%rdi), %xmm2 
750+ ; AVX1-NEXT: vmovdqa 48(%rdi), %xmm3 
751+ ; AVX1-NEXT: vpavgb (%rsi), %xmm0, %xmm0 
752+ ; AVX1-NEXT: vpavgb 16(%rsi), %xmm1, %xmm1 
753+ ; AVX1-NEXT: vpavgb 32(%rsi), %xmm2, %xmm2 
754+ ; AVX1-NEXT: vpavgb 48(%rsi), %xmm3, %xmm3 
755+ ; AVX1-NEXT: vmovdqu %xmm3, (%rax) 
756+ ; AVX1-NEXT: vmovdqu %xmm2, (%rax) 
757+ ; AVX1-NEXT: vmovdqu %xmm1, (%rax) 
758+ ; AVX1-NEXT: vmovdqu %xmm0, (%rax) 
748759; AVX1-NEXT: retq 
749760; 
750761; AVX2-LABEL: avg_v64i8_2: 
751762; AVX2: # %bb.0: 
752- ; AVX2-NEXT: vmovaps (%rsi), %ymm0 
753- ; AVX2-NEXT: vmovaps 32(%rsi), %ymm1 
754- ; AVX2-NEXT: vmovups %ymm1, (%rax) 
755- ; AVX2-NEXT: vmovups %ymm0, (%rax) 
763+ ; AVX2-NEXT: vmovdqa (%rdi), %ymm0 
764+ ; AVX2-NEXT: vmovdqa 32(%rdi), %ymm1 
765+ ; AVX2-NEXT: vpavgb (%rsi), %ymm0, %ymm0 
766+ ; AVX2-NEXT: vpavgb 32(%rsi), %ymm1, %ymm1 
767+ ; AVX2-NEXT: vmovdqu %ymm1, (%rax) 
768+ ; AVX2-NEXT: vmovdqu %ymm0, (%rax) 
756769; AVX2-NEXT: vzeroupper 
757770; AVX2-NEXT: retq 
758771; 
759- ; AVX512-LABEL: avg_v64i8_2: 
760- ; AVX512: # %bb.0: 
761- ; AVX512-NEXT: vmovaps (%rsi), %zmm0 
762- ; AVX512-NEXT: vmovups %zmm0, (%rax) 
763- ; AVX512-NEXT: vzeroupper 
764- ; AVX512-NEXT: retq 
772+ ; AVX512F-LABEL: avg_v64i8_2: 
773+ ; AVX512F: # %bb.0: 
774+ ; AVX512F-NEXT: vmovdqa (%rdi), %ymm0 
775+ ; AVX512F-NEXT: vmovdqa 32(%rdi), %ymm1 
776+ ; AVX512F-NEXT: vpavgb (%rsi), %ymm0, %ymm0 
777+ ; AVX512F-NEXT: vpavgb 32(%rsi), %ymm1, %ymm1 
778+ ; AVX512F-NEXT: vmovdqu %ymm1, (%rax) 
779+ ; AVX512F-NEXT: vmovdqu %ymm0, (%rax) 
780+ ; AVX512F-NEXT: vzeroupper 
781+ ; AVX512F-NEXT: retq 
782+ ; 
783+ ; AVX512BW-LABEL: avg_v64i8_2: 
784+ ; AVX512BW: # %bb.0: 
785+ ; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm0 
786+ ; AVX512BW-NEXT: vpavgb (%rsi), %zmm0, %zmm0 
787+ ; AVX512BW-NEXT: vmovdqu64 %zmm0, (%rax) 
788+ ; AVX512BW-NEXT: vzeroupper 
789+ ; AVX512BW-NEXT: retq 
765790 %1  = load  <64  x i8 >, ptr  %a 
766791 %2  = load  <64  x i8 >, ptr  %b 
767792 %3  = zext  <64  x i8 > %1  to  <64  x i32 >
768793 %4  = zext  <64  x i8 > %2  to  <64  x i32 >
769-  %5  = add  nuw  nsw  <64  x i32 > %4  , %4 
794+  %5  = add  nuw  nsw  <64  x i32 > %3  , %4 
770795 %6  = add  nuw  nsw  <64  x i32 > %5 , <i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 >
771796 %7  = lshr  <64  x i32 > %6 , <i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 , i32  1 >
772797 %8  = trunc  <64  x i32 > %7  to  <64  x i8 >
773798 store  <64  x i8 > %8 , ptr  undef , align  4 
774799 ret  void 
775800}
776801
777- 
778802define  void  @avg_v4i16_2 (ptr  %a , ptr  %b ) nounwind  {
779803; SSE2-LABEL: avg_v4i16_2: 
780804; SSE2: # %bb.0: 
0 commit comments