@@ -160,6 +160,53 @@ define <16 x i8> @demandedelts_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8>
160
160
ret <16 x i8 > %5
161
161
}
162
162
163
+ define <4 x float > @demandedbits_sitofp_blendvps (<4 x float > %a0 , <4 x float > %a1 , <4 x i32 > %a2 ) {
164
+ ; SSE-LABEL: demandedbits_sitofp_blendvps:
165
+ ; SSE: # %bb.0:
166
+ ; SSE-NEXT: movaps %xmm0, %xmm3
167
+ ; SSE-NEXT: cvtdq2ps %xmm2, %xmm0
168
+ ; SSE-NEXT: blendvps %xmm0, %xmm1, %xmm3
169
+ ; SSE-NEXT: movaps %xmm3, %xmm0
170
+ ; SSE-NEXT: retq
171
+ ;
172
+ ; AVX-LABEL: demandedbits_sitofp_blendvps:
173
+ ; AVX: # %bb.0:
174
+ ; AVX-NEXT: vcvtdq2ps %xmm2, %xmm2
175
+ ; AVX-NEXT: vblendvps %xmm2, %xmm1, %xmm0, %xmm0
176
+ ; AVX-NEXT: retq
177
+ %cvt = sitofp <4 x i32 > %a2 to <4 x float >
178
+ %sel = tail call noundef <4 x float > @llvm.x86.sse41.blendvps (<4 x float > %a0 , <4 x float > %a1 , <4 x float > %cvt )
179
+ ret <4 x float > %sel
180
+ }
181
+
182
+ define <4 x float > @demandedbits_uitofp_blendvps (<4 x float > %a0 , <4 x float > %a1 , <4 x i32 > %a2 ) {
183
+ ; SSE-LABEL: demandedbits_uitofp_blendvps:
184
+ ; SSE: # %bb.0:
185
+ ; SSE-NEXT: movaps %xmm0, %xmm3
186
+ ; SSE-NEXT: movdqa {{.*#+}} xmm0 = [1258291200,1258291200,1258291200,1258291200]
187
+ ; SSE-NEXT: pblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1],xmm2[2],xmm0[3],xmm2[4],xmm0[5],xmm2[6],xmm0[7]
188
+ ; SSE-NEXT: psrld $16, %xmm2
189
+ ; SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],mem[1],xmm2[2],mem[3],xmm2[4],mem[5],xmm2[6],mem[7]
190
+ ; SSE-NEXT: subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
191
+ ; SSE-NEXT: addps %xmm2, %xmm0
192
+ ; SSE-NEXT: blendvps %xmm0, %xmm1, %xmm3
193
+ ; SSE-NEXT: movaps %xmm3, %xmm0
194
+ ; SSE-NEXT: retq
195
+ ;
196
+ ; AVX-LABEL: demandedbits_uitofp_blendvps:
197
+ ; AVX: # %bb.0:
198
+ ; AVX-NEXT: vpblendw {{.*#+}} xmm3 = xmm2[0],mem[1],xmm2[2],mem[3],xmm2[4],mem[5],xmm2[6],mem[7]
199
+ ; AVX-NEXT: vpsrld $16, %xmm2, %xmm2
200
+ ; AVX-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],mem[1],xmm2[2],mem[3],xmm2[4],mem[5],xmm2[6],mem[7]
201
+ ; AVX-NEXT: vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
202
+ ; AVX-NEXT: vaddps %xmm2, %xmm3, %xmm2
203
+ ; AVX-NEXT: vblendvps %xmm2, %xmm1, %xmm0, %xmm0
204
+ ; AVX-NEXT: retq
205
+ %cvt = uitofp <4 x i32 > %a2 to <4 x float >
206
+ %sel = tail call noundef <4 x float > @llvm.x86.sse41.blendvps (<4 x float > %a0 , <4 x float > %a1 , <4 x float > %cvt )
207
+ ret <4 x float > %sel
208
+ }
209
+
163
210
define <2 x i64 > @demandedbits_blendvpd (i64 %a0 , i64 %a2 , <2 x double > %a3 ) {
164
211
; SSE-LABEL: demandedbits_blendvpd:
165
212
; SSE: # %bb.0:
0 commit comments