@@ -80,3 +80,33 @@ define <16 x i8> @combine_pavgw_knownbits(<8 x i16> %a0, <8 x i16> %a1, <8 x i16
80
80
%trunc = trunc <16 x i16 > %shuffle to <16 x i8 >
81
81
ret <16 x i8 > %trunc
82
82
}
83
+
84
+ define <8 x i16 > @combine_pavgw_demandedelts (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
85
+ ; SSE-LABEL: combine_pavgw_demandedelts:
86
+ ; SSE: # %bb.0:
87
+ ; SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
88
+ ; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,12,13,12,13]
89
+ ; SSE-NEXT: pavgw %xmm1, %xmm0
90
+ ; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
91
+ ; SSE-NEXT: retq
92
+ ;
93
+ ; AVX1-LABEL: combine_pavgw_demandedelts:
94
+ ; AVX1: # %bb.0:
95
+ ; AVX1-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
96
+ ; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,12,13,12,13]
97
+ ; AVX1-NEXT: vpavgw %xmm1, %xmm0, %xmm0
98
+ ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
99
+ ; AVX1-NEXT: retq
100
+ ;
101
+ ; AVX2-LABEL: combine_pavgw_demandedelts:
102
+ ; AVX2: # %bb.0:
103
+ ; AVX2-NEXT: vpbroadcastw %xmm1, %xmm1
104
+ ; AVX2-NEXT: vpbroadcastw %xmm0, %xmm0
105
+ ; AVX2-NEXT: vpavgw %xmm1, %xmm0, %xmm0
106
+ ; AVX2-NEXT: retq
107
+ %s0 = shufflevector <8 x i16 > %a0 , <8 x i16 > poison, <8 x i32 > <i32 0 , i32 0 , i32 2 , i32 2 , i32 4 , i32 4 , i32 6 , i32 6 >
108
+ %avg = tail call <8 x i16 > @llvm.x86.sse2.pavg.w (<8 x i16 > %s0 , <8 x i16 > %a1 )
109
+ %shuffle = shufflevector <8 x i16 > %avg , <8 x i16 > poison, <8 x i32 > zeroinitializer
110
+ ret <8 x i16 > %shuffle
111
+ }
112
+
0 commit comments