Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit efd461e

Browse files
committed
[X86][SSE] ComputeNumSignBits tests showing missing SHL/SRA demandedelts support
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316865 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent d23b241 commit efd461e

File tree

1 file changed

+90
-3
lines changed

1 file changed

+90
-3
lines changed

test/CodeGen/X86/known-signbits-vector.ll

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ define <4 x float> @signbits_sext_v4i64_sitofp_v4f32(i8 signext %a0, i16 signext
7272
ret <4 x float> %9
7373
}
7474

75-
define float @signbits_ashr_extract_sitofp(<2 x i64> %a0) nounwind {
76-
; X32-LABEL: signbits_ashr_extract_sitofp:
75+
define float @signbits_ashr_extract_sitofp_0(<2 x i64> %a0) nounwind {
76+
; X32-LABEL: signbits_ashr_extract_sitofp_0:
7777
; X32: # BB#0:
7878
; X32-NEXT: pushl %eax
7979
; X32-NEXT: vextractps $1, %xmm0, %eax
@@ -83,7 +83,7 @@ define float @signbits_ashr_extract_sitofp(<2 x i64> %a0) nounwind {
8383
; X32-NEXT: popl %eax
8484
; X32-NEXT: retl
8585
;
86-
; X64-LABEL: signbits_ashr_extract_sitofp:
86+
; X64-LABEL: signbits_ashr_extract_sitofp_0:
8787
; X64: # BB#0:
8888
; X64-NEXT: vpsrad $31, %xmm0, %xmm1
8989
; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
@@ -97,6 +97,93 @@ define float @signbits_ashr_extract_sitofp(<2 x i64> %a0) nounwind {
9797
ret float %3
9898
}
9999

100+
define float @signbits_ashr_extract_sitofp_1(<2 x i64> %a0) nounwind {
101+
; X32-LABEL: signbits_ashr_extract_sitofp_1:
102+
; X32: # BB#0:
103+
; X32-NEXT: pushl %ebp
104+
; X32-NEXT: movl %esp, %ebp
105+
; X32-NEXT: andl $-8, %esp
106+
; X32-NEXT: subl $16, %esp
107+
; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
108+
; X32-NEXT: vpsrlq $63, %xmm1, %xmm2
109+
; X32-NEXT: vpsrlq $32, %xmm1, %xmm1
110+
; X32-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
111+
; X32-NEXT: vpsrlq $63, %xmm0, %xmm2
112+
; X32-NEXT: vpsrlq $32, %xmm0, %xmm0
113+
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
114+
; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
115+
; X32-NEXT: vpsubq %xmm1, %xmm0, %xmm0
116+
; X32-NEXT: vmovq %xmm0, {{[0-9]+}}(%esp)
117+
; X32-NEXT: fildll {{[0-9]+}}(%esp)
118+
; X32-NEXT: fstps {{[0-9]+}}(%esp)
119+
; X32-NEXT: flds {{[0-9]+}}(%esp)
120+
; X32-NEXT: movl %ebp, %esp
121+
; X32-NEXT: popl %ebp
122+
; X32-NEXT: retl
123+
;
124+
; X64-LABEL: signbits_ashr_extract_sitofp_1:
125+
; X64: # BB#0:
126+
; X64-NEXT: vpsrlq $63, %xmm0, %xmm1
127+
; X64-NEXT: vpsrlq $32, %xmm0, %xmm0
128+
; X64-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
129+
; X64-NEXT: vmovdqa {{.*#+}} xmm1 = [2147483648,1]
130+
; X64-NEXT: vpxor %xmm1, %xmm0, %xmm0
131+
; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
132+
; X64-NEXT: vmovq %xmm0, %rax
133+
; X64-NEXT: vcvtsi2ssq %rax, %xmm2, %xmm0
134+
; X64-NEXT: retq
135+
%1 = ashr <2 x i64> %a0, <i64 32, i64 63>
136+
%2 = extractelement <2 x i64> %1, i32 0
137+
%3 = sitofp i64 %2 to float
138+
ret float %3
139+
}
140+
141+
define float @signbits_ashr_shl_extract_sitofp(<2 x i64> %a0) nounwind {
142+
; X32-LABEL: signbits_ashr_shl_extract_sitofp:
143+
; X32: # BB#0:
144+
; X32-NEXT: pushl %ebp
145+
; X32-NEXT: movl %esp, %ebp
146+
; X32-NEXT: andl $-8, %esp
147+
; X32-NEXT: subl $16, %esp
148+
; X32-NEXT: vmovdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
149+
; X32-NEXT: vpsrlq $60, %xmm1, %xmm2
150+
; X32-NEXT: vpsrlq $61, %xmm1, %xmm1
151+
; X32-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
152+
; X32-NEXT: vpsrlq $60, %xmm0, %xmm2
153+
; X32-NEXT: vpsrlq $61, %xmm0, %xmm0
154+
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
155+
; X32-NEXT: vpxor %xmm1, %xmm0, %xmm0
156+
; X32-NEXT: vpsubq %xmm1, %xmm0, %xmm0
157+
; X32-NEXT: vpsllq $16, %xmm0, %xmm1
158+
; X32-NEXT: vpsllq $20, %xmm0, %xmm0
159+
; X32-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
160+
; X32-NEXT: vmovq %xmm0, {{[0-9]+}}(%esp)
161+
; X32-NEXT: fildll {{[0-9]+}}(%esp)
162+
; X32-NEXT: fstps {{[0-9]+}}(%esp)
163+
; X32-NEXT: flds {{[0-9]+}}(%esp)
164+
; X32-NEXT: movl %ebp, %esp
165+
; X32-NEXT: popl %ebp
166+
; X32-NEXT: retl
167+
;
168+
; X64-LABEL: signbits_ashr_shl_extract_sitofp:
169+
; X64: # BB#0:
170+
; X64-NEXT: vpsrlq $60, %xmm0, %xmm1
171+
; X64-NEXT: vpsrlq $61, %xmm0, %xmm0
172+
; X64-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
173+
; X64-NEXT: vmovdqa {{.*#+}} xmm1 = [4,8]
174+
; X64-NEXT: vpxor %xmm1, %xmm0, %xmm0
175+
; X64-NEXT: vpsubq %xmm1, %xmm0, %xmm0
176+
; X64-NEXT: vpsllq $20, %xmm0, %xmm0
177+
; X64-NEXT: vmovq %xmm0, %rax
178+
; X64-NEXT: vcvtsi2ssq %rax, %xmm2, %xmm0
179+
; X64-NEXT: retq
180+
%1 = ashr <2 x i64> %a0, <i64 61, i64 60>
181+
%2 = shl <2 x i64> %1, <i64 20, i64 16>
182+
%3 = extractelement <2 x i64> %2, i32 0
183+
%4 = sitofp i64 %3 to float
184+
ret float %4
185+
}
186+
100187
define float @signbits_ashr_insert_ashr_extract_sitofp(i64 %a0, i64 %a1) nounwind {
101188
; X32-LABEL: signbits_ashr_insert_ashr_extract_sitofp:
102189
; X32: # BB#0:

0 commit comments

Comments
 (0)