xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-256-v4.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 -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX1
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX2
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=knl -mattr=+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0000(<4 x double> %a, <4 x double> %b) {
9*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0000:
10*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
11*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
12*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
13*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0000:
16*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
17*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
18*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
19*9880d681SAndroid Build Coastguard Worker;
20*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0000:
21*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
22*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm0
23*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
24*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
25*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0001(<4 x double> %a, <4 x double> %b) {
29*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0001:
30*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm0[0,0]
32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
34*9880d681SAndroid Build Coastguard Worker;
35*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0001:
36*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
37*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
38*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
39*9880d681SAndroid Build Coastguard Worker;
40*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0001:
41*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
42*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
43*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
44*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>
45*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0020(<4 x double> %a, <4 x double> %b) {
49*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0020:
50*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
51*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
52*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
53*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
54*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
55*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
56*9880d681SAndroid Build Coastguard Worker;
57*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0020:
58*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
59*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]
60*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
61*9880d681SAndroid Build Coastguard Worker;
62*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0020:
63*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
64*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]
65*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
66*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>
67*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0300(<4 x double> %a, <4 x double> %b) {
71*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0300:
72*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
73*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
74*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm1 = ymm1[0,1,2,2]
75*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3]
76*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker;
78*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0300:
79*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]
81*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
82*9880d681SAndroid Build Coastguard Worker;
83*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0300:
84*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
85*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]
86*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
87*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>
88*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1000(<4 x double> %a, <4 x double> %b) {
92*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_1000:
93*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm0[1,0]
95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker;
99*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_1000:
100*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]
102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker;
104*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_1000:
105*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
106*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]
107*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
108*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
109*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) {
113*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_2200:
114*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
118*9880d681SAndroid Build Coastguard Worker;
119*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_2200:
120*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]
122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
123*9880d681SAndroid Build Coastguard Worker;
124*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_2200:
125*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
126*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]
127*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
128*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>
129*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3330(<4 x double> %a, <4 x double> %b) {
133*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3330:
134*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3]
137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,2]
138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
139*9880d681SAndroid Build Coastguard Worker;
140*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3330:
141*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]
143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
144*9880d681SAndroid Build Coastguard Worker;
145*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3330:
146*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
147*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]
148*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
149*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
150*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3210(<4 x double> %a, <4 x double> %b) {
154*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3210:
155*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
159*9880d681SAndroid Build Coastguard Worker;
160*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3210:
161*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]
163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker;
165*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3210:
166*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
167*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]
168*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
169*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
170*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0023(<4 x double> %a, <4 x double> %b) {
174*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0023:
175*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
176*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,3]
177*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 3>
180*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) {
184*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0022:
185*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
186*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
187*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
188*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
189*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
190*9880d681SAndroid Build Coastguard Worker}
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64mem_0022(<4 x double>* %ptr, <4 x double> %b) {
193*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64mem_0022:
194*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
195*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = mem[0,0,2,2]
196*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker  %a = load  <4 x double>,  <4 x double>* %ptr
198*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
199*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1032(<4 x double> %a, <4 x double> %b) {
203*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1032:
204*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
206*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
208*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1133(<4 x double> %a, <4 x double> %b) {
212*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1133:
213*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
214*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3]
215*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
216*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
217*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1023(<4 x double> %a, <4 x double> %b) {
221*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1023:
222*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
223*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3]
224*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
225*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
226*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1022(<4 x double> %a, <4 x double> %b) {
230*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1022:
231*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
232*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,2]
233*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
234*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 2>
235*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0423(<4 x double> %a, <4 x double> %b) {
239*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0423:
240*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]
242*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3]
243*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
244*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 3>
245*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
246*9880d681SAndroid Build Coastguard Worker}
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0462(<4 x double> %a, <4 x double> %b) {
249*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0462:
250*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
251*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2]
252*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
253*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3]
254*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
255*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 6, i32 2>
256*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
257*9880d681SAndroid Build Coastguard Worker}
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0426(<4 x double> %a, <4 x double> %b) {
260*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0426:
261*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
264*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
265*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1537(<4 x double> %a, <4 x double> %b) {
269*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1537:
270*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
271*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
272*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
273*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
274*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4062(<4 x double> %a, <4 x double> %b) {
278*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_4062:
279*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
280*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
281*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
282*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2>
283*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5173(<4 x double> %a, <4 x double> %b) {
287*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_5173:
288*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
289*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
290*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
291*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 7, i32 3>
292*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) {
296*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_5163:
297*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
298*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[2],ymm0[3]
299*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
300*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3>
301*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0527(<4 x double> %a, <4 x double> %b) {
305*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0527:
306*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
307*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
308*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
309*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
310*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
311*9880d681SAndroid Build Coastguard Worker}
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4163(<4 x double> %a, <4 x double> %b) {
314*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_4163:
315*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
316*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3]
317*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
318*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
319*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
320*9880d681SAndroid Build Coastguard Worker}
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0145(<4 x double> %a, <4 x double> %b) {
323*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0145:
324*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
327*9880d681SAndroid Build Coastguard Worker;
328*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0145:
329*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
332*9880d681SAndroid Build Coastguard Worker;
333*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0145:
334*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
335*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinsertf32x4 $1, %xmm1, %ymm0, %ymm0
336*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
337*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
338*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4501(<4 x double> %a, <4 x double> %b) {
342*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_4501:
343*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
346*9880d681SAndroid Build Coastguard Worker;
347*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_4501:
348*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
349*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
351*9880d681SAndroid Build Coastguard Worker;
352*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_4501:
353*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
354*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinsertf32x4 $1, %xmm0, %ymm1, %ymm0
355*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
356*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>
357*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
358*9880d681SAndroid Build Coastguard Worker}
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0167(<4 x double> %a, <4 x double> %b) {
361*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0167:
362*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
363*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]
364*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
365*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
366*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1054(<4 x double> %a, <4 x double> %b) {
370*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_1054:
371*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
375*9880d681SAndroid Build Coastguard Worker;
376*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_1054:
377*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
381*9880d681SAndroid Build Coastguard Worker;
382*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_1054:
383*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
384*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinsertf32x4 $1, %xmm1, %ymm0, %ymm0
385*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
386*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
387*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4>
388*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
389*9880d681SAndroid Build Coastguard Worker}
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3254(<4 x double> %a, <4 x double> %b) {
392*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3254:
393*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
397*9880d681SAndroid Build Coastguard Worker;
398*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3254:
399*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
403*9880d681SAndroid Build Coastguard Worker;
404*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3254:
405*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
406*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
407*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
408*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
409*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4>
410*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
411*9880d681SAndroid Build Coastguard Worker}
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3276(<4 x double> %a, <4 x double> %b) {
414*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3276:
415*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
419*9880d681SAndroid Build Coastguard Worker;
420*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3276:
421*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
425*9880d681SAndroid Build Coastguard Worker;
426*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3276:
427*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
428*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
429*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
430*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
431*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6>
432*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
433*9880d681SAndroid Build Coastguard Worker}
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1076(<4 x double> %a, <4 x double> %b) {
436*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1076:
437*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
438*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]
439*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
440*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
441*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6>
442*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
443*9880d681SAndroid Build Coastguard Worker}
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0415(<4 x double> %a, <4 x double> %b) {
446*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0415:
447*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]
449*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
450*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
451*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
452*9880d681SAndroid Build Coastguard Worker;
453*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0415:
454*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
455*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]
456*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
457*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
458*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
459*9880d681SAndroid Build Coastguard Worker;
460*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0415:
461*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
462*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]
463*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
464*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3]
465*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
466*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
467*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
468*9880d681SAndroid Build Coastguard Worker}
469*9880d681SAndroid Build Coastguard Worker
470*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_u062(<4 x double> %a, <4 x double> %b) {
471*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_u062:
472*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
473*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
474*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
475*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 undef, i32 0, i32 6, i32 2>
476*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
477*9880d681SAndroid Build Coastguard Worker}
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_15uu(<4 x double> %a, <4 x double> %b) {
480*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_15uu:
481*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
482*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
483*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
484*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 undef, i32 undef>
485*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
486*9880d681SAndroid Build Coastguard Worker}
487*9880d681SAndroid Build Coastguard Worker
488*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_11uu(<4 x double> %a, <4 x double> %b) {
489*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_11uu:
490*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
491*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,1]
492*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
493*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 undef, i32 undef>
494*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
495*9880d681SAndroid Build Coastguard Worker}
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_22uu(<4 x double> %a, <4 x double> %b) {
498*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_22uu:
499*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
503*9880d681SAndroid Build Coastguard Worker;
504*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_22uu:
505*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,3]
507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
508*9880d681SAndroid Build Coastguard Worker;
509*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_22uu:
510*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
511*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,3]
512*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
513*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 undef, i32 undef>
514*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
515*9880d681SAndroid Build Coastguard Worker}
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3333(<4 x double> %a, <4 x double> %b) {
518*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3333:
519*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3]
521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
523*9880d681SAndroid Build Coastguard Worker;
524*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3333:
525*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]
527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker;
529*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3333:
530*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
531*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]
532*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
533*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
534*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0000(<4 x i64> %a, <4 x i64> %b) {
538*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0000:
539*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
543*9880d681SAndroid Build Coastguard Worker;
544*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0000:
545*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
548*9880d681SAndroid Build Coastguard Worker;
549*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0000:
550*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
551*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq %xmm0, %ymm0
552*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
553*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
554*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
555*9880d681SAndroid Build Coastguard Worker}
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0001(<4 x i64> %a, <4 x i64> %b) {
558*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0001:
559*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]
561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
563*9880d681SAndroid Build Coastguard Worker;
564*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0001:
565*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]
567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
568*9880d681SAndroid Build Coastguard Worker;
569*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0001:
570*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
571*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]
572*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
573*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>
574*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
575*9880d681SAndroid Build Coastguard Worker}
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0020(<4 x i64> %a, <4 x i64> %b) {
578*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0020:
579*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
585*9880d681SAndroid Build Coastguard Worker;
586*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0020:
587*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,2,0]
589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
590*9880d681SAndroid Build Coastguard Worker;
591*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0020:
592*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
593*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,2,0]
594*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
595*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>
596*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
597*9880d681SAndroid Build Coastguard Worker}
598*9880d681SAndroid Build Coastguard Worker
599*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0112(<4 x i64> %a, <4 x i64> %b) {
600*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0112:
601*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vshufpd {{.*#+}} xmm1 = xmm0[1],xmm1[0]
604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
606*9880d681SAndroid Build Coastguard Worker;
607*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0112:
608*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2]
610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
611*9880d681SAndroid Build Coastguard Worker;
612*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0112:
613*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
614*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2]
615*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
616*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 1, i32 2>
617*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
618*9880d681SAndroid Build Coastguard Worker}
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0300(<4 x i64> %a, <4 x i64> %b) {
621*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0300:
622*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm1 = ymm1[0,1,2,2]
625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3]
626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
627*9880d681SAndroid Build Coastguard Worker;
628*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0300:
629*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
630*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,0]
631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
632*9880d681SAndroid Build Coastguard Worker;
633*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0300:
634*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
635*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,0]
636*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
637*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>
638*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
639*9880d681SAndroid Build Coastguard Worker}
640*9880d681SAndroid Build Coastguard Worker
641*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1000(<4 x i64> %a, <4 x i64> %b) {
642*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1000:
643*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
648*9880d681SAndroid Build Coastguard Worker;
649*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1000:
650*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0]
652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
653*9880d681SAndroid Build Coastguard Worker;
654*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1000:
655*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
656*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0]
657*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
658*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
659*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
660*9880d681SAndroid Build Coastguard Worker}
661*9880d681SAndroid Build Coastguard Worker
662*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_2200(<4 x i64> %a, <4 x i64> %b) {
663*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_2200:
664*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
665*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
666*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
667*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
668*9880d681SAndroid Build Coastguard Worker;
669*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_2200:
670*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0]
672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
673*9880d681SAndroid Build Coastguard Worker;
674*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_2200:
675*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
676*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0]
677*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
678*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>
679*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
680*9880d681SAndroid Build Coastguard Worker}
681*9880d681SAndroid Build Coastguard Worker
682*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3330(<4 x i64> %a, <4 x i64> %b) {
683*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3330:
684*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3]
687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,2]
688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
689*9880d681SAndroid Build Coastguard Worker;
690*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3330:
691*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
692*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,0]
693*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
694*9880d681SAndroid Build Coastguard Worker;
695*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3330:
696*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
697*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,0]
698*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
699*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
700*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
701*9880d681SAndroid Build Coastguard Worker}
702*9880d681SAndroid Build Coastguard Worker
703*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3210(<4 x i64> %a, <4 x i64> %b) {
704*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3210:
705*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
709*9880d681SAndroid Build Coastguard Worker;
710*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3210:
711*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
712*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
714*9880d681SAndroid Build Coastguard Worker;
715*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3210:
716*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
717*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
718*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
719*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
720*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
721*9880d681SAndroid Build Coastguard Worker}
722*9880d681SAndroid Build Coastguard Worker
723*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0124(<4 x i64> %a, <4 x i64> %b) {
724*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0124:
725*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]
727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3]
729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
730*9880d681SAndroid Build Coastguard Worker;
731*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0124:
732*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
733*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq %xmm1, %ymm1
734*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
735*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
736*9880d681SAndroid Build Coastguard Worker;
737*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0124:
738*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
739*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq %xmm1, %ymm1
740*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
741*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
742*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 4>
743*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
744*9880d681SAndroid Build Coastguard Worker}
745*9880d681SAndroid Build Coastguard Worker
746*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0142(<4 x i64> %a, <4 x i64> %b) {
747*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0142:
748*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[0,1,2,2]
751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3]
752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
753*9880d681SAndroid Build Coastguard Worker;
754*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0142:
755*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,2,2]
758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
760*9880d681SAndroid Build Coastguard Worker;
761*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0142:
762*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
763*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm1
764*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,2,2]
765*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
766*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
767*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2>
768*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
769*9880d681SAndroid Build Coastguard Worker}
770*9880d681SAndroid Build Coastguard Worker
771*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0412(<4 x i64> %a, <4 x i64> %b) {
772*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0412:
773*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1],xmm2[0]
776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]
778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3]
779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
780*9880d681SAndroid Build Coastguard Worker;
781*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0412:
782*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq %xmm1, %xmm1
784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2]
785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]
786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
787*9880d681SAndroid Build Coastguard Worker;
788*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0412:
789*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
790*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq %xmm1, %xmm1
791*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2]
792*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]
793*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
794*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 2>
795*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
796*9880d681SAndroid Build Coastguard Worker}
797*9880d681SAndroid Build Coastguard Worker
798*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4012(<4 x i64> %a, <4 x i64> %b) {
799*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4012:
800*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
801*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
802*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1],xmm2[0]
803*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
804*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
805*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3]
806*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
807*9880d681SAndroid Build Coastguard Worker;
808*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4012:
809*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,2]
811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]
812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
813*9880d681SAndroid Build Coastguard Worker;
814*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4012:
815*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
816*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,2]
817*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]
818*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
819*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 2>
820*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
821*9880d681SAndroid Build Coastguard Worker}
822*9880d681SAndroid Build Coastguard Worker
823*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0145(<4 x i64> %a, <4 x i64> %b) {
824*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0145:
825*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
826*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
827*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
828*9880d681SAndroid Build Coastguard Worker;
829*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0145:
830*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
833*9880d681SAndroid Build Coastguard Worker;
834*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0145:
835*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
836*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
837*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
838*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
839*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
840*9880d681SAndroid Build Coastguard Worker}
841*9880d681SAndroid Build Coastguard Worker
842*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0451(<4 x i64> %a, <4 x i64> %b) {
843*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0451:
844*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
845*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm1[1],xmm0[1]
846*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
847*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
848*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
849*9880d681SAndroid Build Coastguard Worker;
850*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0451:
851*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
852*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,0,1,3]
853*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,2,1]
854*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5],ymm0[6,7]
855*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
856*9880d681SAndroid Build Coastguard Worker;
857*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0451:
858*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
859*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,0,1,3]
860*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,2,1]
861*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5],ymm0[6,7]
862*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
863*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1>
864*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
865*9880d681SAndroid Build Coastguard Worker}
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4501(<4 x i64> %a, <4 x i64> %b) {
868*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4501:
869*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
872*9880d681SAndroid Build Coastguard Worker;
873*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4501:
874*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
875*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
876*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
877*9880d681SAndroid Build Coastguard Worker;
878*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4501:
879*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
880*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm0, %ymm1, %ymm0
881*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
882*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>
883*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
884*9880d681SAndroid Build Coastguard Worker}
885*9880d681SAndroid Build Coastguard Worker
886*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4015(<4 x i64> %a, <4 x i64> %b) {
887*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4015:
888*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]
890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
893*9880d681SAndroid Build Coastguard Worker;
894*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4015:
895*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,2,1]
897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,3]
898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]
899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
900*9880d681SAndroid Build Coastguard Worker;
901*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4015:
902*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
903*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,2,1]
904*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,3]
905*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]
906*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
907*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 5>
908*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
909*9880d681SAndroid Build Coastguard Worker}
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_2u35(<4 x i64> %a, <4 x i64> %b) {
912*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_2u35:
913*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
914*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
915*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm0[1],xmm1[1]
916*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
917*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
918*9880d681SAndroid Build Coastguard Worker;
919*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_2u35:
920*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
921*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]
922*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,1,3,1]
923*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
924*9880d681SAndroid Build Coastguard Worker;
925*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_2u35:
926*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
927*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]
928*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,1,3,1]
929*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
930*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 undef, i32 3, i32 5>
931*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
932*9880d681SAndroid Build Coastguard Worker}
933*9880d681SAndroid Build Coastguard Worker
934*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1251(<4 x i64> %a, <4 x i64> %b) {
935*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1251:
936*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
937*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
938*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm2[0],ymm0[2],ymm2[3]
939*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
940*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
941*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3]
942*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
943*9880d681SAndroid Build Coastguard Worker;
944*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1251:
945*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,1,3]
947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,2,2,1]
948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
950*9880d681SAndroid Build Coastguard Worker;
951*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1251:
952*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
953*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,1,3]
954*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,2,2,1]
955*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
956*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
957*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 2, i32 5, i32 1>
958*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
959*9880d681SAndroid Build Coastguard Worker}
960*9880d681SAndroid Build Coastguard Worker
961*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1054(<4 x i64> %a, <4 x i64> %b) {
962*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1054:
963*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
964*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
965*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
966*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
967*9880d681SAndroid Build Coastguard Worker;
968*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1054:
969*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
970*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
971*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
972*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
973*9880d681SAndroid Build Coastguard Worker;
974*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1054:
975*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
976*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
977*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
978*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
979*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4>
980*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
981*9880d681SAndroid Build Coastguard Worker}
982*9880d681SAndroid Build Coastguard Worker
983*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3254(<4 x i64> %a, <4 x i64> %b) {
984*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3254:
985*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
989*9880d681SAndroid Build Coastguard Worker;
990*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3254:
991*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
992*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
993*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
994*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
995*9880d681SAndroid Build Coastguard Worker;
996*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3254:
997*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
998*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]
999*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1000*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1001*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4>
1002*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1003*9880d681SAndroid Build Coastguard Worker}
1004*9880d681SAndroid Build Coastguard Worker
1005*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3276(<4 x i64> %a, <4 x i64> %b) {
1006*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3276:
1007*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
1010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1011*9880d681SAndroid Build Coastguard Worker;
1012*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3276:
1013*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1014*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1015*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1016*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1017*9880d681SAndroid Build Coastguard Worker;
1018*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3276:
1019*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1020*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1021*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1022*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1023*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6>
1024*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1025*9880d681SAndroid Build Coastguard Worker}
1026*9880d681SAndroid Build Coastguard Worker
1027*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1076(<4 x i64> %a, <4 x i64> %b) {
1028*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1076:
1029*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]
1031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
1032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1033*9880d681SAndroid Build Coastguard Worker;
1034*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1076:
1035*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1036*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1037*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1039*9880d681SAndroid Build Coastguard Worker;
1040*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1076:
1041*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1042*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1043*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]
1044*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1045*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6>
1046*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1047*9880d681SAndroid Build Coastguard Worker}
1048*9880d681SAndroid Build Coastguard Worker
1049*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0415(<4 x i64> %a, <4 x i64> %b) {
1050*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0415:
1051*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]
1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1056*9880d681SAndroid Build Coastguard Worker;
1057*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0415:
1058*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1]
1060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
1061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
1062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1063*9880d681SAndroid Build Coastguard Worker;
1064*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0415:
1065*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1066*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1]
1067*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
1068*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]
1069*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1070*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1071*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1072*9880d681SAndroid Build Coastguard Worker}
1073*9880d681SAndroid Build Coastguard Worker
1074*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_z4z6(<4 x i64> %a) {
1075*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_z4z6:
1076*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1080*9880d681SAndroid Build Coastguard Worker;
1081*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_z4z6:
1082*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1083*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23]
1084*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1085*9880d681SAndroid Build Coastguard Worker;
1086*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_z4z6:
1087*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1088*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23]
1089*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1090*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 0, i32 4, i32 0, i32 6>
1091*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1092*9880d681SAndroid Build Coastguard Worker}
1093*9880d681SAndroid Build Coastguard Worker
1094*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_5zuz(<4 x i64> %a) {
1095*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_5zuz:
1096*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
1098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
1099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1100*9880d681SAndroid Build Coastguard Worker;
1101*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_5zuz:
1102*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero
1104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1105*9880d681SAndroid Build Coastguard Worker;
1106*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_5zuz:
1107*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1108*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero
1109*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1110*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 5, i32 0, i32 undef, i32 0>
1111*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1112*9880d681SAndroid Build Coastguard Worker}
1113*9880d681SAndroid Build Coastguard Worker
1114*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_40u2(<4 x i64> %a, <4 x i64> %b) {
1115*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_40u2:
1116*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
1118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1119*9880d681SAndroid Build Coastguard Worker;
1120*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_40u2:
1121*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
1123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1124*9880d681SAndroid Build Coastguard Worker;
1125*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_40u2:
1126*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1127*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
1128*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1129*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 undef, i32 2>
1130*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1131*9880d681SAndroid Build Coastguard Worker}
1132*9880d681SAndroid Build Coastguard Worker
1133*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_15uu(<4 x i64> %a, <4 x i64> %b) {
1134*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4i64_15uu:
1135*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1136*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1]
1137*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1138*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 5, i32 undef, i32 undef>
1139*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1140*9880d681SAndroid Build Coastguard Worker}
1141*9880d681SAndroid Build Coastguard Worker
1142*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_11uu(<4 x i64> %a, <4 x i64> %b) {
1143*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4i64_11uu:
1144*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1145*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
1146*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1147*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 1, i32 undef, i32 undef>
1148*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1149*9880d681SAndroid Build Coastguard Worker}
1150*9880d681SAndroid Build Coastguard Worker
1151*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_22uu(<4 x i64> %a, <4 x i64> %b) {
1152*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_22uu:
1153*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1157*9880d681SAndroid Build Coastguard Worker;
1158*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_22uu:
1159*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,3]
1161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1162*9880d681SAndroid Build Coastguard Worker;
1163*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_22uu:
1164*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1165*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,3]
1166*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1167*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 undef, i32 undef>
1168*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1169*9880d681SAndroid Build Coastguard Worker}
1170*9880d681SAndroid Build Coastguard Worker
1171*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3333(<4 x i64> %a, <4 x i64> %b) {
1172*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3333:
1173*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3]
1175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
1176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1177*9880d681SAndroid Build Coastguard Worker;
1178*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3333:
1179*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]
1181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1182*9880d681SAndroid Build Coastguard Worker;
1183*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3333:
1184*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1185*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]
1186*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1187*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
1188*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1189*9880d681SAndroid Build Coastguard Worker}
1190*9880d681SAndroid Build Coastguard Worker
1191*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @stress_test1(<4 x i64> %a, <4 x i64> %b) {
1192*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: stress_test1:
1193*9880d681SAndroid Build Coastguard Worker; ALL:         retq
1194*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> <i32 3, i32 1, i32 1, i32 0>
1195*9880d681SAndroid Build Coastguard Worker  %d = shufflevector <4 x i64> %c, <4 x i64> undef, <4 x i32> <i32 3, i32 undef, i32 2, i32 undef>
1196*9880d681SAndroid Build Coastguard Worker  %e = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> <i32 3, i32 3, i32 1, i32 undef>
1197*9880d681SAndroid Build Coastguard Worker  %f = shufflevector <4 x i64> %d, <4 x i64> %e, <4 x i32> <i32 5, i32 1, i32 1, i32 0>
1198*9880d681SAndroid Build Coastguard Worker
1199*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %f
1200*9880d681SAndroid Build Coastguard Worker}
1201*9880d681SAndroid Build Coastguard Worker
1202*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_reg_and_zero_v4i64(i64 %a) {
1203*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_reg_and_zero_v4i64:
1204*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1205*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq %rdi, %xmm0
1206*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1207*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x i64> undef, i64 %a, i64 0
1208*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
1209*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1210*9880d681SAndroid Build Coastguard Worker}
1211*9880d681SAndroid Build Coastguard Worker
1212*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_mem_and_zero_v4i64(i64* %ptr) {
1213*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_mem_and_zero_v4i64:
1214*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1215*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1216*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1217*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ptr
1218*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x i64> undef, i64 %a, i64 0
1219*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
1220*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1221*9880d681SAndroid Build Coastguard Worker}
1222*9880d681SAndroid Build Coastguard Worker
1223*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @insert_reg_and_zero_v4f64(double %a) {
1224*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_reg_and_zero_v4f64:
1225*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<def>
1227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
1228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3]
1229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1230*9880d681SAndroid Build Coastguard Worker;
1231*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_reg_and_zero_v4f64:
1232*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<def>
1234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
1235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3]
1236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1237*9880d681SAndroid Build Coastguard Worker;
1238*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_reg_and_zero_v4f64:
1239*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1240*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
1241*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
1242*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1243*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x double> undef, double %a, i32 0
1244*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
1245*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
1246*9880d681SAndroid Build Coastguard Worker}
1247*9880d681SAndroid Build Coastguard Worker
1248*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @insert_mem_and_zero_v4f64(double* %ptr) {
1249*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_mem_and_zero_v4f64:
1250*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1251*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
1252*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1253*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1254*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x double> undef, double %a, i32 0
1255*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
1256*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
1257*9880d681SAndroid Build Coastguard Worker}
1258*9880d681SAndroid Build Coastguard Worker
1259*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64(double* %ptr) {
1260*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64:
1261*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vbroadcastsd (%rdi), %ymm0
1263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1264*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1265*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x double> undef, double %a, i32 0
1266*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %v, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
1267*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
1268*9880d681SAndroid Build Coastguard Worker}
1269*9880d681SAndroid Build Coastguard Worker
1270*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat_mem_v4i64(i64* %ptr) {
1271*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_mem_v4i64:
1272*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm0
1274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1275*9880d681SAndroid Build Coastguard Worker;
1276*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_mem_v4i64:
1277*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm0
1279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1280*9880d681SAndroid Build Coastguard Worker;
1281*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_mem_v4i64:
1282*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1283*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq (%rdi), %ymm0
1284*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1285*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ptr
1286*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x i64> undef, i64 %a, i64 0
1287*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i64> %v, <4 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
1288*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1289*9880d681SAndroid Build Coastguard Worker}
1290*9880d681SAndroid Build Coastguard Worker
1291*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64_2(double* %p) {
1292*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64_2:
1293*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1294*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vbroadcastsd (%rdi), %ymm0
1295*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1296*9880d681SAndroid Build Coastguard Worker  %1 = load double, double* %p
1297*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <2 x double> undef, double %1, i32 0
1298*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x double> %2, <2 x double> undef, <4 x i32> zeroinitializer
1299*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
1300*9880d681SAndroid Build Coastguard Worker}
1301*9880d681SAndroid Build Coastguard Worker
1302*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_v4f64(<2 x double> %r) {
1303*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_v4f64:
1304*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
1306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1308*9880d681SAndroid Build Coastguard Worker;
1309*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_v4f64:
1310*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
1312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1313*9880d681SAndroid Build Coastguard Worker;
1314*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_v4f64:
1315*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1316*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm0
1317*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1318*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x double> %r, <2 x double> undef, <4 x i32> zeroinitializer
1319*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %1
1320*9880d681SAndroid Build Coastguard Worker}
1321*9880d681SAndroid Build Coastguard Worker
1322*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat_mem_v4i64_from_v2i64(<2 x i64>* %ptr) {
1323*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_mem_v4i64_from_v2i64:
1324*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm0
1326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1327*9880d681SAndroid Build Coastguard Worker;
1328*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_mem_v4i64_from_v2i64:
1329*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm0
1331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1332*9880d681SAndroid Build Coastguard Worker;
1333*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_mem_v4i64_from_v2i64:
1334*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1335*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq (%rdi), %ymm0
1336*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1337*9880d681SAndroid Build Coastguard Worker  %v = load <2 x i64>, <2 x i64>* %ptr
1338*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
1339*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1340*9880d681SAndroid Build Coastguard Worker}
1341*9880d681SAndroid Build Coastguard Worker
1342*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64_from_v2f64(<2 x double>* %ptr) {
1343*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64_from_v2f64:
1344*9880d681SAndroid Build Coastguard Worker; ALL:       # BB#0:
1345*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vbroadcastsd (%rdi), %ymm0
1346*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1347*9880d681SAndroid Build Coastguard Worker  %v = load <2 x double>, <2 x double>* %ptr
1348*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
1349*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
1350*9880d681SAndroid Build Coastguard Worker}
1351*9880d681SAndroid Build Coastguard Worker
1352*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat128_mem_v4i64_from_v2i64(<2 x i64>* %ptr) {
1353*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat128_mem_v4i64_from_v2i64:
1354*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rdi), %xmm0
1356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1358*9880d681SAndroid Build Coastguard Worker;
1359*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat128_mem_v4i64_from_v2i64:
1360*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rdi), %xmm0
1362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1364*9880d681SAndroid Build Coastguard Worker;
1365*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat128_mem_v4i64_from_v2i64:
1366*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1367*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovdqa64 (%rdi), %xmm0
1368*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm0, %ymm0, %ymm0
1369*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1370*9880d681SAndroid Build Coastguard Worker  %v = load <2 x i64>, <2 x i64>* %ptr
1371*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
1372*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle
1373*9880d681SAndroid Build Coastguard Worker}
1374*9880d681SAndroid Build Coastguard Worker
1375*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat128_mem_v4f64_from_v2f64(<2 x double>* %ptr) {
1376*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat128_mem_v4f64_from_v2f64:
1377*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps (%rdi), %xmm0
1379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1381*9880d681SAndroid Build Coastguard Worker;
1382*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat128_mem_v4f64_from_v2f64:
1383*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps (%rdi), %xmm0
1385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1387*9880d681SAndroid Build Coastguard Worker;
1388*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat128_mem_v4f64_from_v2f64:
1389*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1390*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovapd (%rdi), %xmm0
1391*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinsertf32x4 $1, %xmm0, %ymm0, %ymm0
1392*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1393*9880d681SAndroid Build Coastguard Worker  %v = load <2 x double>, <2 x double>* %ptr
1394*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
1395*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
1396*9880d681SAndroid Build Coastguard Worker}
1397*9880d681SAndroid Build Coastguard Worker
1398*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @broadcast_v4f64_0000_from_v2i64(<2 x i64> %a0) {
1399*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: broadcast_v4f64_0000_from_v2i64:
1400*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1404*9880d681SAndroid Build Coastguard Worker;
1405*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: broadcast_v4f64_0000_from_v2i64:
1406*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
1408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1409*9880d681SAndroid Build Coastguard Worker;
1410*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: broadcast_v4f64_0000_from_v2i64:
1411*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1412*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm0
1413*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1414*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x i64> %a0, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1415*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %1 to <4 x double>
1416*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> zeroinitializer
1417*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
1418*9880d681SAndroid Build Coastguard Worker}
1419*9880d681SAndroid Build Coastguard Worker
1420*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @bitcast_v4f64_0426(<4 x double> %a, <4 x double> %b) {
1421*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: bitcast_v4f64_0426:
1422*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
1424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1425*9880d681SAndroid Build Coastguard Worker;
1426*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: bitcast_v4f64_0426:
1427*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
1429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1430*9880d681SAndroid Build Coastguard Worker;
1431*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: bitcast_v4f64_0426:
1432*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1433*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
1434*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1435*9880d681SAndroid Build Coastguard Worker  %shuffle64 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2>
1436*9880d681SAndroid Build Coastguard Worker  %bitcast32 = bitcast <4 x double> %shuffle64 to <8 x float>
1437*9880d681SAndroid Build Coastguard Worker  %shuffle32 = shufflevector <8 x float> %bitcast32, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
1438*9880d681SAndroid Build Coastguard Worker  %bitcast16 = bitcast <8 x float> %shuffle32 to <16 x i16>
1439*9880d681SAndroid Build Coastguard Worker  %shuffle16 = shufflevector <16 x i16> %bitcast16, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 13>
1440*9880d681SAndroid Build Coastguard Worker  %bitcast64 = bitcast <16 x i16> %shuffle16 to <4 x double>
1441*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %bitcast64
1442*9880d681SAndroid Build Coastguard Worker}
1443*9880d681SAndroid Build Coastguard Worker
1444*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @concat_v4i64_0167(<4 x i64> %a0, <4 x i64> %a1) {
1445*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: concat_v4i64_0167:
1446*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1447*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]
1448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1449*9880d681SAndroid Build Coastguard Worker;
1450*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: concat_v4i64_0167:
1451*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1452*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1453*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1454*9880d681SAndroid Build Coastguard Worker;
1455*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: concat_v4i64_0167:
1456*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1457*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1458*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1459*9880d681SAndroid Build Coastguard Worker  %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1>
1460*9880d681SAndroid Build Coastguard Worker  %a1hi = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 6, i32 7>
1461*9880d681SAndroid Build Coastguard Worker  %shuffle64 = shufflevector <2 x i64> %a0lo, <2 x i64> %a1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1462*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle64
1463*9880d681SAndroid Build Coastguard Worker}
1464*9880d681SAndroid Build Coastguard Worker
1465*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @concat_v4i64_0145_bc(<4 x i64> %a0, <4 x i64> %a1) {
1466*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: concat_v4i64_0145_bc:
1467*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1470*9880d681SAndroid Build Coastguard Worker;
1471*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: concat_v4i64_0145_bc:
1472*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1475*9880d681SAndroid Build Coastguard Worker;
1476*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: concat_v4i64_0145_bc:
1477*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1478*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
1479*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1480*9880d681SAndroid Build Coastguard Worker  %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1>
1481*9880d681SAndroid Build Coastguard Worker  %a1lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 4, i32 5>
1482*9880d681SAndroid Build Coastguard Worker  %bc0lo = bitcast <2 x i64> %a0lo to <4 x i32>
1483*9880d681SAndroid Build Coastguard Worker  %bc1lo = bitcast <2 x i64> %a1lo to <4 x i32>
1484*9880d681SAndroid Build Coastguard Worker  %shuffle32 = shufflevector <4 x i32> %bc0lo, <4 x i32> %bc1lo, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1485*9880d681SAndroid Build Coastguard Worker  %shuffle64 = bitcast <8 x i32> %shuffle32 to <4 x i64>
1486*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shuffle64
1487*9880d681SAndroid Build Coastguard Worker}
1488*9880d681SAndroid Build Coastguard Worker
1489*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_dup_mem_v4i64(i64* %ptr) {
1490*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_dup_mem_v4i64:
1491*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vbroadcastsd (%rdi), %ymm0
1493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1494*9880d681SAndroid Build Coastguard Worker;
1495*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_dup_mem_v4i64:
1496*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm0
1498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1499*9880d681SAndroid Build Coastguard Worker;
1500*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_dup_mem_v4i64:
1501*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1502*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq (%rdi), %ymm0
1503*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1504*9880d681SAndroid Build Coastguard Worker  %tmp = load i64, i64* %ptr, align 1
1505*9880d681SAndroid Build Coastguard Worker  %tmp1 = insertelement <2 x i64> undef, i64 %tmp, i32 0
1506*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <2 x i64> %tmp1, <2 x i64> undef, <4 x i32> zeroinitializer
1507*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %tmp2
1508*9880d681SAndroid Build Coastguard Worker}
1509