Skip to content

Commit b4bc19e

Browse files
committed
[X86] Add tests showing failure to demand only the sign bit of a sitofp/uitofp node
sitofp - if we only demand the signbit, then we can try to use the source integer uitofp - signbit is guaranteed to be zero Noticed while reviewing #82290
1 parent 6244dfe commit b4bc19e

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

llvm/test/CodeGen/X86/combine-sse41-intrinsics.ll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,53 @@ define <16 x i8> @demandedelts_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8>
160160
ret <16 x i8> %5
161161
}
162162

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+
163210
define <2 x i64> @demandedbits_blendvpd(i64 %a0, i64 %a2, <2 x double> %a3) {
164211
; SSE-LABEL: demandedbits_blendvpd:
165212
; SSE: # %bb.0:

0 commit comments

Comments
 (0)