xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-128-v2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl -mattr=+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512VL
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
11*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown"
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_00(<2 x i64> %a, <2 x i64> %b) {
14*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_00:
15*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
17*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
18*9880d681SAndroid Build Coastguard Worker;
19*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_00:
20*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
23*9880d681SAndroid Build Coastguard Worker;
24*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_00:
25*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
26*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq %xmm0, %xmm0
27*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
28*9880d681SAndroid Build Coastguard Worker;
29*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_00:
30*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
31*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq %xmm0, %xmm0
32*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
33*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 0>
34*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_10(<2 x i64> %a, <2 x i64> %b) {
37*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_10:
38*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
40*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
41*9880d681SAndroid Build Coastguard Worker;
42*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_10:
43*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
44*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
45*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
46*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 0>
47*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_11(<2 x i64> %a, <2 x i64> %b) {
50*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_11:
51*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
52*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
53*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker;
55*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_11:
56*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
58*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
59*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 1>
60*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_22(<2 x i64> %a, <2 x i64> %b) {
63*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_22:
64*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,1,0,1]
66*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker;
68*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_22:
69*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
70*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,1,0,1]
71*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
72*9880d681SAndroid Build Coastguard Worker;
73*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_22:
74*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
75*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq %xmm1, %xmm0
76*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker;
78*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_22:
79*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq %xmm1, %xmm0
81*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
82*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 2>
83*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_32(<2 x i64> %a, <2 x i64> %b) {
86*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_32:
87*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
88*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
89*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
90*9880d681SAndroid Build Coastguard Worker;
91*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_32:
92*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
95*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 2>
96*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_33(<2 x i64> %a, <2 x i64> %b) {
99*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_33:
100*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
102*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker;
104*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_33:
105*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
106*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
107*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
108*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 3>
109*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_00(<2 x double> %a, <2 x double> %b) {
113*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2f64_00:
114*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]
116*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
117*9880d681SAndroid Build Coastguard Worker;
118*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2f64_00:
119*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
120*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
121*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
122*9880d681SAndroid Build Coastguard Worker;
123*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2f64_00:
124*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
125*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
126*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
127*9880d681SAndroid Build Coastguard Worker;
128*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2f64_00:
129*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
130*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
131*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
132*9880d681SAndroid Build Coastguard Worker;
133*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_00:
134*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
136*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
137*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 0>
138*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_10(<2 x double> %a, <2 x double> %b) {
141*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_10:
142*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
145*9880d681SAndroid Build Coastguard Worker;
146*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_10:
147*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
148*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
149*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 0>
152*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_11(<2 x double> %a, <2 x double> %b) {
155*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_11:
156*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
157*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]
158*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
159*9880d681SAndroid Build Coastguard Worker;
160*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_11:
161*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
162*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,1]
163*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 1>
165*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_22(<2 x double> %a, <2 x double> %b) {
168*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2f64_22:
169*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
170*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0,0]
171*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm1, %xmm0
172*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
173*9880d681SAndroid Build Coastguard Worker;
174*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2f64_22:
175*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
176*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm1[0,0]
177*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
178*9880d681SAndroid Build Coastguard Worker;
179*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2f64_22:
180*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
181*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm1[0,0]
182*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
183*9880d681SAndroid Build Coastguard Worker;
184*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2f64_22:
185*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
186*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movddup {{.*#+}} xmm0 = xmm1[0,0]
187*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
188*9880d681SAndroid Build Coastguard Worker;
189*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_22:
190*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
191*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = xmm1[0,0]
192*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
193*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 2, i32 2>
194*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_32(<2 x double> %a, <2 x double> %b) {
197*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_32:
198*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1,0]
200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
202*9880d681SAndroid Build Coastguard Worker;
203*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_32:
204*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm1[1,0]
206*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 3, i32 2>
209*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_33(<2 x double> %a, <2 x double> %b) {
212*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_33:
213*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movhlps {{.*#+}} xmm1 = xmm1[1,1]
215*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm0
216*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
217*9880d681SAndroid Build Coastguard Worker;
218*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_33:
219*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
220*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm1[1,1]
221*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
222*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 3, i32 3>
223*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_03(<2 x double> %a, <2 x double> %b) {
226*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2f64_03:
227*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
231*9880d681SAndroid Build Coastguard Worker;
232*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2f64_03:
233*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
234*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
235*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm1, %xmm0
236*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker;
238*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2f64_03:
239*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
240*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
241*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movapd %xmm1, %xmm0
242*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2f64_03:
245*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
246*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
247*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
248*9880d681SAndroid Build Coastguard Worker;
249*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_03:
250*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
251*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
252*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
253*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 3>
254*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_21(<2 x double> %a, <2 x double> %b) {
257*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2f64_21:
258*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
259*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
260*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
261*9880d681SAndroid Build Coastguard Worker;
262*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2f64_21:
263*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
264*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
265*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
266*9880d681SAndroid Build Coastguard Worker;
267*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2f64_21:
268*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
269*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
270*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
271*9880d681SAndroid Build Coastguard Worker;
272*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2f64_21:
273*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
276*9880d681SAndroid Build Coastguard Worker;
277*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_21:
278*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
279*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
280*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
281*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 2, i32 1>
282*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_02(<2 x i64> %a, <2 x i64> %b) {
287*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_02:
288*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
291*9880d681SAndroid Build Coastguard Worker;
292*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_02:
293*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
294*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
295*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
296*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
297*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
298*9880d681SAndroid Build Coastguard Worker}
299*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_02_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
300*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_02_copy:
301*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm0
304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
305*9880d681SAndroid Build Coastguard Worker;
306*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_02_copy:
307*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
308*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm2[0]
309*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
310*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
311*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_03(<2 x i64> %a, <2 x i64> %b) {
314*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_03:
315*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
319*9880d681SAndroid Build Coastguard Worker;
320*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_03:
321*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
322*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
323*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm1, %xmm0
324*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
325*9880d681SAndroid Build Coastguard Worker;
326*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_03:
327*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
328*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
329*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movapd %xmm1, %xmm0
330*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_03:
333*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
334*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
335*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker;
337*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_03:
338*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
341*9880d681SAndroid Build Coastguard Worker;
342*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_03:
343*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
344*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
345*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
346*9880d681SAndroid Build Coastguard Worker;
347*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_03:
348*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
349*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
350*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
351*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 3>
352*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_03_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
355*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_03_copy:
356*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
357*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
358*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm2, %xmm0
359*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
360*9880d681SAndroid Build Coastguard Worker;
361*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_03_copy:
362*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
363*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
364*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm2, %xmm0
365*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
366*9880d681SAndroid Build Coastguard Worker;
367*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_03_copy:
368*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
369*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
370*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movapd %xmm2, %xmm0
371*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
372*9880d681SAndroid Build Coastguard Worker;
373*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_03_copy:
374*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
375*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
376*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
377*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
378*9880d681SAndroid Build Coastguard Worker;
379*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_03_copy:
380*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm2[4,5,6,7]
382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
383*9880d681SAndroid Build Coastguard Worker;
384*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_03_copy:
385*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm2[2,3]
387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
388*9880d681SAndroid Build Coastguard Worker;
389*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_03_copy:
390*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
391*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm2[2,3]
392*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
393*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 3>
394*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
395*9880d681SAndroid Build Coastguard Worker}
396*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_12(<2 x i64> %a, <2 x i64> %b) {
397*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_12:
398*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
401*9880d681SAndroid Build Coastguard Worker;
402*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_12:
403*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
404*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
405*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
406*9880d681SAndroid Build Coastguard Worker;
407*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_12:
408*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
409*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
410*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
411*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
412*9880d681SAndroid Build Coastguard Worker;
413*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_12:
414*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
415*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
416*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
417*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
418*9880d681SAndroid Build Coastguard Worker;
419*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_12:
420*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
421*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
422*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
423*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>
424*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
425*9880d681SAndroid Build Coastguard Worker}
426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_12_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
427*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_12_copy:
428*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
429*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm2[0]
430*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
431*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
432*9880d681SAndroid Build Coastguard Worker;
433*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_12_copy:
434*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
435*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm2[0]
436*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm1, %xmm0
437*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
438*9880d681SAndroid Build Coastguard Worker;
439*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_12_copy:
440*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
441*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    palignr {{.*#+}} xmm2 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
442*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm0
443*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
444*9880d681SAndroid Build Coastguard Worker;
445*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_12_copy:
446*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
447*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    palignr {{.*#+}} xmm2 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
448*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
449*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
450*9880d681SAndroid Build Coastguard Worker;
451*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_12_copy:
452*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
453*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
454*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
455*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>
456*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_13(<2 x i64> %a, <2 x i64> %b) {
459*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_13:
460*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1]
462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
463*9880d681SAndroid Build Coastguard Worker;
464*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_13:
465*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
466*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1]
467*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
468*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
469*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_13_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
472*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_13_copy:
473*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
474*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm2[1]
475*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm0
476*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
477*9880d681SAndroid Build Coastguard Worker;
478*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_13_copy:
479*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
480*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm1[1],xmm2[1]
481*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
482*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
483*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
484*9880d681SAndroid Build Coastguard Worker}
485*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_20(<2 x i64> %a, <2 x i64> %b) {
486*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_20:
487*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
488*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
489*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm0
490*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
491*9880d681SAndroid Build Coastguard Worker;
492*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_20:
493*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
494*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
495*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
496*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 0>
497*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
498*9880d681SAndroid Build Coastguard Worker}
499*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_20_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
500*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_20_copy:
501*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm0
504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
505*9880d681SAndroid Build Coastguard Worker;
506*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_20_copy:
507*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
508*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm1[0]
509*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
510*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 0>
511*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
512*9880d681SAndroid Build Coastguard Worker}
513*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_21(<2 x i64> %a, <2 x i64> %b) {
514*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_21:
515*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
516*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
517*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
518*9880d681SAndroid Build Coastguard Worker;
519*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_21:
520*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
521*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
522*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
523*9880d681SAndroid Build Coastguard Worker;
524*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_21:
525*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
526*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
527*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker;
529*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_21:
530*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
531*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
532*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
533*9880d681SAndroid Build Coastguard Worker;
534*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_21:
535*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
538*9880d681SAndroid Build Coastguard Worker;
539*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_21:
540*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
543*9880d681SAndroid Build Coastguard Worker;
544*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_21:
545*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
546*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
547*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
548*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 1>
549*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
550*9880d681SAndroid Build Coastguard Worker}
551*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_21_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
552*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_21_copy:
553*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
554*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
555*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
556*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
557*9880d681SAndroid Build Coastguard Worker;
558*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_21_copy:
559*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
560*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
561*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm1, %xmm0
562*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
563*9880d681SAndroid Build Coastguard Worker;
564*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_21_copy:
565*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
567*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movapd %xmm1, %xmm0
568*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
569*9880d681SAndroid Build Coastguard Worker;
570*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_21_copy:
571*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
572*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
573*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
574*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
575*9880d681SAndroid Build Coastguard Worker;
576*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_21_copy:
577*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm1[4,5,6,7]
579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
580*9880d681SAndroid Build Coastguard Worker;
581*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_21_copy:
582*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm2[0,1],xmm1[2,3]
584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
585*9880d681SAndroid Build Coastguard Worker;
586*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_21_copy:
587*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
588*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm2[0,1],xmm1[2,3]
589*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
590*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 1>
591*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
592*9880d681SAndroid Build Coastguard Worker}
593*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_30(<2 x i64> %a, <2 x i64> %b) {
594*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_30:
595*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
596*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm0[0]
597*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
598*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
599*9880d681SAndroid Build Coastguard Worker;
600*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_30:
601*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
602*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],xmm0[0]
603*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm1, %xmm0
604*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
605*9880d681SAndroid Build Coastguard Worker;
606*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_30:
607*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
608*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
609*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
610*9880d681SAndroid Build Coastguard Worker;
611*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_30:
612*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
613*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
614*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
615*9880d681SAndroid Build Coastguard Worker;
616*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_30:
617*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
618*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7]
619*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
620*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 0>
621*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
622*9880d681SAndroid Build Coastguard Worker}
623*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_30_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
624*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_30_copy:
625*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
626*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[1],xmm1[0]
627*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm2, %xmm0
628*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
629*9880d681SAndroid Build Coastguard Worker;
630*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_30_copy:
631*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
632*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufpd {{.*#+}} xmm2 = xmm2[1],xmm1[0]
633*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movapd %xmm2, %xmm0
634*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
635*9880d681SAndroid Build Coastguard Worker;
636*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_30_copy:
637*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
638*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm2[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
639*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
640*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
641*9880d681SAndroid Build Coastguard Worker;
642*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_30_copy:
643*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
644*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm2[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
645*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
646*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
647*9880d681SAndroid Build Coastguard Worker;
648*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_30_copy:
649*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
650*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm2[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
651*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
652*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 0>
653*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
654*9880d681SAndroid Build Coastguard Worker}
655*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_31(<2 x i64> %a, <2 x i64> %b) {
656*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_31:
657*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
658*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm0[1]
659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm0
660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
661*9880d681SAndroid Build Coastguard Worker;
662*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_31:
663*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
664*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm1[1],xmm0[1]
665*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 1>
667*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
668*9880d681SAndroid Build Coastguard Worker}
669*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_31_copy(<2 x i64> %nonce, <2 x i64> %a, <2 x i64> %b) {
670*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_31_copy:
671*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckhqdq {{.*#+}} xmm2 = xmm2[1],xmm1[1]
673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm0
674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
675*9880d681SAndroid Build Coastguard Worker;
676*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_31_copy:
677*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
678*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm2[1],xmm1[1]
679*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
680*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 1>
681*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
682*9880d681SAndroid Build Coastguard Worker}
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_0z(<2 x i64> %a) {
685*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_0z:
686*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
689*9880d681SAndroid Build Coastguard Worker;
690*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_0z:
691*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
692*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
693*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
694*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 3>
695*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
696*9880d681SAndroid Build Coastguard Worker}
697*9880d681SAndroid Build Coastguard Worker
698*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_1z(<2 x i64> %a) {
699*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_1z:
700*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
701*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
702*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
703*9880d681SAndroid Build Coastguard Worker;
704*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_1z:
705*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
706*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
707*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
708*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> zeroinitializer, <2 x i32> <i32 1, i32 3>
709*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
710*9880d681SAndroid Build Coastguard Worker}
711*9880d681SAndroid Build Coastguard Worker
712*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_z0(<2 x i64> %a) {
713*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2i64_z0:
714*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
717*9880d681SAndroid Build Coastguard Worker;
718*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2i64_z0:
719*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
720*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
721*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
722*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> zeroinitializer, <2 x i32> <i32 2, i32 0>
723*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
724*9880d681SAndroid Build Coastguard Worker}
725*9880d681SAndroid Build Coastguard Worker
726*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_z1(<2 x i64> %a) {
727*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_z1:
728*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
729*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm1, %xmm1
730*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
731*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
732*9880d681SAndroid Build Coastguard Worker;
733*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_z1:
734*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
735*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm1, %xmm1
736*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
737*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
738*9880d681SAndroid Build Coastguard Worker;
739*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_z1:
740*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
741*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm1, %xmm1
742*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
743*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
744*9880d681SAndroid Build Coastguard Worker;
745*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_z1:
746*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
747*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm1
748*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
749*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
750*9880d681SAndroid Build Coastguard Worker;
751*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_z1:
752*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
756*9880d681SAndroid Build Coastguard Worker;
757*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_z1:
758*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
762*9880d681SAndroid Build Coastguard Worker;
763*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_z1:
764*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
765*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
766*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
767*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
768*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> zeroinitializer, <2 x i32> <i32 2, i32 1>
769*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_0z(<2 x double> %a) {
773*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_0z:
774*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
775*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
776*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
777*9880d681SAndroid Build Coastguard Worker;
778*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_v2f64_0z:
779*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
780*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
781*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
782*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 0, i32 3>
783*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
784*9880d681SAndroid Build Coastguard Worker}
785*9880d681SAndroid Build Coastguard Worker
786*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_1z(<2 x double> %a) {
787*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_1z:
788*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
789*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorpd %xmm1, %xmm1
790*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
791*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
792*9880d681SAndroid Build Coastguard Worker;
793*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2f64_1z:
794*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
795*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
796*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
797*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
798*9880d681SAndroid Build Coastguard Worker;
799*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2f64_1z:
800*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
804*9880d681SAndroid Build Coastguard Worker;
805*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2f64_1z:
806*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
807*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
808*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
809*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
810*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 1, i32 3>
811*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
812*9880d681SAndroid Build Coastguard Worker}
813*9880d681SAndroid Build Coastguard Worker
814*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_z0(<2 x double> %a) {
815*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_z0:
816*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
817*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorpd %xmm1, %xmm1
818*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
819*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
820*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
821*9880d681SAndroid Build Coastguard Worker;
822*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2f64_z0:
823*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
824*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
825*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
826*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
827*9880d681SAndroid Build Coastguard Worker;
828*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2f64_z0:
829*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
830*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
833*9880d681SAndroid Build Coastguard Worker;
834*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2f64_z0:
835*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
836*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
837*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
838*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
839*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 2, i32 0>
840*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
841*9880d681SAndroid Build Coastguard Worker}
842*9880d681SAndroid Build Coastguard Worker
843*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_z1(<2 x double> %a) {
844*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2f64_z1:
845*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
846*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm1, %xmm1
847*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
848*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
849*9880d681SAndroid Build Coastguard Worker;
850*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2f64_z1:
851*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
852*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm1, %xmm1
853*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
854*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
855*9880d681SAndroid Build Coastguard Worker;
856*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2f64_z1:
857*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
858*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm1, %xmm1
859*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
860*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
861*9880d681SAndroid Build Coastguard Worker;
862*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2f64_z1:
863*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
864*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorpd %xmm1, %xmm1
865*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
866*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
867*9880d681SAndroid Build Coastguard Worker;
868*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2f64_z1:
869*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
873*9880d681SAndroid Build Coastguard Worker;
874*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2f64_z1:
875*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
876*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
877*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vblendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
878*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
879*9880d681SAndroid Build Coastguard Worker;
880*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2f64_z1:
881*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
882*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
883*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vblendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
884*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
885*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 2, i32 1>
886*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
887*9880d681SAndroid Build Coastguard Worker}
888*9880d681SAndroid Build Coastguard Worker
889*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_bitcast_1z(<2 x double> %a) {
890*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_v2f64_bitcast_1z:
891*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
892*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorpd %xmm1, %xmm1
893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
894*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
895*9880d681SAndroid Build Coastguard Worker;
896*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2f64_bitcast_1z:
897*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
901*9880d681SAndroid Build Coastguard Worker;
902*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2f64_bitcast_1z:
903*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
907*9880d681SAndroid Build Coastguard Worker;
908*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2f64_bitcast_1z:
909*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
910*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
911*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
912*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
913*9880d681SAndroid Build Coastguard Worker  %shuffle64 = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 2, i32 1>
914*9880d681SAndroid Build Coastguard Worker  %bitcast32 = bitcast <2 x double> %shuffle64 to <4 x float>
915*9880d681SAndroid Build Coastguard Worker  %shuffle32 = shufflevector <4 x float> %bitcast32, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
916*9880d681SAndroid Build Coastguard Worker  %bitcast64 = bitcast <4 x float> %shuffle32 to <2 x double>
917*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %bitcast64
918*9880d681SAndroid Build Coastguard Worker}
919*9880d681SAndroid Build Coastguard Worker
920*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_bitcast_z123(<2 x i64> %x) {
921*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: shuffle_v2i64_bitcast_z123:
922*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
923*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
924*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
925*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0
926*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
927*9880d681SAndroid Build Coastguard Worker;
928*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: shuffle_v2i64_bitcast_z123:
929*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
930*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
931*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
932*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    andps {{.*}}(%rip), %xmm0
933*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
934*9880d681SAndroid Build Coastguard Worker;
935*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: shuffle_v2i64_bitcast_z123:
936*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
937*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
938*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
939*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    andps {{.*}}(%rip), %xmm0
940*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
941*9880d681SAndroid Build Coastguard Worker;
942*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: shuffle_v2i64_bitcast_z123:
943*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
944*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm1
945*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3,4,5,6,7]
946*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
947*9880d681SAndroid Build Coastguard Worker;
948*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v2i64_bitcast_z123:
949*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
950*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
951*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3,4,5,6,7]
952*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
953*9880d681SAndroid Build Coastguard Worker;
954*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v2i64_bitcast_z123:
955*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
956*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
957*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
958*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
959*9880d681SAndroid Build Coastguard Worker;
960*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v2i64_bitcast_z123:
961*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
962*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpxord %xmm1, %xmm1, %xmm1
963*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
964*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
965*9880d681SAndroid Build Coastguard Worker  %bitcast32 = bitcast <2 x i64> %x to <4 x float>
966*9880d681SAndroid Build Coastguard Worker  %shuffle32 = shufflevector <4 x float> %bitcast32, <4 x float> <float 1.000000e+00, float undef, float undef, float undef>, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
967*9880d681SAndroid Build Coastguard Worker  %bitcast64 = bitcast <4 x float> %shuffle32 to <2 x i64>
968*9880d681SAndroid Build Coastguard Worker  %and = and <2 x i64> %bitcast64, <i64 -4294967296, i64 -1>
969*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %and
970*9880d681SAndroid Build Coastguard Worker}
971*9880d681SAndroid Build Coastguard Worker
972*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_reg_and_zero_v2i64(i64 %a) {
973*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_reg_and_zero_v2i64:
974*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rdi, %xmm0
976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
977*9880d681SAndroid Build Coastguard Worker;
978*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_reg_and_zero_v2i64:
979*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
980*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rdi, %xmm0
981*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
982*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
983*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 3>
984*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
985*9880d681SAndroid Build Coastguard Worker}
986*9880d681SAndroid Build Coastguard Worker
987*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_mem_and_zero_v2i64(i64* %ptr) {
988*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_mem_and_zero_v2i64:
989*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
991*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
992*9880d681SAndroid Build Coastguard Worker;
993*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_mem_and_zero_v2i64:
994*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
995*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
996*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
997*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ptr
998*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
999*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 3>
1000*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
1001*9880d681SAndroid Build Coastguard Worker}
1002*9880d681SAndroid Build Coastguard Worker
1003*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_reg_and_zero_v2f64(double %a) {
1004*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_reg_and_zero_v2f64:
1005*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1006*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
1007*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1008*9880d681SAndroid Build Coastguard Worker;
1009*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_reg_and_zero_v2f64:
1010*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1011*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1012*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1013*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1014*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> zeroinitializer, <2 x i32> <i32 0, i32 3>
1015*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1016*9880d681SAndroid Build Coastguard Worker}
1017*9880d681SAndroid Build Coastguard Worker
1018*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_and_zero_v2f64(double* %ptr) {
1019*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_mem_and_zero_v2f64:
1020*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1021*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1022*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1023*9880d681SAndroid Build Coastguard Worker;
1024*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_mem_and_zero_v2f64:
1025*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1026*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
1027*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1028*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1029*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1030*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> zeroinitializer, <2 x i32> <i32 0, i32 3>
1031*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1032*9880d681SAndroid Build Coastguard Worker}
1033*9880d681SAndroid Build Coastguard Worker
1034*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_reg_lo_v2i64(i64 %a, <2 x i64> %b) {
1035*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_reg_lo_v2i64:
1036*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1037*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %rdi, %xmm1
1038*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
1039*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1040*9880d681SAndroid Build Coastguard Worker;
1041*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_reg_lo_v2i64:
1042*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1043*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %rdi, %xmm1
1044*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
1045*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1046*9880d681SAndroid Build Coastguard Worker;
1047*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_reg_lo_v2i64:
1048*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1049*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %rdi, %xmm1
1050*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
1051*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1052*9880d681SAndroid Build Coastguard Worker;
1053*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_reg_lo_v2i64:
1054*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1055*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %rdi, %xmm1
1056*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1057*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1058*9880d681SAndroid Build Coastguard Worker;
1059*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_reg_lo_v2i64:
1060*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1061*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rdi, %xmm1
1062*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1063*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1064*9880d681SAndroid Build Coastguard Worker;
1065*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_reg_lo_v2i64:
1066*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq %rdi, %xmm1
1068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1070*9880d681SAndroid Build Coastguard Worker;
1071*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_reg_lo_v2i64:
1072*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1073*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovq %rdi, %xmm1
1074*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1075*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1076*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
1077*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> %b, <2 x i32> <i32 0, i32 3>
1078*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
1079*9880d681SAndroid Build Coastguard Worker}
1080*9880d681SAndroid Build Coastguard Worker
1081*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_mem_lo_v2i64(i64* %ptr, <2 x i64> %b) {
1082*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_mem_lo_v2i64:
1083*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1084*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
1085*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1086*9880d681SAndroid Build Coastguard Worker;
1087*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_mem_lo_v2i64:
1088*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1089*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
1090*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1091*9880d681SAndroid Build Coastguard Worker;
1092*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_mem_lo_v2i64:
1093*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1094*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
1095*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1096*9880d681SAndroid Build Coastguard Worker;
1097*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_mem_lo_v2i64:
1098*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1099*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1100*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1101*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1102*9880d681SAndroid Build Coastguard Worker;
1103*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_mem_lo_v2i64:
1104*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1108*9880d681SAndroid Build Coastguard Worker;
1109*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_mem_lo_v2i64:
1110*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1114*9880d681SAndroid Build Coastguard Worker;
1115*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_mem_lo_v2i64:
1116*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1117*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1118*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1119*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1120*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ptr
1121*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
1122*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> %b, <2 x i32> <i32 0, i32 3>
1123*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
1124*9880d681SAndroid Build Coastguard Worker}
1125*9880d681SAndroid Build Coastguard Worker
1126*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_reg_hi_v2i64(i64 %a, <2 x i64> %b) {
1127*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_reg_hi_v2i64:
1128*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rdi, %xmm1
1130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1132*9880d681SAndroid Build Coastguard Worker;
1133*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_reg_hi_v2i64:
1134*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1135*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rdi, %xmm1
1136*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1137*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1138*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
1139*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> %b, <2 x i32> <i32 2, i32 0>
1140*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
1141*9880d681SAndroid Build Coastguard Worker}
1142*9880d681SAndroid Build Coastguard Worker
1143*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_mem_hi_v2i64(i64* %ptr, <2 x i64> %b) {
1144*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_mem_hi_v2i64:
1145*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1149*9880d681SAndroid Build Coastguard Worker;
1150*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_mem_hi_v2i64:
1151*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1152*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1153*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1154*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1155*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ptr
1156*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x i64> undef, i64 %a, i32 0
1157*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v, <2 x i64> %b, <2 x i32> <i32 2, i32 0>
1158*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
1159*9880d681SAndroid Build Coastguard Worker}
1160*9880d681SAndroid Build Coastguard Worker
1161*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_reg_lo_v2f64(double %a, <2 x double> %b) {
1162*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_reg_lo_v2f64:
1163*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1164*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1165*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
1166*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1167*9880d681SAndroid Build Coastguard Worker;
1168*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_reg_lo_v2f64:
1169*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1170*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
1171*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1172*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1173*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 0, i32 3>
1174*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1175*9880d681SAndroid Build Coastguard Worker}
1176*9880d681SAndroid Build Coastguard Worker
1177*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_lo_v2f64(double* %ptr, <2 x double> %b) {
1178*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_mem_lo_v2f64:
1179*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1180*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
1181*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1182*9880d681SAndroid Build Coastguard Worker;
1183*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_mem_lo_v2f64:
1184*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1185*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
1186*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1187*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1188*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1189*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 0, i32 3>
1190*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1191*9880d681SAndroid Build Coastguard Worker}
1192*9880d681SAndroid Build Coastguard Worker
1193*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_reg_hi_v2f64(double %a, <2 x double> %b) {
1194*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_reg_hi_v2f64:
1195*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1197*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm0
1198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1199*9880d681SAndroid Build Coastguard Worker;
1200*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_reg_hi_v2f64:
1201*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1202*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1203*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1204*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1205*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 2, i32 0>
1206*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1207*9880d681SAndroid Build Coastguard Worker}
1208*9880d681SAndroid Build Coastguard Worker
1209*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_hi_v2f64(double* %ptr, <2 x double> %b) {
1210*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_mem_hi_v2f64:
1211*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
1213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1214*9880d681SAndroid Build Coastguard Worker;
1215*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_mem_hi_v2f64:
1216*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1217*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
1218*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1219*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1220*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1221*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 2, i32 0>
1222*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1223*9880d681SAndroid Build Coastguard Worker}
1224*9880d681SAndroid Build Coastguard Worker
1225*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_dup_reg_v2f64(double %a) {
1226*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_dup_reg_v2f64:
1227*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]
1229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1230*9880d681SAndroid Build Coastguard Worker;
1231*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_dup_reg_v2f64:
1232*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1233*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
1234*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1235*9880d681SAndroid Build Coastguard Worker;
1236*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_dup_reg_v2f64:
1237*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1238*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
1239*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1240*9880d681SAndroid Build Coastguard Worker;
1241*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_dup_reg_v2f64:
1242*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1243*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
1244*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1245*9880d681SAndroid Build Coastguard Worker;
1246*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_dup_reg_v2f64:
1247*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1248*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
1249*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1250*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1251*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
1252*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1253*9880d681SAndroid Build Coastguard Worker}
1254*9880d681SAndroid Build Coastguard Worker
1255*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_dup_mem_v2f64(double* %ptr) {
1256*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_dup_mem_v2f64:
1257*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1258*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1259*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]
1260*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1261*9880d681SAndroid Build Coastguard Worker;
1262*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_dup_mem_v2f64:
1263*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1264*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1265*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1266*9880d681SAndroid Build Coastguard Worker;
1267*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_dup_mem_v2f64:
1268*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1269*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1270*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1271*9880d681SAndroid Build Coastguard Worker;
1272*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_dup_mem_v2f64:
1273*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1276*9880d681SAndroid Build Coastguard Worker;
1277*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_dup_mem_v2f64:
1278*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1279*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
1280*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1281*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
1282*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
1283*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
1284*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1285*9880d681SAndroid Build Coastguard Worker}
1286*9880d681SAndroid Build Coastguard Worker
1287*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_dup_mem128_v2f64(<2 x double>* %ptr) nounwind {
1288*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_dup_mem128_v2f64:
1289*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps (%rdi), %xmm0
1291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0,0]
1292*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1293*9880d681SAndroid Build Coastguard Worker;
1294*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_dup_mem128_v2f64:
1295*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1296*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1297*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1298*9880d681SAndroid Build Coastguard Worker;
1299*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_dup_mem128_v2f64:
1300*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1301*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1302*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1303*9880d681SAndroid Build Coastguard Worker;
1304*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_dup_mem128_v2f64:
1305*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1306*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movddup {{.*#+}} xmm0 = mem[0,0]
1307*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1308*9880d681SAndroid Build Coastguard Worker;
1309*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_dup_mem128_v2f64:
1310*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1311*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
1312*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1313*9880d681SAndroid Build Coastguard Worker  %v = load  <2 x double>,  <2 x double>* %ptr
1314*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
1315*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1316*9880d681SAndroid Build Coastguard Worker}
1317*9880d681SAndroid Build Coastguard Worker
1318*9880d681SAndroid Build Coastguard Worker
1319*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_dup_mem_v2i64(i64* %ptr) {
1320*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_dup_mem_v2i64:
1321*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1322*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
1323*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1324*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1325*9880d681SAndroid Build Coastguard Worker;
1326*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_dup_mem_v2i64:
1327*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1331*9880d681SAndroid Build Coastguard Worker;
1332*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_dup_mem_v2i64:
1333*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1334*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq (%rdi), %xmm0
1335*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1336*9880d681SAndroid Build Coastguard Worker;
1337*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_dup_mem_v2i64:
1338*9880d681SAndroid Build Coastguard Worker; AVX512VL:       # BB#0:
1339*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpbroadcastq (%rdi), %xmm0
1340*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retq
1341*9880d681SAndroid Build Coastguard Worker  %tmp = load i64, i64* %ptr, align 1
1342*9880d681SAndroid Build Coastguard Worker  %tmp1 = insertelement <2 x i64> undef, i64 %tmp, i32 0
1343*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <2 x i64> %tmp1, <2 x i64> undef, <2 x i32> zeroinitializer
1344*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp2
1345*9880d681SAndroid Build Coastguard Worker}
1346*9880d681SAndroid Build Coastguard Worker
1347*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_mem_v2f64_10(<2 x double>* %ptr) {
1348*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: shuffle_mem_v2f64_10:
1349*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd (%rdi), %xmm0
1351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
1352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1353*9880d681SAndroid Build Coastguard Worker;
1354*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: shuffle_mem_v2f64_10:
1355*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = mem[1,0]
1357*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1358*9880d681SAndroid Build Coastguard Worker
1359*9880d681SAndroid Build Coastguard Worker  %a = load <2 x double>, <2 x double>* %ptr
1360*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> undef, <2 x i32> <i32 1, i32 0>
1361*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
1362*9880d681SAndroid Build Coastguard Worker}
1363