xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-half-conversions.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+f16c | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker;
7*9880d681SAndroid Build Coastguard Worker; Half to Float
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine float @cvt_i16_to_f32(i16 %a0) {
11*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_i16_to_f32:
12*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
13*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %di, %eax
14*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
15*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
16*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i16 %a0 to half
18*9880d681SAndroid Build Coastguard Worker  %2 = fpext half %1 to float
19*9880d681SAndroid Build Coastguard Worker  ret float %2
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @cvt_4i16_to_4f32(<4 x i16> %a0) {
23*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4i16_to_4f32:
24*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
25*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
26*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %xmm0, %rax
27*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
28*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rdx
29*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
30*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
31*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %eax
32*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
33*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rdx
34*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
35*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
36*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
37*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
38*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm1
39*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
40*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
41*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm2
42*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
43*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm3
44*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
45*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
46*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
47*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
48*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
49*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a0 to <4 x half>
50*9880d681SAndroid Build Coastguard Worker  %2 = fpext <4 x half> %1 to <4 x float>
51*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @cvt_8i16_to_4f32(<8 x i16> %a0) {
55*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_4f32:
56*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %xmm0, %rax
58*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
59*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rdx
60*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
61*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
62*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %eax
63*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
64*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rdx
65*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
66*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
67*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
68*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
69*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm1
70*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
71*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
72*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm2
73*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
74*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm3
75*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
76*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
77*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
78*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
79*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
80*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
81*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %1 to <4 x half>
82*9880d681SAndroid Build Coastguard Worker  %3 = fpext <4 x half> %2 to <4 x float>
83*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %3
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @cvt_8i16_to_8f32(<8 x i16> %a0) {
87*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8i16_to_8f32:
88*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpextrq $1, %xmm0, %rdx
90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdx, %r8
91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdx, %r10
92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %dx, %r9d
93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<kill>
94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %edx
95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %r8
96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %r10
97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %xmm0, %rdi
98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %rax
99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %rsi
100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %di, %ecx
101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<kill>
102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %edi
103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rax
104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rsi
105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %si, %esi
106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %esi, %xmm0
107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm1
110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm1, %xmm1
111*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %di, %eax
112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm2
113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm2, %xmm2
114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm3
115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm3, %xmm3
116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %r10w, %eax
117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm4
118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm4, %xmm4
119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %r8w, %eax
120*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm5
121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %dx, %eax
123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm6
124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %r9d, %xmm7
126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3]
128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
135*9880d681SAndroid Build Coastguard Worker;
136*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8i16_to_8f32:
137*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpextrq $1, %xmm0, %rdx
139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdx, %r8
140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdx, %r10
141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %dx, %r9d
142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<kill>
143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %edx
144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %r8
145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %r10
146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %xmm0, %rdi
147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %rax
148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %rsi
149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %di, %ecx
150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<kill>
151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %edi
152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rax
153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rsi
154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %si, %esi
155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %esi, %xmm0
156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm1
159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1
160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %di, %eax
161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm2
162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm2
163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm3
164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm3, %xmm3
165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %r10w, %eax
166*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm4
167*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm4, %xmm4
168*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %r8w, %eax
169*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm5
170*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
171*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %dx, %eax
172*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm6
173*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
174*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %r9d, %xmm7
175*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3]
177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
178*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
179*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
183*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
184*9880d681SAndroid Build Coastguard Worker;
185*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8i16_to_8f32:
186*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdx, %r8
189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdx, %r10
190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %dx, %r9d
191*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<kill>
192*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %edx
193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %r8
194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %r10
195*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %xmm0, %rdi
196*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %rax
197*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %rsi
198*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %di, %ecx
199*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<kill>
200*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %edi
201*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rax
202*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rsi
203*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %si, %esi
204*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %esi, %xmm0
205*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
206*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
207*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm1
208*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
209*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %di, %eax
210*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm2
211*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
212*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm3
213*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
214*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %r10w, %eax
215*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %r8w, %eax
218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm5
219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
220*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %dx, %eax
221*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm6
222*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
223*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %r9d, %xmm7
224*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
225*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm6 = xmm7[0],xmm6[0],xmm7[2,3]
226*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
227*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
228*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
229*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
230*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
231*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
232*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
233*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i16> %a0 to <8 x half>
234*9880d681SAndroid Build Coastguard Worker  %2 = fpext <8 x half> %1 to <8 x float>
235*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @cvt_16i16_to_16f32(<16 x i16> %a0) {
239*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_16i16_to_16f32:
240*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %xmm4, %rax
243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rcx
245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm8
247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rcx
249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm9
251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %ax, %ecx
252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %eax
254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm10
256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpextrq $1, %xmm4, %rax
257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm11
258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rcx
260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm12
262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rcx
264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm13
266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %ax, %ecx
267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %eax
269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm14
271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %xmm0, %rax
272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm15
273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rcx
275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm2
277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rcx
279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm3
281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %ax, %ecx
282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %eax
284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm4
286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpextrq $1, %xmm0, %rax
287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm0
288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rcx
290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm5
292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rax, %rcx
293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rcx
294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm6
296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %ecx
297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %ecx
298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %cx, %ecx
299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm7
300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm1
302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm8, %xmm8
303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm9, %xmm9
304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm10, %xmm10
305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm11, %xmm11
306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm12, %xmm12
307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm13, %xmm13
308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm14, %xmm14
309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm15, %xmm15
310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm2, %xmm2
311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm3, %xmm3
312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm4, %xmm4
313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm1, %xmm1
318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[2,3]
319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3]
320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0]
321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[2,3]
322*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0],xmm0[3]
323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[0]
324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm15[0],xmm14[0],xmm15[2,3]
326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3]
327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0]
328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm11[0],xmm10[0],xmm11[2,3]
329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
333*9880d681SAndroid Build Coastguard Worker;
334*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_16i16_to_16f32:
335*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
337*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %xmm4, %rax
338*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
339*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rcx
340*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
341*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm8
342*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
343*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rcx
344*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
345*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm9
346*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %ax, %ecx
347*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
348*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %eax
349*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm10
351*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpextrq $1, %xmm4, %rax
352*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm11
353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rcx
355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
356*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm12
357*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
358*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rcx
359*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
360*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm13
361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %ax, %ecx
362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %eax
364*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm14
366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %xmm0, %rax
367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm15
368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rcx
370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm2
372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rcx
374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm3
376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %ax, %ecx
377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %eax
379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm4
381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpextrq $1, %xmm0, %rax
382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm0
383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rcx
385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm5
387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rax, %rcx
388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rcx
389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm6
391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %ecx
392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %ecx
393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %cx, %ecx
394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm7
395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm1
397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm8, %xmm8
398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm9, %xmm9
399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm10, %xmm10
400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm11, %xmm11
401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm12, %xmm12
402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm13, %xmm13
403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm14, %xmm14
404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm15, %xmm15
405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm2
406*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm3, %xmm3
407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm4, %xmm4
408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
409*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
411*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
412*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1
413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[2,3]
414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3]
415*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0]
416*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[2,3]
417*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0],xmm0[3]
418*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[0]
419*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
420*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm15[0],xmm14[0],xmm15[2,3]
421*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3]
422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0]
423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm11[0],xmm10[0],xmm11[2,3]
424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
428*9880d681SAndroid Build Coastguard Worker;
429*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_16i16_to_16f32:
430*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm10
432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %xmm0, %rax
433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rcx
435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm8
437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rcx
439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm9
441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %ax, %ecx
442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %eax
444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm11
446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpextrq $1, %xmm0, %rax
447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm12
448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rcx
450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
451*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm13
452*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
453*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rcx
454*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
455*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm14
456*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %ax, %ecx
457*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
458*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %eax
459*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
460*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm15
461*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %xmm10, %rax
462*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm2
463*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
464*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rcx
465*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
466*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm3
467*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
468*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rcx
469*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
470*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm1
471*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %ax, %ecx
472*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
473*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %eax
474*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
475*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
476*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpextrq $1, %xmm10, %rax
477*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm10
478*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
479*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rcx
480*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
481*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm5
482*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rax, %rcx
483*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rcx
484*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
485*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm6
486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %ecx
487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %ecx
488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %cx, %ecx
489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm7
490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm8, %xmm8
493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm9, %xmm9
494*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm11, %xmm11
495*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm12, %xmm12
496*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm13, %xmm13
497*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm14, %xmm14
498*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm15, %xmm15
499*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
500*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
501*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
502*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm10, %xmm10
504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[2,3]
509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm6[0],xmm0[3]
510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm5[0]
511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm4 = xmm10[0],xmm4[0],xmm10[2,3]
512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm4[0,1],xmm1[0],xmm4[3]
513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm3[0]
514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm15[0],xmm2[2,3]
516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm14[0],xmm1[3]
517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm13[0]
518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm12[0],xmm11[0],xmm12[2,3]
519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
524*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <16 x i16> %a0 to <16 x half>
525*9880d681SAndroid Build Coastguard Worker  %2 = fpext <16 x half> %1 to <16 x float>
526*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %2
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Worker;
530*9880d681SAndroid Build Coastguard Worker; Half to Float (Load)
531*9880d681SAndroid Build Coastguard Worker;
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine float @load_cvt_i16_to_f32(i16* %a0) {
534*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_i16_to_f32:
535*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
536*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl (%rdi), %eax
537*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
538*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
539*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
540*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %a0
541*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i16 %1 to half
542*9880d681SAndroid Build Coastguard Worker  %3 = fpext half %2 to float
543*9880d681SAndroid Build Coastguard Worker  ret float %3
544*9880d681SAndroid Build Coastguard Worker}
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @load_cvt_4i16_to_4f32(<4 x i16>* %a0) {
547*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_4i16_to_4f32:
548*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
549*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 6(%rdi), %eax
550*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
551*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
552*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 4(%rdi), %eax
553*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm1
554*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
555*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl (%rdi), %eax
556*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm2
557*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
558*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 2(%rdi), %eax
559*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm3
560*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
561*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]
562*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
563*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
564*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
565*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a0
566*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %1 to <4 x half>
567*9880d681SAndroid Build Coastguard Worker  %3 = fpext <4 x half> %2 to <4 x float>
568*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %3
569*9880d681SAndroid Build Coastguard Worker}
570*9880d681SAndroid Build Coastguard Worker
571*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @load_cvt_8i16_to_4f32(<8 x i16>* %a0) {
572*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_8i16_to_4f32:
573*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
574*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq (%rdi), %rax
575*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
576*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rdx
577*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
578*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    # kill: %EAX<def> %EAX<kill> %RAX<kill>
579*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %eax
580*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
581*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rdx
582*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
583*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
584*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
585*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
586*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm1
587*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
588*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
589*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm2
590*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
591*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm3
592*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
593*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
594*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
595*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
596*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
597*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
598*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
599*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <4 x i16> %2 to <4 x half>
600*9880d681SAndroid Build Coastguard Worker  %4 = fpext <4 x half> %3 to <4 x float>
601*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %4
602*9880d681SAndroid Build Coastguard Worker}
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @load_cvt_8i16_to_8f32(<8 x i16>* %a0) {
605*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_8i16_to_8f32:
606*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 6(%rdi), %eax
608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 4(%rdi), %eax
611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm1
612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm1, %xmm1
613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl (%rdi), %eax
614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm2
615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm2, %xmm2
616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 2(%rdi), %eax
617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm3
618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm3, %xmm3
619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 14(%rdi), %eax
620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm4
621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm4, %xmm4
622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 12(%rdi), %eax
623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm5
624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 8(%rdi), %eax
626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm6
627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 10(%rdi), %eax
629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm7
630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]
632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
633*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
634*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]
635*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
636*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
639*9880d681SAndroid Build Coastguard Worker;
640*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_8i16_to_8f32:
641*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 6(%rdi), %eax
643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 4(%rdi), %eax
646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm1
647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1
648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl (%rdi), %eax
649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm2
650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm2
651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 2(%rdi), %eax
652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm3
653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm3, %xmm3
654*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 14(%rdi), %eax
655*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm4
656*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm4, %xmm4
657*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 12(%rdi), %eax
658*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm5
659*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
660*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 8(%rdi), %eax
661*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm6
662*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
663*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 10(%rdi), %eax
664*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm7
665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]
667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]
670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
674*9880d681SAndroid Build Coastguard Worker;
675*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_8i16_to_8f32:
676*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
677*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 6(%rdi), %eax
678*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
679*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
680*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 4(%rdi), %eax
681*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm1
682*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl (%rdi), %eax
684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm2
685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 2(%rdi), %eax
687*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
688*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
689*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 14(%rdi), %eax
690*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
691*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 12(%rdi), %eax
693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm5
694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 8(%rdi), %eax
696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm6
697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 10(%rdi), %eax
699*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm7
700*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
701*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]
702*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
703*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
704*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]
705*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
706*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
707*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
708*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
709*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
710*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i16> %1 to <8 x half>
711*9880d681SAndroid Build Coastguard Worker  %3 = fpext <8 x half> %2 to <8 x float>
712*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %3
713*9880d681SAndroid Build Coastguard Worker}
714*9880d681SAndroid Build Coastguard Worker
715*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @load_cvt_16i16_to_16f32(<16 x i16>* %a0) {
716*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_16i16_to_16f32:
717*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 22(%rdi), %eax
719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm8
721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 20(%rdi), %eax
722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm9
724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 16(%rdi), %eax
725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm10
727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 18(%rdi), %eax
728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm11
730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 30(%rdi), %eax
731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm12
733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 28(%rdi), %eax
734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm13
736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 24(%rdi), %eax
737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm14
739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 26(%rdi), %eax
740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm15
742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 6(%rdi), %eax
743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 4(%rdi), %eax
746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm2
747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm2, %xmm2
748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl (%rdi), %eax
749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm3
750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm3, %xmm3
751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 2(%rdi), %eax
752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm4
753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm4, %xmm4
754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 14(%rdi), %eax
755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm5
756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 12(%rdi), %eax
758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm6
759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 8(%rdi), %eax
761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm7
762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 10(%rdi), %eax
764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm1
765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm1, %xmm1
766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm7[0],xmm1[0],xmm7[2,3]
767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3]
768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0]
769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3]
770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0,1],xmm2[0],xmm3[3]
771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]
772*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
773*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3]
774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3]
775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0]
776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3]
777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
781*9880d681SAndroid Build Coastguard Worker;
782*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_16i16_to_16f32:
783*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 22(%rdi), %eax
785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm8
787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 20(%rdi), %eax
788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm9
790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 16(%rdi), %eax
791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm10
793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 18(%rdi), %eax
794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm11
796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 30(%rdi), %eax
797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm12
799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 28(%rdi), %eax
800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm13
802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 24(%rdi), %eax
803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm14
805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 26(%rdi), %eax
806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm15
808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 6(%rdi), %eax
809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 4(%rdi), %eax
812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm2
813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm2
814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl (%rdi), %eax
815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm3
816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm3, %xmm3
817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 2(%rdi), %eax
818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm4
819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm4, %xmm4
820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 14(%rdi), %eax
821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm5
822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 12(%rdi), %eax
824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm6
825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 8(%rdi), %eax
827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm7
828*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
829*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 10(%rdi), %eax
830*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm1
831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1
832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm7[0],xmm1[0],xmm7[2,3]
833*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm6[0],xmm1[3]
834*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm5[0]
835*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3]
836*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0,1],xmm2[0],xmm3[3]
837*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]
838*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
839*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3]
840*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3]
841*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0]
842*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3]
843*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
845*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
846*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
847*9880d681SAndroid Build Coastguard Worker;
848*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_16i16_to_16f32:
849*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 6(%rdi), %eax
851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm8
853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 4(%rdi), %eax
854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm9
856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl (%rdi), %eax
857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm10
859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 2(%rdi), %eax
860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm11
862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 14(%rdi), %eax
863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm12
865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 12(%rdi), %eax
866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm13
868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 8(%rdi), %eax
869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm14
871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 10(%rdi), %eax
872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm15
874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 22(%rdi), %eax
875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 20(%rdi), %eax
878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm1
879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 16(%rdi), %eax
881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm2
882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 18(%rdi), %eax
884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 30(%rdi), %eax
887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 28(%rdi), %eax
890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm5
891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 24(%rdi), %eax
893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm6
894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 26(%rdi), %eax
896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm7
897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]
899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm5 = xmm6[0,1],xmm5[0],xmm6[3]
900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0,1,2],xmm4[0]
901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]
902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm4, %ymm0, %ymm0
905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm14[0],xmm15[0],xmm14[2,3]
906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm13[0],xmm1[3]
907*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm12[0]
908*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm10[0],xmm11[0],xmm10[2,3]
909*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm9[0],xmm2[3]
910*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm8[0]
911*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1
912*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0
913*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
914*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i16>, <16 x i16>* %a0
915*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i16> %1 to <16 x half>
916*9880d681SAndroid Build Coastguard Worker  %3 = fpext <16 x half> %2 to <16 x float>
917*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %3
918*9880d681SAndroid Build Coastguard Worker}
919*9880d681SAndroid Build Coastguard Worker
920*9880d681SAndroid Build Coastguard Worker;
921*9880d681SAndroid Build Coastguard Worker; Half to Double
922*9880d681SAndroid Build Coastguard Worker;
923*9880d681SAndroid Build Coastguard Worker
924*9880d681SAndroid Build Coastguard Workerdefine double @cvt_i16_to_f64(i16 %a0) {
925*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_i16_to_f64:
926*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
927*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %di, %eax
928*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
929*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
930*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
931*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
932*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i16 %a0 to half
933*9880d681SAndroid Build Coastguard Worker  %2 = fpext half %1 to double
934*9880d681SAndroid Build Coastguard Worker  ret double %2
935*9880d681SAndroid Build Coastguard Worker}
936*9880d681SAndroid Build Coastguard Worker
937*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @cvt_2i16_to_2f64(<2 x i16> %a0) {
938*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_2i16_to_2f64:
939*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
940*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
941*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
942*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %eax
943*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %ecx
944*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %eax
945*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
946*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
947*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
948*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm1
949*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
950*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
951*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
952*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
953*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
954*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i16> %a0 to <2 x half>
955*9880d681SAndroid Build Coastguard Worker  %2 = fpext <2 x half> %1 to <2 x double>
956*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %2
957*9880d681SAndroid Build Coastguard Worker}
958*9880d681SAndroid Build Coastguard Worker
959*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @cvt_4i16_to_4f64(<4 x i16> %a0) {
960*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4i16_to_4f64:
961*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
962*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
963*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %xmm0, %rax
964*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
965*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movl %eax, %edx
966*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
967*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rax
968*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
969*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %edx
970*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
971*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
972*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
973*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm1
974*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
975*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
976*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm2
977*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
978*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
979*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm3
980*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
981*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
982*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
983*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
984*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
985*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
986*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
987*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
988*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
989*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a0 to <4 x half>
990*9880d681SAndroid Build Coastguard Worker  %2 = fpext <4 x half> %1 to <4 x double>
991*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %2
992*9880d681SAndroid Build Coastguard Worker}
993*9880d681SAndroid Build Coastguard Worker
994*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @cvt_8i16_to_2f64(<8 x i16> %a0) {
995*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_2f64:
996*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
997*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %eax
998*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %ecx
999*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %eax
1000*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
1001*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
1002*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1003*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm1
1004*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
1005*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1006*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1007*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1008*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1009*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <2 x i32> <i32 0, i32 1>
1010*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %1 to <2 x half>
1011*9880d681SAndroid Build Coastguard Worker  %3 = fpext <2 x half> %2 to <2 x double>
1012*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %3
1013*9880d681SAndroid Build Coastguard Worker}
1014*9880d681SAndroid Build Coastguard Worker
1015*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @cvt_8i16_to_4f64(<8 x i16> %a0) {
1016*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_8i16_to_4f64:
1017*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1018*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %xmm0, %rax
1019*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
1020*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movl %eax, %edx
1021*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
1022*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rax
1023*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
1024*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %edx
1025*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
1026*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
1027*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1028*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm1
1029*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
1030*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
1031*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm2
1032*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
1033*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
1034*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm3
1035*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
1036*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1037*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1038*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1039*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1040*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1041*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1042*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1043*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1044*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1045*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %1 to <4 x half>
1046*9880d681SAndroid Build Coastguard Worker  %3 = fpext <4 x half> %2 to <4 x double>
1047*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
1048*9880d681SAndroid Build Coastguard Worker}
1049*9880d681SAndroid Build Coastguard Worker
1050*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @cvt_8i16_to_8f64(<8 x i16> %a0) {
1051*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8i16_to_8f64:
1052*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %xmm0, %rdx
1054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdx, %r9
1055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %edx, %r10d
1056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %dx, %r8d
1057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rdx
1058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %r9
1059*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %r10d
1060*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpextrq $1, %xmm0, %rdi
1061*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %rsi
1062*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %edi, %eax
1063*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %di, %ecx
1064*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $48, %rdi
1065*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrq $32, %rsi
1066*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shrl $16, %eax
1067*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    cwtl
1068*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1069*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm1
1070*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %ecx, %xmm0
1071*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm2
1072*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %si, %eax
1073*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1074*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm3
1075*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %di, %eax
1076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm4
1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %r10w, %eax
1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
1081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %r8d, %xmm5
1082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
1083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %r9w, %eax
1084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm6
1085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
1086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl %dx, %eax
1087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm7
1088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
1089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm5[0],xmm0[0]
1095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
1096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0]
1102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
1103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1104*9880d681SAndroid Build Coastguard Worker;
1105*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8i16_to_8f64:
1106*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %xmm0, %rdx
1108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdx, %r9
1109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %edx, %r10d
1110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %dx, %r8d
1111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rdx
1112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %r9
1113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %r10d
1114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpextrq $1, %xmm0, %rdi
1115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %rsi
1116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %edi, %eax
1117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %di, %ecx
1118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $48, %rdi
1119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrq $32, %rsi
1120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shrl $16, %eax
1121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    cwtl
1122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm1
1124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %ecx, %xmm0
1125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm2
1126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %si, %eax
1127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1128*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm3
1129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %di, %eax
1130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm4
1132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %r10w, %eax
1133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
1135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %r8d, %xmm5
1136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
1137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %r9w, %eax
1138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm6
1139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
1140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl %dx, %eax
1141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm7
1142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
1143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm5[0],xmm0[0]
1149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
1150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0]
1156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
1157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1158*9880d681SAndroid Build Coastguard Worker;
1159*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8i16_to_8f64:
1160*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1161*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpextrq $1, %xmm0, %rdx
1162*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdx, %r8
1163*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %edx, %r10d
1164*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %dx, %r9d
1165*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rdx
1166*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %r8
1167*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %r10d
1168*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %xmm0, %rdi
1169*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %rax
1170*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %edi, %esi
1171*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %di, %ecx
1172*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $48, %rdi
1173*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrq $32, %rax
1174*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shrl $16, %esi
1175*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %si, %esi
1176*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %esi, %xmm0
1177*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
1178*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %ecx, %xmm1
1179*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
1180*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    cwtl
1181*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm2
1182*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
1183*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %di, %eax
1184*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
1185*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
1186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %r10w, %eax
1187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
1188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
1189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %r9d, %xmm5
1190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
1191*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %r8w, %eax
1192*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm6
1193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
1194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl %dx, %eax
1195*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm7
1196*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
1197*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1198*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1199*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1200*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1201*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1202*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm4 = xmm5[0],xmm4[0]
1203*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf128 $1, %xmm6, %ymm4, %ymm4
1204*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1205*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1206*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1207*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1208*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1209*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1210*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1211*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf64x4 $1, %ymm4, %zmm0, %zmm0
1212*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1213*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i16> %a0 to <8 x half>
1214*9880d681SAndroid Build Coastguard Worker  %2 = fpext <8 x half> %1 to <8 x double>
1215*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %2
1216*9880d681SAndroid Build Coastguard Worker}
1217*9880d681SAndroid Build Coastguard Worker
1218*9880d681SAndroid Build Coastguard Worker;
1219*9880d681SAndroid Build Coastguard Worker; Half to Double (Load)
1220*9880d681SAndroid Build Coastguard Worker;
1221*9880d681SAndroid Build Coastguard Worker
1222*9880d681SAndroid Build Coastguard Workerdefine double @load_cvt_i16_to_f64(i16* %a0) {
1223*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_i16_to_f64:
1224*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1225*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl (%rdi), %eax
1226*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
1227*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1228*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1229*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1230*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %a0
1231*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i16 %1 to half
1232*9880d681SAndroid Build Coastguard Worker  %3 = fpext half %2 to double
1233*9880d681SAndroid Build Coastguard Worker  ret double %3
1234*9880d681SAndroid Build Coastguard Worker}
1235*9880d681SAndroid Build Coastguard Worker
1236*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @load_cvt_2i16_to_2f64(<2 x i16>* %a0) {
1237*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_2i16_to_2f64:
1238*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1239*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl (%rdi), %eax
1240*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
1241*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1242*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 2(%rdi), %eax
1243*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm1
1244*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
1245*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1246*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1247*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1248*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1249*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i16>, <2 x i16>* %a0
1250*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %1 to <2 x half>
1251*9880d681SAndroid Build Coastguard Worker  %3 = fpext <2 x half> %2 to <2 x double>
1252*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %3
1253*9880d681SAndroid Build Coastguard Worker}
1254*9880d681SAndroid Build Coastguard Worker
1255*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @load_cvt_4i16_to_4f64(<4 x i16>* %a0) {
1256*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_4i16_to_4f64:
1257*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1258*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl (%rdi), %eax
1259*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
1260*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1261*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 2(%rdi), %eax
1262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm1
1263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
1264*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 4(%rdi), %eax
1265*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm2
1266*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
1267*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl 6(%rdi), %eax
1268*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm3
1269*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
1270*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1271*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1272*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1273*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1274*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1275*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1276*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1277*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1278*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a0
1279*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %1 to <4 x half>
1280*9880d681SAndroid Build Coastguard Worker  %3 = fpext <4 x half> %2 to <4 x double>
1281*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
1282*9880d681SAndroid Build Coastguard Worker}
1283*9880d681SAndroid Build Coastguard Worker
1284*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @load_cvt_8i16_to_4f64(<8 x i16>* %a0) {
1285*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_cvt_8i16_to_4f64:
1286*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1287*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq (%rdi), %rax
1288*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rax, %rcx
1289*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movl %eax, %edx
1290*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %ax, %esi
1291*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $48, %rax
1292*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrq $32, %rcx
1293*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shrl $16, %edx
1294*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %dx, %edx
1295*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %edx, %xmm0
1296*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm0, %xmm0
1297*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %esi, %xmm1
1298*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm1, %xmm1
1299*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movswl %cx, %ecx
1300*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %ecx, %xmm2
1301*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm2, %xmm2
1302*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    cwtl
1303*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm3
1304*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtph2ps %xmm3, %xmm3
1305*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1306*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1307*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1308*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1309*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1310*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1311*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1312*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1313*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
1314*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1315*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <4 x i16> %2 to <4 x half>
1316*9880d681SAndroid Build Coastguard Worker  %4 = fpext <4 x half> %3 to <4 x double>
1317*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %4
1318*9880d681SAndroid Build Coastguard Worker}
1319*9880d681SAndroid Build Coastguard Worker
1320*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @load_cvt_8i16_to_8f64(<8 x i16>* %a0) {
1321*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: load_cvt_8i16_to_8f64:
1322*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 8(%rdi), %eax
1324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm1
1326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 10(%rdi), %eax
1327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm2
1329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 12(%rdi), %eax
1330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm3
1332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 14(%rdi), %eax
1333*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm4
1335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl (%rdi), %eax
1336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm0
1337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm0, %xmm0
1338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 2(%rdi), %eax
1339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm5
1340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm5, %xmm5
1341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 4(%rdi), %eax
1342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm6
1343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm6, %xmm6
1344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswl 6(%rdi), %eax
1345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm7
1346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtph2ps %xmm7, %xmm7
1347*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1350*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1351*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1352*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm5[0]
1353*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
1354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
1361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1362*9880d681SAndroid Build Coastguard Worker;
1363*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: load_cvt_8i16_to_8f64:
1364*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 8(%rdi), %eax
1366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm1
1368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 10(%rdi), %eax
1369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm2
1371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 12(%rdi), %eax
1372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm3
1374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 14(%rdi), %eax
1375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm4
1377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl (%rdi), %eax
1378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm0
1379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0
1380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 2(%rdi), %eax
1381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm5
1382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm5, %xmm5
1383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 4(%rdi), %eax
1384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm6
1385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm6, %xmm6
1386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswl 6(%rdi), %eax
1387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm7
1388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtph2ps %xmm7, %xmm7
1389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm5[0]
1395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
1396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
1403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1404*9880d681SAndroid Build Coastguard Worker;
1405*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: load_cvt_8i16_to_8f64:
1406*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl (%rdi), %eax
1408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm0
1409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0
1410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 2(%rdi), %eax
1411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm1
1412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm1
1413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 4(%rdi), %eax
1414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm2
1415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm2
1416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 6(%rdi), %eax
1417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
1418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm3
1419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 8(%rdi), %eax
1420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm4
1421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm4
1422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 10(%rdi), %eax
1423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm5
1424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm5
1425*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 12(%rdi), %eax
1426*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm6
1427*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm6, %xmm6
1428*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movswl 14(%rdi), %eax
1429*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm7
1430*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtph2ps %xmm7, %xmm7
1431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm7, %xmm7, %xmm7
1432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm6, %xmm6, %xmm6
1433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]
1434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm5, %xmm5, %xmm5
1435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm4, %xmm4, %xmm4
1436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm4 = xmm4[0],xmm5[0]
1437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf128 $1, %xmm6, %ymm4, %ymm4
1438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm3, %xmm3, %xmm3
1439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm2, %xmm2, %xmm2
1440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1
1442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0
1443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinsertf64x4 $1, %ymm4, %zmm0, %zmm0
1446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1447*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a0
1448*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i16> %1 to <8 x half>
1449*9880d681SAndroid Build Coastguard Worker  %3 = fpext <8 x half> %2 to <8 x double>
1450*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %3
1451*9880d681SAndroid Build Coastguard Worker}
1452*9880d681SAndroid Build Coastguard Worker
1453*9880d681SAndroid Build Coastguard Worker;
1454*9880d681SAndroid Build Coastguard Worker; Float to Half
1455*9880d681SAndroid Build Coastguard Worker;
1456*9880d681SAndroid Build Coastguard Worker
1457*9880d681SAndroid Build Coastguard Workerdefine i16 @cvt_f32_to_i16(float %a0) {
1458*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_f32_to_i16:
1459*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1460*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1461*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %eax
1462*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    # kill: %AX<def> %AX<kill> %EAX<kill>
1463*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1464*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc float %a0 to half
1465*9880d681SAndroid Build Coastguard Worker  %2 = bitcast half %1 to i16
1466*9880d681SAndroid Build Coastguard Worker  ret i16 %2
1467*9880d681SAndroid Build Coastguard Worker}
1468*9880d681SAndroid Build Coastguard Worker
1469*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @cvt_4f32_to_4i16(<4 x float> %a0) {
1470*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_4i16:
1471*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1472*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1473*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1474*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1475*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1476*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1477*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1478*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %cx, %ecx
1479*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %ecx
1480*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1481*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1482*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1483*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1484*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1485*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1486*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %edx
1487*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %dx, %edx
1488*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %edx
1489*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shlq $32, %rdx
1490*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orq %rcx, %rdx
1491*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdx, %xmm0
1492*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1493*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
1494*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
1495*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %2
1496*9880d681SAndroid Build Coastguard Worker}
1497*9880d681SAndroid Build Coastguard Worker
1498*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f32_to_8i16_undef(<4 x float> %a0) {
1499*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_8i16_undef:
1500*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1501*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1502*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1503*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1504*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1505*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1506*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1507*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %cx, %ecx
1508*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %ecx
1509*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1510*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1511*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1512*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1513*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1514*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1515*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %edx
1516*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %dx, %edx
1517*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %edx
1518*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shlq $32, %rdx
1519*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orq %rcx, %rdx
1520*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdx, %xmm0
1521*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
1522*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1523*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
1524*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
1525*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1526*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
1527*9880d681SAndroid Build Coastguard Worker}
1528*9880d681SAndroid Build Coastguard Worker
1529*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f32_to_8i16_zero(<4 x float> %a0) {
1530*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_4f32_to_8i16_zero:
1531*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1532*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1533*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1534*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1535*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1536*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1537*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1538*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %cx, %ecx
1539*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %ecx
1540*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1541*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1542*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1543*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1544*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1545*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1546*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %edx
1547*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %dx, %edx
1548*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %edx
1549*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shlq $32, %rdx
1550*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orq %rcx, %rdx
1551*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdx, %xmm0
1552*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
1553*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1554*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
1555*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
1556*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1557*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
1558*9880d681SAndroid Build Coastguard Worker}
1559*9880d681SAndroid Build Coastguard Worker
1560*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_8f32_to_8i16(<8 x float> %a0) {
1561*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8f32_to_8i16:
1562*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %eax
1567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %ecx
1569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %cx, %ecx
1570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %eax, %ecx
1571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1573*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %edx
1574*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %edx
1575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
1579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %edx, %eax
1580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
1581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %rcx, %rax
1582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %ecx
1586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ecx
1587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %edx
1589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %dx, %edx
1590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ecx, %edx
1591*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1592*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1593*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %ecx
1594*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ecx
1595*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1596*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1597*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %esi
1598*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %si, %esi
1599*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ecx, %esi
1600*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rsi
1601*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %rdx, %rsi
1602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rsi, %xmm0
1603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm1
1604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1607*9880d681SAndroid Build Coastguard Worker;
1608*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8f32_to_8i16:
1609*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1611*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1612*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1613*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %eax
1614*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1615*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %ecx
1616*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %cx, %ecx
1617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %eax, %ecx
1618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1619*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1620*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %edx
1621*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %edx
1622*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1623*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1624*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1625*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
1626*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %edx, %eax
1627*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
1628*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %rcx, %rax
1629*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
1630*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1632*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %ecx
1633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ecx
1634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %edx
1636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %dx, %edx
1637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ecx, %edx
1638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %ecx
1641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ecx
1642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %esi
1645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %si, %esi
1646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ecx, %esi
1647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rsi
1648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %rdx, %rsi
1649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rsi, %xmm0
1650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm1
1651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1654*9880d681SAndroid Build Coastguard Worker;
1655*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8f32_to_8i16:
1656*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1660*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %eax
1661*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %ecx
1663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %cx, %ecx
1664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %eax, %ecx
1665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1666*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1667*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %edx
1668*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %edx
1669*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1670*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1671*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1672*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
1673*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %edx, %eax
1674*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
1675*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %rcx, %rax
1676*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
1677*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1678*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1679*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %ecx
1680*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ecx
1681*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1682*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %edx
1683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %dx, %edx
1684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ecx, %edx
1685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1687*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %ecx
1688*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ecx
1689*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1690*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1691*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %esi
1692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %si, %esi
1693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ecx, %esi
1694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rsi
1695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %rdx, %rsi
1696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rsi, %xmm0
1697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm1
1698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1699*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1700*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <8 x float> %a0 to <8 x half>
1701*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x half> %1 to <8 x i16>
1702*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
1703*9880d681SAndroid Build Coastguard Worker}
1704*9880d681SAndroid Build Coastguard Worker
1705*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @cvt_16f32_to_16i16(<16 x float> %a0) {
1706*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_16f32_to_16i16:
1707*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm2
1709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
1710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
1711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm3
1713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
1714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
1715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
1718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
1720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm1
1724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3]
1727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm2[1,0]
1731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
1736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
1738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
1739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
1740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm3
1744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
1751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %eax
1754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
1755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %eax
1757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]
1758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %eax
1761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3]
1762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
1764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
1767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm1
1768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %eax
1769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $7, %eax, %xmm1, %xmm0
1770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1772*9880d681SAndroid Build Coastguard Worker;
1773*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_16f32_to_16i16:
1774*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm2
1776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
1777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
1778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm3
1780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
1781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
1782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
1785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm2
1786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
1787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm1
1791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3]
1794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm2[1,0]
1798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
1803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
1805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
1806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
1807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm3
1811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
1817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
1818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %eax
1821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
1822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %eax
1824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]
1825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %eax
1828*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3]
1829*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1830*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
1831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1833*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
1834*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm1
1835*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %eax
1836*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $7, %eax, %xmm1, %xmm0
1837*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1838*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1839*9880d681SAndroid Build Coastguard Worker;
1840*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_16f32_to_16i16:
1841*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1842*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf64x4 $1, %zmm0, %ymm1
1843*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm2
1844*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
1845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
1846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1847*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
1848*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
1849*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
1850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
1853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm1, %xmm2
1854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
1855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm1
1859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3]
1862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm2[1,0]
1866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,2,3]
1871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
1872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
1873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
1874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
1875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm3
1879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
1883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
1884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm1
1885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
1886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
1888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
1889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
1890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
1891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
1892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]
1893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
1895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
1896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm1[1,0]
1897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
1899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
1900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[3,1,2,3]
1901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm1
1903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
1904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpinsrw $7, %eax, %xmm1, %xmm0
1905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1907*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <16 x float> %a0 to <16 x half>
1908*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x half> %1 to <16 x i16>
1909*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %2
1910*9880d681SAndroid Build Coastguard Worker}
1911*9880d681SAndroid Build Coastguard Worker
1912*9880d681SAndroid Build Coastguard Worker;
1913*9880d681SAndroid Build Coastguard Worker; Float to Half (Store)
1914*9880d681SAndroid Build Coastguard Worker;
1915*9880d681SAndroid Build Coastguard Worker
1916*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_f32_to_i16(float %a0, i16* %a1) {
1917*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_f32_to_i16:
1918*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1919*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1920*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %eax
1921*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %ax, (%rdi)
1922*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1923*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc float %a0 to half
1924*9880d681SAndroid Build Coastguard Worker  %2 = bitcast half %1 to i16
1925*9880d681SAndroid Build Coastguard Worker  store i16 %2, i16* %a1
1926*9880d681SAndroid Build Coastguard Worker  ret void
1927*9880d681SAndroid Build Coastguard Worker}
1928*9880d681SAndroid Build Coastguard Worker
1929*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_4i16(<4 x float> %a0, <4 x i16>* %a1) {
1930*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_4i16:
1931*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1932*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1933*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1934*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1935*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
1936*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1937*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1938*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1939*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1940*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %edx
1941*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1942*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %esi
1943*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %si, (%rdi)
1944*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %dx, 6(%rdi)
1945*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %cx, 4(%rdi)
1946*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %ax, 2(%rdi)
1947*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1948*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
1949*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
1950*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %2, <4 x i16>* %a1
1951*9880d681SAndroid Build Coastguard Worker  ret void
1952*9880d681SAndroid Build Coastguard Worker}
1953*9880d681SAndroid Build Coastguard Worker
1954*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_8i16_undef(<4 x float> %a0, <8 x i16>* %a1) {
1955*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_8i16_undef:
1956*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1957*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1958*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1959*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1960*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1961*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1962*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1963*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %cx, %ecx
1964*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %ecx
1965*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1966*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1967*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1968*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1969*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1970*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
1971*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %edx
1972*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %dx, %edx
1973*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %edx
1974*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shlq $32, %rdx
1975*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orq %rcx, %rdx
1976*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdx, %xmm0
1977*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
1978*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovdqa %xmm0, (%rdi)
1979*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1980*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
1981*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
1982*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1983*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %a1
1984*9880d681SAndroid Build Coastguard Worker  ret void
1985*9880d681SAndroid Build Coastguard Worker}
1986*9880d681SAndroid Build Coastguard Worker
1987*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f32_to_8i16_zero(<4 x float> %a0, <8 x i16>* %a1) {
1988*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_4f32_to_8i16_zero:
1989*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1990*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
1991*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
1992*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
1993*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
1994*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm1
1995*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %ecx
1996*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %cx, %ecx
1997*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %ecx
1998*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
1999*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2000*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm1, %eax
2001*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %eax
2002*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2003*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2004*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %xmm0, %edx
2005*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %dx, %edx
2006*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %eax, %edx
2007*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shlq $32, %rdx
2008*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orq %rcx, %rdx
2009*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdx, %xmm0
2010*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
2011*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovdqa %xmm0, (%rdi)
2012*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
2013*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x float> %a0 to <4 x half>
2014*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
2015*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2016*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %a1
2017*9880d681SAndroid Build Coastguard Worker  ret void
2018*9880d681SAndroid Build Coastguard Worker}
2019*9880d681SAndroid Build Coastguard Worker
2020*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_8f32_to_8i16(<8 x float> %a0, <8 x i16>* %a1) {
2021*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_8f32_to_8i16:
2022*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
2024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %r8d
2026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
2027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %r9d
2029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
2030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %r10d
2032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
2033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
2034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %r11d
2036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
2037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
2039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3]
2040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %ecx
2042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %edx
2044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
2045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %esi
2046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %si, 8(%rdi)
2047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %dx, (%rdi)
2048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %cx, 14(%rdi)
2049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 12(%rdi)
2050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r11w, 10(%rdi)
2051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r10w, 6(%rdi)
2052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r9w, 4(%rdi)
2053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r8w, 2(%rdi)
2054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2056*9880d681SAndroid Build Coastguard Worker;
2057*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_8f32_to_8i16:
2058*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
2060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %r8d
2062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
2063*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2064*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %r9d
2065*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
2066*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %r10d
2068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
2069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
2070*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2071*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %r11d
2072*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
2073*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2074*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
2075*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3]
2076*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2077*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %ecx
2078*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2079*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %edx
2080*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
2081*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %esi
2082*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %si, 8(%rdi)
2083*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %dx, (%rdi)
2084*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %cx, 14(%rdi)
2085*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 12(%rdi)
2086*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r11w, 10(%rdi)
2087*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r10w, 6(%rdi)
2088*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r9w, 4(%rdi)
2089*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r8w, 2(%rdi)
2090*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2091*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2092*9880d681SAndroid Build Coastguard Worker;
2093*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_8f32_to_8i16:
2094*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2095*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
2096*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2097*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %r8d
2098*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
2099*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2100*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %r9d
2101*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3]
2102*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2103*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %r10d
2104*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm1
2105*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
2106*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2107*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %r11d
2108*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm1[1,0]
2109*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2110*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
2111*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3]
2112*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2113*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %ecx
2114*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %edx
2116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm0
2117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %esi
2118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %si, 8(%rdi)
2119*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %dx, (%rdi)
2120*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %cx, 14(%rdi)
2121*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 12(%rdi)
2122*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r11w, 10(%rdi)
2123*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r10w, 6(%rdi)
2124*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r9w, 4(%rdi)
2125*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r8w, 2(%rdi)
2126*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2127*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <8 x float> %a0 to <8 x half>
2128*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x half> %1 to <8 x i16>
2129*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %a1
2130*9880d681SAndroid Build Coastguard Worker  ret void
2131*9880d681SAndroid Build Coastguard Worker}
2132*9880d681SAndroid Build Coastguard Worker
2133*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_16f32_to_16i16(<16 x float> %a0, <16 x i16>* %a1) {
2134*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_16f32_to_16i16:
2135*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
2138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm3, %xmm4
2139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm4
2141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 24(%rdi)
2142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm4
2144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 16(%rdi)
2145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm4
2147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 8(%rdi)
2148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3]
2150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, (%rdi)
2152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm3[1,0]
2154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 30(%rdi)
2156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3]
2160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 28(%rdi)
2162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm3, %eax
2163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm3 = xmm1[3,1,2,3]
2164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 26(%rdi)
2166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm3, %eax
2167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm1[1,0]
2168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 22(%rdi)
2170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm3, %eax
2171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm0[1,0]
2172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]
2176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 20(%rdi)
2178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
2179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm2[3,1,2,3]
2180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 18(%rdi)
2182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
2183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3]
2184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 14(%rdi)
2188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm2, %eax
2189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 12(%rdi)
2190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
2191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 10(%rdi)
2192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm0, %eax
2193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 6(%rdi)
2194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm3, %eax
2195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 4(%rdi)
2196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm4, %eax
2197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 2(%rdi)
2198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2200*9880d681SAndroid Build Coastguard Worker;
2201*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_16f32_to_16i16:
2202*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2
2204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm3
2205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm3, %xmm4
2206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm4
2208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 24(%rdi)
2209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm4
2211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 16(%rdi)
2212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm4
2214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 8(%rdi)
2215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3]
2217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, (%rdi)
2219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm3[1,0]
2221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 30(%rdi)
2223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3]
2227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 28(%rdi)
2229*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm3, %eax
2230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm3 = xmm1[3,1,2,3]
2231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 26(%rdi)
2233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm3, %eax
2234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm1[1,0]
2235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 22(%rdi)
2237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm3, %eax
2238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm0[1,0]
2239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]
2243*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2244*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 20(%rdi)
2245*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
2246*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm2[3,1,2,3]
2247*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 18(%rdi)
2249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
2250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm2[1,1,3,3]
2251*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm2[1,0]
2253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 14(%rdi)
2255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm2, %eax
2256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 12(%rdi)
2257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
2258*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 10(%rdi)
2259*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm0, %eax
2260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 6(%rdi)
2261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm3, %eax
2262*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 4(%rdi)
2263*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm4, %eax
2264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 2(%rdi)
2265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2267*9880d681SAndroid Build Coastguard Worker;
2268*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_16f32_to_16i16:
2269*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm1
2271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf64x4 $1, %zmm0, %ymm2
2272*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm2, %xmm3
2273*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm3, %xmm4
2274*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2275*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm4
2276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 24(%rdi)
2277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm4
2279*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 16(%rdi)
2280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm4
2282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 8(%rdi)
2283*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2284*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm4 = xmm3[3,1,2,3]
2285*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2286*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, (%rdi)
2287*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2288*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm3[1,0]
2289*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2290*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 30(%rdi)
2291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
2293*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm4, %xmm4
2294*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3]
2295*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2296*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 28(%rdi)
2297*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm3, %eax
2298*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm3 = xmm2[3,1,2,3]
2299*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2300*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 26(%rdi)
2301*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm3, %eax
2302*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm2[1,0]
2303*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2304*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 22(%rdi)
2305*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm3, %eax
2306*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm0[1,0]
2307*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm3, %xmm3
2308*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
2309*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm0
2310*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3]
2311*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2312*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 20(%rdi)
2313*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
2314*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilps {{.*#+}} xmm2 = xmm1[3,1,2,3]
2315*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2316*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 18(%rdi)
2317*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
2318*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
2319*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm2, %xmm2
2320*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
2321*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vcvtps2ph $4, %xmm1, %xmm1
2322*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 14(%rdi)
2323*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
2324*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 12(%rdi)
2325*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm2, %eax
2326*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 10(%rdi)
2327*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm0, %eax
2328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 6(%rdi)
2329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm3, %eax
2330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 4(%rdi)
2331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm4, %eax
2332*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 2(%rdi)
2333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2334*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <16 x float> %a0 to <16 x half>
2335*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x half> %1 to <16 x i16>
2336*9880d681SAndroid Build Coastguard Worker  store <16 x i16> %2, <16 x i16>* %a1
2337*9880d681SAndroid Build Coastguard Worker  ret void
2338*9880d681SAndroid Build Coastguard Worker}
2339*9880d681SAndroid Build Coastguard Worker
2340*9880d681SAndroid Build Coastguard Worker;
2341*9880d681SAndroid Build Coastguard Worker; Double to Half
2342*9880d681SAndroid Build Coastguard Worker;
2343*9880d681SAndroid Build Coastguard Worker
2344*9880d681SAndroid Build Coastguard Workerdefine i16 @cvt_f64_to_i16(double %a0) {
2345*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_f64_to_i16:
2346*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
2347*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    jmp __truncdfhf2 # TAILCALL
2348*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc double %a0 to half
2349*9880d681SAndroid Build Coastguard Worker  %2 = bitcast half %1 to i16
2350*9880d681SAndroid Build Coastguard Worker  ret i16 %2
2351*9880d681SAndroid Build Coastguard Worker}
2352*9880d681SAndroid Build Coastguard Worker
2353*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @cvt_2f64_to_2i16(<2 x double> %a0) {
2354*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cvt_2f64_to_2i16:
2355*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
2356*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    pushq %rbx
2357*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp0:
2358*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 16
2359*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    subq $16, %rsp
2360*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp1:
2361*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 32
2362*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp2:
2363*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_offset %rbx, -16
2364*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2365*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2366*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    callq __truncdfhf2
2367*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %ax, %bx
2368*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    shll $16, %ebx
2369*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2370*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    callq __truncdfhf2
2371*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movzwl %ax, %eax
2372*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    orl %ebx, %eax
2373*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovd %eax, %xmm0
2374*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    addq $16, %rsp
2375*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    popq %rbx
2376*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
2377*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <2 x double> %a0 to <2 x half>
2378*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x half> %1 to <2 x i16>
2379*9880d681SAndroid Build Coastguard Worker  ret <2 x i16> %2
2380*9880d681SAndroid Build Coastguard Worker}
2381*9880d681SAndroid Build Coastguard Worker
2382*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @cvt_4f64_to_4i16(<4 x double> %a0) {
2383*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_4i16:
2384*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
2386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp3:
2387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
2388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
2389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp4:
2390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
2391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $40, %rsp
2392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp5:
2393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 64
2394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp6:
2395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -24
2396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp7:
2397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -16
2398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2407*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2408*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r14d
2409*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r14d
2410*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2411*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2412*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
2421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %eax
2422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
2423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %r14, %rax
2424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
2425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $40, %rsp
2426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
2427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
2428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2429*9880d681SAndroid Build Coastguard Worker;
2430*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_4i16:
2431*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
2433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp3:
2434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
2435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
2436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp4:
2437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
2438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $40, %rsp
2439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp5:
2440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 64
2441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp6:
2442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -24
2443*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp7:
2444*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -16
2445*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2446*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2447*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2448*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2449*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2450*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2451*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2452*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2453*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2454*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2455*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r14d
2456*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r14d
2457*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2458*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
2459*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2460*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2461*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2462*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2463*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2464*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2465*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2466*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2467*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
2468*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %eax
2469*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
2470*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %r14, %rax
2471*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
2472*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $40, %rsp
2473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
2474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
2475*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2476*9880d681SAndroid Build Coastguard Worker;
2477*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_4i16:
2478*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2479*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
2480*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp3:
2481*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
2482*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
2483*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp4:
2484*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
2485*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $40, %rsp
2486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp5:
2487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 64
2488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp6:
2489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -24
2490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp7:
2491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -16
2492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2494*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2495*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2496*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2497*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2498*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2499*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2500*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r14d
2501*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r14d
2502*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
2504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
2512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %eax
2513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
2514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %r14, %rax
2515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
2516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $40, %rsp
2517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
2518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
2519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2520*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
2521*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
2522*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %2
2523*9880d681SAndroid Build Coastguard Worker}
2524*9880d681SAndroid Build Coastguard Worker
2525*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f64_to_8i16_undef(<4 x double> %a0) {
2526*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_8i16_undef:
2527*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
2529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp8:
2530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
2531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
2532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp9:
2533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
2534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $40, %rsp
2535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp10:
2536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 64
2537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp11:
2538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -24
2539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp12:
2540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -16
2541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2549*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2550*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2551*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r14d
2552*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r14d
2553*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2554*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2555*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2559*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
2564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %eax
2565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
2566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %r14, %rax
2567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
2568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $40, %rsp
2570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
2571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
2572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2573*9880d681SAndroid Build Coastguard Worker;
2574*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_8i16_undef:
2575*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
2577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp8:
2578*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
2579*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
2580*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp9:
2581*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
2582*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $40, %rsp
2583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp10:
2584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 64
2585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp11:
2586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -24
2587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp12:
2588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -16
2589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2598*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2599*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r14d
2600*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r14d
2601*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2602*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
2603*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2604*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2605*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2606*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2607*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2608*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2611*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
2612*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %eax
2613*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
2614*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %r14, %rax
2615*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
2616*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $40, %rsp
2618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
2619*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
2620*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2621*9880d681SAndroid Build Coastguard Worker;
2622*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_8i16_undef:
2623*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2624*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
2625*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp8:
2626*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
2627*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
2628*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp9:
2629*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
2630*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $40, %rsp
2631*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp10:
2632*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 64
2633*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp11:
2634*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -24
2635*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp12:
2636*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -16
2637*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2638*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2639*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2640*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2641*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2642*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2643*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2644*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2645*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r14d
2646*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r14d
2647*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2648*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
2649*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2650*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2651*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2652*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2653*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
2657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %eax
2658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
2659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %r14, %rax
2660*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
2661*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $40, %rsp
2663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
2664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
2665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2666*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
2667*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
2668*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2669*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
2670*9880d681SAndroid Build Coastguard Worker}
2671*9880d681SAndroid Build Coastguard Worker
2672*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_4f64_to_8i16_zero(<4 x double> %a0) {
2673*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_4f64_to_8i16_zero:
2674*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
2676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp13:
2677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
2678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
2679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp14:
2680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
2681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $40, %rsp
2682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp15:
2683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 64
2684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp16:
2685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -24
2686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp17:
2687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -16
2688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r14d
2699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r14d
2700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
2711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %eax
2712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
2713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %r14, %rax
2714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
2715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
2716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $40, %rsp
2717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
2718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
2719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2720*9880d681SAndroid Build Coastguard Worker;
2721*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_4f64_to_8i16_zero:
2722*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
2724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp13:
2725*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
2726*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
2727*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp14:
2728*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
2729*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $40, %rsp
2730*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp15:
2731*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 64
2732*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp16:
2733*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -24
2734*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp17:
2735*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -16
2736*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2737*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2738*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r14d
2747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r14d
2748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
2750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2753*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2754*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2755*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
2759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %eax
2760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
2761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %r14, %rax
2762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
2763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
2764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $40, %rsp
2765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
2766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
2767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2768*9880d681SAndroid Build Coastguard Worker;
2769*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_4f64_to_8i16_zero:
2770*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2771*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
2772*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp13:
2773*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
2774*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
2775*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp14:
2776*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
2777*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $40, %rsp
2778*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp15:
2779*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 64
2780*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp16:
2781*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -24
2782*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp17:
2783*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -16
2784*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
2785*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2786*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2787*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2788*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2789*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2790*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2791*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2792*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r14d
2793*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r14d
2794*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2795*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
2796*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2797*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2798*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2799*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
2800*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
2801*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2802*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
2803*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
2804*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %eax
2805*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
2806*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %r14, %rax
2807*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
2808*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
2809*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $40, %rsp
2810*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
2811*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
2812*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2813*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
2814*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
2815*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2816*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
2817*9880d681SAndroid Build Coastguard Worker}
2818*9880d681SAndroid Build Coastguard Worker
2819*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @cvt_8f64_to_8i16(<8 x double> %a0) {
2820*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: cvt_8f64_to_8i16:
2821*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2822*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r15
2823*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp18:
2824*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
2825*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
2826*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp19:
2827*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
2828*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
2829*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp20:
2830*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 32
2831*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $64, %rsp
2832*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp21:
2833*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 96
2834*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp22:
2835*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -32
2836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp23:
2837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -24
2838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp24:
2839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r15, -16
2840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups %ymm1, (%rsp) # 32-byte Spill
2841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
2842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2844*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2845*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2846*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2847*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
2848*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2849*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2850*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2851*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r15d
2852*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r15d
2853*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
2854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
2856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
2862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r14d
2864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r14d
2865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %r14
2866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %r15, %r14
2867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %r15d
2878*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %r15d
2879*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2881*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bx
2886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebx
2887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
2889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
2890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebx, %eax
2891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
2892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %r15, %rax
2893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
2894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %r14, %xmm1
2895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
2896*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $64, %rsp
2897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
2898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
2899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r15
2900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2901*9880d681SAndroid Build Coastguard Worker;
2902*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: cvt_8f64_to_8i16:
2903*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r15
2905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp18:
2906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
2907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
2908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp19:
2909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
2910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
2911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp20:
2912*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 32
2913*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $64, %rsp
2914*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp21:
2915*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 96
2916*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp22:
2917*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -32
2918*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp23:
2919*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -24
2920*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp24:
2921*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r15, -16
2922*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups %ymm1, (%rsp) # 32-byte Spill
2923*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
2924*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2925*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2926*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2927*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2928*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2929*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
2930*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r15d
2934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r15d
2935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
2936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
2937*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
2938*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2939*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2940*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2941*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2942*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2943*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
2944*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2945*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r14d
2946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r14d
2947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %r14
2948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %r15, %r14
2949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2951*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2952*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2953*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2954*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2955*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
2956*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2957*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2958*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2959*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %r15d
2960*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %r15d
2961*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
2962*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
2963*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
2964*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
2965*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2966*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2967*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bx
2968*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebx
2969*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
2970*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
2971*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
2972*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebx, %eax
2973*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
2974*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %r15, %rax
2975*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
2976*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %r14, %xmm1
2977*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
2978*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $64, %rsp
2979*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
2980*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
2981*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r15
2982*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2983*9880d681SAndroid Build Coastguard Worker;
2984*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: cvt_8f64_to_8i16:
2985*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2986*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r15
2987*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp18:
2988*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
2989*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
2990*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp19:
2991*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
2992*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
2993*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp20:
2994*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 32
2995*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $96, %rsp
2996*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp21:
2997*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 128
2998*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp22:
2999*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -32
3000*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp23:
3001*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -24
3002*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp24:
3003*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r15, -16
3004*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups %zmm0, (%rsp) # 64-byte Spill
3005*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3006*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3007*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
3008*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
3009*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %zmm0 # 64-byte Reload
3010*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
3011*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3012*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r15d
3013*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r15d
3014*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %zmm0 # 64-byte Reload
3015*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3016*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3017*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3018*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3019*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
3020*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
3021*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3022*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3023*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r14d
3024*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r14d
3025*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %r14
3026*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %r15, %r14
3027*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %zmm0 # 64-byte Reload
3028*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
3029*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3030*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3031*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3032*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
3033*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
3034*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3035*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3036*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3037*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %r15d
3038*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %r15d
3039*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3040*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3041*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3042*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3043*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3044*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bx
3045*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebx
3046*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3047*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3048*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
3049*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebx, %eax
3050*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
3051*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %r15, %rax
3052*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
3053*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %r14, %xmm1
3054*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
3055*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $96, %rsp
3056*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
3057*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
3058*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r15
3059*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3060*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <8 x double> %a0 to <8 x half>
3061*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x half> %1 to <8 x i16>
3062*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3063*9880d681SAndroid Build Coastguard Worker}
3064*9880d681SAndroid Build Coastguard Worker
3065*9880d681SAndroid Build Coastguard Worker;
3066*9880d681SAndroid Build Coastguard Worker; Double to Half (Store)
3067*9880d681SAndroid Build Coastguard Worker;
3068*9880d681SAndroid Build Coastguard Worker
3069*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_f64_to_i16(double %a0, i16* %a1) {
3070*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_f64_to_i16:
3071*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
3072*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    pushq %rbx
3073*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp25:
3074*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 16
3075*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp26:
3076*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_offset %rbx, -16
3077*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rdi, %rbx
3078*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    callq __truncdfhf2
3079*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %ax, (%rbx)
3080*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    popq %rbx
3081*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
3082*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc double %a0 to half
3083*9880d681SAndroid Build Coastguard Worker  %2 = bitcast half %1 to i16
3084*9880d681SAndroid Build Coastguard Worker  store i16 %2, i16* %a1
3085*9880d681SAndroid Build Coastguard Worker  ret void
3086*9880d681SAndroid Build Coastguard Worker}
3087*9880d681SAndroid Build Coastguard Worker
3088*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_2f64_to_2i16(<2 x double> %a0, <2 x i16>* %a1) {
3089*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_cvt_2f64_to_2i16:
3090*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
3091*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    pushq %rbp
3092*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp27:
3093*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 16
3094*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    pushq %rbx
3095*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp28:
3096*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 24
3097*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    subq $24, %rsp
3098*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp29:
3099*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_def_cfa_offset 48
3100*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp30:
3101*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_offset %rbx, -24
3102*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:  .Ltmp31:
3103*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    .cfi_offset %rbp, -16
3104*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movq %rdi, %rbx
3105*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3106*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3107*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    callq __truncdfhf2
3108*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movl %eax, %ebp
3109*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3110*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    callq __truncdfhf2
3111*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %ax, (%rbx)
3112*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw %bp, 2(%rbx)
3113*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    addq $24, %rsp
3114*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    popq %rbx
3115*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    popq %rbp
3116*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
3117*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <2 x double> %a0 to <2 x half>
3118*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x half> %1 to <2 x i16>
3119*9880d681SAndroid Build Coastguard Worker  store <2 x i16> %2, <2 x i16>* %a1
3120*9880d681SAndroid Build Coastguard Worker  ret void
3121*9880d681SAndroid Build Coastguard Worker}
3122*9880d681SAndroid Build Coastguard Worker
3123*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_4i16(<4 x double> %a0, <4 x i16>* %a1) {
3124*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_4i16:
3125*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbp
3127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp32:
3128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
3129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r15
3130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp33:
3131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
3132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
3133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp34:
3134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 32
3135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
3136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp35:
3137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 40
3138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $88, %rsp
3139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp36:
3140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 128
3141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp37:
3142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -40
3143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp38:
3144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -32
3145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp39:
3146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r15, -24
3147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp40:
3148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbp, -16
3149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %rbx
3150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r14d
3155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r15d
3162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %ebp
3167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 4(%rbx)
3170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %bp, (%rbx)
3171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r15w, 6(%rbx)
3172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r14w, 2(%rbx)
3173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $88, %rsp
3174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
3175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
3176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r15
3177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbp
3178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3179*9880d681SAndroid Build Coastguard Worker;
3180*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_4i16:
3181*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbp
3183*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp32:
3184*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
3185*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r15
3186*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp33:
3187*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
3188*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
3189*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp34:
3190*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 32
3191*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
3192*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp35:
3193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 40
3194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $88, %rsp
3195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp36:
3196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 128
3197*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp37:
3198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -40
3199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp38:
3200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -32
3201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp39:
3202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r15, -24
3203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp40:
3204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbp, -16
3205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %rbx
3206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r14d
3211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
3213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r15d
3218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %ebp
3223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 4(%rbx)
3226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %bp, (%rbx)
3227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r15w, 6(%rbx)
3228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r14w, 2(%rbx)
3229*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $88, %rsp
3230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
3231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
3232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r15
3233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbp
3234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3235*9880d681SAndroid Build Coastguard Worker;
3236*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_4i16:
3237*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3238*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbp
3239*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp32:
3240*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
3241*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r15
3242*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp33:
3243*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
3244*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
3245*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp34:
3246*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 32
3247*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
3248*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp35:
3249*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 40
3250*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $88, %rsp
3251*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp36:
3252*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 128
3253*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp37:
3254*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -40
3255*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp38:
3256*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -32
3257*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp39:
3258*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r15, -24
3259*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp40:
3260*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbp, -16
3261*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %rbx
3262*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3263*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3264*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3265*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r14d
3266*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3267*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3268*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3269*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r15d
3272*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3273*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3274*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3275*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %ebp
3276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 4(%rbx)
3279*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %bp, (%rbx)
3280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r15w, 6(%rbx)
3281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r14w, 2(%rbx)
3282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $88, %rsp
3283*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
3284*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
3285*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r15
3286*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbp
3287*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3288*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
3289*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
3290*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %2, <4 x i16>* %a1
3291*9880d681SAndroid Build Coastguard Worker  ret void
3292*9880d681SAndroid Build Coastguard Worker}
3293*9880d681SAndroid Build Coastguard Worker
3294*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_8i16_undef(<4 x double> %a0, <8 x i16>* %a1) {
3295*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_8i16_undef:
3296*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbp
3298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp41:
3299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
3300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
3301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp42:
3302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
3303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
3304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp43:
3305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 32
3306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $32, %rsp
3307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp44:
3308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 64
3309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp45:
3310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -32
3311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp46:
3312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -24
3313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp47:
3314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbp, -16
3315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %r14
3316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bp
3321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebp
3322*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %ebx
3327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebp, %ebx
3328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3333*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bp
3335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebp
3336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
3339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebp, %eax
3340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
3341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %rbx, %rax
3342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
3343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa %xmm0, (%r14)
3345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $32, %rsp
3346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
3347*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
3348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbp
3349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3350*9880d681SAndroid Build Coastguard Worker;
3351*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_8i16_undef:
3352*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbp
3354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp41:
3355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
3356*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
3357*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp42:
3358*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
3359*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
3360*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp43:
3361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 32
3362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $32, %rsp
3363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp44:
3364*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 64
3365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp45:
3366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -32
3367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp46:
3368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -24
3369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp47:
3370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbp, -16
3371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %r14
3372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bp
3377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebp
3378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %ebx
3383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebp, %ebx
3384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
3386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bp
3391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebp
3392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
3395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebp, %eax
3396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
3397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %rbx, %rax
3398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
3399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa %xmm0, (%r14)
3401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $32, %rsp
3402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
3403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
3404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbp
3405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3406*9880d681SAndroid Build Coastguard Worker;
3407*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_8i16_undef:
3408*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbp
3410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp41:
3411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
3412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
3413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp42:
3414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
3415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
3416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp43:
3417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 32
3418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $32, %rsp
3419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp44:
3420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 64
3421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp45:
3422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -32
3423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp46:
3424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -24
3425*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp47:
3426*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbp, -16
3427*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %r14
3428*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3429*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3430*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3431*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bp
3432*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebp
3433*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3434*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3435*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %ebx
3437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebp, %ebx
3438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bp
3444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebp
3445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
3448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebp, %eax
3449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
3450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %rbx, %rax
3451*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
3452*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3453*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa %xmm0, (%r14)
3454*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $32, %rsp
3455*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
3456*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
3457*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbp
3458*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3459*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
3460*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
3461*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3462*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %a1
3463*9880d681SAndroid Build Coastguard Worker  ret void
3464*9880d681SAndroid Build Coastguard Worker}
3465*9880d681SAndroid Build Coastguard Worker
3466*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_4f64_to_8i16_zero(<4 x double> %a0, <8 x i16>* %a1) {
3467*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_4f64_to_8i16_zero:
3468*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbp
3470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp48:
3471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
3472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
3473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp49:
3474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
3475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
3476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp50:
3477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 32
3478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $32, %rsp
3479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp51:
3480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 64
3481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp52:
3482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -32
3483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp53:
3484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -24
3485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp54:
3486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbp, -16
3487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %r14
3488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bp
3493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebp
3494*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3495*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3496*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3497*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3498*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %ebx
3499*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebp, %ebx
3500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3503*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3504*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3505*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3506*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, %bp
3507*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shll $16, %ebp
3508*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3509*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3510*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
3511*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orl %ebp, %eax
3512*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    shlq $32, %rax
3513*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    orq %rbx, %rax
3514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm0
3515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa %xmm0, (%r14)
3517*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $32, %rsp
3518*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
3519*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
3520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbp
3521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3522*9880d681SAndroid Build Coastguard Worker;
3523*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_4f64_to_8i16_zero:
3524*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3525*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbp
3526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp48:
3527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
3528*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
3529*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp49:
3530*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
3531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
3532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp50:
3533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 32
3534*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $32, %rsp
3535*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp51:
3536*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 64
3537*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp52:
3538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -32
3539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp53:
3540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -24
3541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp54:
3542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbp, -16
3543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %r14
3544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bp
3549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebp
3550*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3551*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3552*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3553*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3554*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %ebx
3555*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebp, %ebx
3556*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3557*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
3558*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3559*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3560*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3561*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3562*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, %bp
3563*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shll $16, %ebp
3564*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3565*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
3567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orl %ebp, %eax
3568*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    shlq $32, %rax
3569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    orq %rbx, %rax
3570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rax, %xmm0
3571*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3572*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa %xmm0, (%r14)
3573*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $32, %rsp
3574*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
3575*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
3576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbp
3577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3578*9880d681SAndroid Build Coastguard Worker;
3579*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_4f64_to_8i16_zero:
3580*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3581*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbp
3582*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp48:
3583*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
3584*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
3585*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp49:
3586*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
3587*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
3588*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp50:
3589*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 32
3590*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $32, %rsp
3591*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp51:
3592*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 64
3593*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp52:
3594*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -32
3595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp53:
3596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -24
3597*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp54:
3598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbp, -16
3599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %r14
3600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill
3601*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3602*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3603*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bp
3604*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebp
3605*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload
3606*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3607*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3608*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %ebx
3609*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebp, %ebx
3610*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload
3611*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3612*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill
3613*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3614*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3615*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, %bp
3616*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shll $16, %ebp
3617*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload
3618*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3619*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
3620*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orl %ebp, %eax
3621*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    shlq $32, %rax
3622*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    orq %rbx, %rax
3623*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
3624*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3625*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa %xmm0, (%r14)
3626*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $32, %rsp
3627*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
3628*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
3629*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbp
3630*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3631*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <4 x double> %a0 to <4 x half>
3632*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x half> %1 to <4 x i16>
3633*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3634*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %a1
3635*9880d681SAndroid Build Coastguard Worker  ret void
3636*9880d681SAndroid Build Coastguard Worker}
3637*9880d681SAndroid Build Coastguard Worker
3638*9880d681SAndroid Build Coastguard Workerdefine void @store_cvt_8f64_to_8i16(<8 x double> %a0, <8 x i16>* %a1) {
3639*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: store_cvt_8f64_to_8i16:
3640*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbp
3642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp55:
3643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 16
3644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r15
3645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp56:
3646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 24
3647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r14
3648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp57:
3649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 32
3650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r13
3651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp58:
3652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 40
3653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %r12
3654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp59:
3655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 48
3656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    pushq %rbx
3657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp60:
3658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 56
3659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    subq $136, %rsp
3660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp61:
3661*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_def_cfa_offset 192
3662*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp62:
3663*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbx, -56
3664*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp63:
3665*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r12, -48
3666*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp64:
3667*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r13, -40
3668*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp65:
3669*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r14, -32
3670*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp66:
3671*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %r15, -24
3672*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:  .Ltmp67:
3673*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    .cfi_offset %rbp, -16
3674*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movq %rdi, %rbx
3675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups %ymm1, {{[0-9]+}}(%rsp) # 32-byte Spill
3676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r12d
3693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r13d
3700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %ebp
3705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r14d
3708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl %eax, %r15d
3713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    callq __truncdfhf2
3715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 12(%rbx)
3716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r15w, 8(%rbx)
3717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r14w, 4(%rbx)
3718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %bp, (%rbx)
3719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r13w, 14(%rbx)
3720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %r12w, 10(%rbx)
3721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 6(%rbx)
3723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movw %ax, 2(%rbx)
3725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    addq $136, %rsp
3726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbx
3727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r12
3728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r13
3729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r14
3730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %r15
3731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    popq %rbp
3732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3733*9880d681SAndroid Build Coastguard Worker;
3734*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: store_cvt_8f64_to_8i16:
3735*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3736*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbp
3737*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp55:
3738*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 16
3739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r15
3740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp56:
3741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 24
3742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r14
3743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp57:
3744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 32
3745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r13
3746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp58:
3747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 40
3748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %r12
3749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp59:
3750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 48
3751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    pushq %rbx
3752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp60:
3753*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 56
3754*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    subq $136, %rsp
3755*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp61:
3756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_def_cfa_offset 192
3757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp62:
3758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbx, -56
3759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp63:
3760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r12, -48
3761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp64:
3762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r13, -40
3763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp65:
3764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r14, -32
3765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp66:
3766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %r15, -24
3767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:  .Ltmp67:
3768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    .cfi_offset %rbp, -16
3769*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movq %rdi, %rbx
3770*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups %ymm1, {{[0-9]+}}(%rsp) # 32-byte Spill
3771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3773*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3774*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
3778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r12d
3788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm0
3790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r13d
3795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %ebp
3800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r14d
3803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl %eax, %r15d
3808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    callq __truncdfhf2
3810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 12(%rbx)
3811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r15w, 8(%rbx)
3812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r14w, 4(%rbx)
3813*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %bp, (%rbx)
3814*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r13w, 14(%rbx)
3815*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %r12w, 10(%rbx)
3816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 6(%rbx)
3818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movw %ax, 2(%rbx)
3820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    addq $136, %rsp
3821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbx
3822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r12
3823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r13
3824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r14
3825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %r15
3826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    popq %rbp
3827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3828*9880d681SAndroid Build Coastguard Worker;
3829*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: store_cvt_8f64_to_8i16:
3830*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3831*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbp
3832*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp55:
3833*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 16
3834*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r15
3835*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp56:
3836*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 24
3837*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r14
3838*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp57:
3839*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 32
3840*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r13
3841*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp58:
3842*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 40
3843*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %r12
3844*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp59:
3845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 48
3846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    pushq %rbx
3847*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp60:
3848*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 56
3849*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    subq $200, %rsp
3850*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp61:
3851*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_def_cfa_offset 256
3852*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp62:
3853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbx, -56
3854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp63:
3855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r12, -48
3856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp64:
3857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r13, -40
3858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp65:
3859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r14, -32
3860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp66:
3861*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %r15, -24
3862*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:  .Ltmp67:
3863*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    .cfi_offset %rbp, -16
3864*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movq %rdi, %rbx
3865*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp) # 64-byte Spill
3866*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3867*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3868*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3869*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload
3870*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3871*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3872*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3873*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3874*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
3875*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload
3876*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf64x4 $1, %zmm0, %ymm0
3877*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd %ymm0, {{[0-9]+}}(%rsp) # 32-byte Spill
3878*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r12d
3881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm0
3883*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
3884*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
3885*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3886*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r13d
3887*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups {{[0-9]+}}(%rsp), %zmm0 # 64-byte Reload
3888*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
3889*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3890*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %ebp
3891*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3892*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3893*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r14d
3894*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
3895*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl %eax, %r15d
3898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovaps {{[0-9]+}}(%rsp), %xmm0 # 16-byte Reload
3899*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    callq __truncdfhf2
3900*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 12(%rbx)
3901*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r15w, 8(%rbx)
3902*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r14w, 4(%rbx)
3903*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %bp, (%rbx)
3904*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r13w, 14(%rbx)
3905*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %r12w, 10(%rbx)
3906*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3907*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 6(%rbx)
3908*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax # 2-byte Folded Reload
3909*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movw %ax, 2(%rbx)
3910*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    addq $200, %rsp
3911*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbx
3912*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r12
3913*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r13
3914*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r14
3915*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %r15
3916*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    popq %rbp
3917*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3918*9880d681SAndroid Build Coastguard Worker  %1 = fptrunc <8 x double> %a0 to <8 x half>
3919*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x half> %1 to <8 x i16>
3920*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %a1
3921*9880d681SAndroid Build Coastguard Worker  ret void
3922*9880d681SAndroid Build Coastguard Worker}
3923