xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-neon-copy.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins16bw(<16 x i8> %tmp1, i8 %tmp2) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16bw:
6*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{w[0-9]+}}
7*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <16 x i8> %tmp1, i8 %tmp2, i32 15
8*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %tmp3
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins8hw(<8 x i16> %tmp1, i16 %tmp2) {
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8hw:
13*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[6], {{w[0-9]+}}
14*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <8 x i16> %tmp1, i16 %tmp2, i32 6
15*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %tmp3
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins4sw(<4 x i32> %tmp1, i32 %tmp2) {
19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4sw:
20*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[2], {{w[0-9]+}}
21*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <4 x i32> %tmp1, i32 %tmp2, i32 2
22*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %tmp3
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins2dw(<2 x i64> %tmp1, i64 %tmp2) {
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2dw:
27*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{x[0-9]+}}
28*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <2 x i64> %tmp1, i64 %tmp2, i32 1
29*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp3
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins8bw(<8 x i8> %tmp1, i8 %tmp2) {
33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8bw:
34*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[5], {{w[0-9]+}}
35*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <8 x i8> %tmp1, i8 %tmp2, i32 5
36*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %tmp3
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins4hw(<4 x i16> %tmp1, i16 %tmp2) {
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4hw:
41*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{w[0-9]+}}
42*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <4 x i16> %tmp1, i16 %tmp2, i32 3
43*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %tmp3
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins2sw(<2 x i32> %tmp1, i32 %tmp2) {
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2sw:
48*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{w[0-9]+}}
49*9880d681SAndroid Build Coastguard Worker  %tmp3 = insertelement <2 x i32> %tmp1, i32 %tmp2, i32 1
50*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %tmp3
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins16b16(<16 x i8> %tmp1, <16 x i8> %tmp2) {
54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16b16:
55*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{v[0-9]+}}.b[2]
56*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <16 x i8> %tmp1, i32 2
57*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <16 x i8> %tmp2, i8 %tmp3, i32 15
58*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %tmp4
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins8h8(<8 x i16> %tmp1, <8 x i16> %tmp2) {
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8h8:
63*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[7], {{v[0-9]+}}.h[2]
64*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %tmp1, i32 2
65*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <8 x i16> %tmp2, i16 %tmp3, i32 7
66*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %tmp4
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins4s4(<4 x i32> %tmp1, <4 x i32> %tmp2) {
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4s4:
71*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2]
72*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i32> %tmp1, i32 2
73*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i32> %tmp2, i32 %tmp3, i32 1
74*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %tmp4
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins2d2(<2 x i64> %tmp1, <2 x i64> %tmp2) {
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2d2:
79*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
80*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i64> %tmp1, i32 0
81*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x i64> %tmp2, i64 %tmp3, i32 1
82*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp4
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ins4f4(<4 x float> %tmp1, <4 x float> %tmp2) {
86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4f4:
87*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2]
88*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x float> %tmp1, i32 2
89*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x float> %tmp2, float %tmp3, i32 1
90*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %tmp4
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ins2df2(<2 x double> %tmp1, <2 x double> %tmp2) {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2df2:
95*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
96*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x double> %tmp1, i32 0
97*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x double> %tmp2, double %tmp3, i32 1
98*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %tmp4
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins8b16(<8 x i8> %tmp1, <16 x i8> %tmp2) {
102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8b16:
103*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{v[0-9]+}}.b[2]
104*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i8> %tmp1, i32 2
105*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <16 x i8> %tmp2, i8 %tmp3, i32 15
106*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %tmp4
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins4h8(<4 x i16> %tmp1, <8 x i16> %tmp2) {
110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4h8:
111*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[7], {{v[0-9]+}}.h[2]
112*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i16> %tmp1, i32 2
113*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <8 x i16> %tmp2, i16 %tmp3, i32 7
114*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %tmp4
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins2s4(<2 x i32> %tmp1, <4 x i32> %tmp2) {
118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2s4:
119*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[1]
120*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i32> %tmp1, i32 1
121*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i32> %tmp2, i32 %tmp3, i32 1
122*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %tmp4
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins1d2(<1 x i64> %tmp1, <2 x i64> %tmp2) {
126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1d2:
127*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
128*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <1 x i64> %tmp1, i32 0
129*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x i64> %tmp2, i64 %tmp3, i32 1
130*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp4
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ins2f4(<2 x float> %tmp1, <4 x float> %tmp2) {
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f4:
135*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[1]
136*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x float> %tmp1, i32 1
137*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x float> %tmp2, float %tmp3, i32 1
138*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %tmp4
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ins1f2(<1 x double> %tmp1, <2 x double> %tmp2) {
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1f2:
143*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
144*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <1 x double> %tmp1, i32 0
145*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x double> %tmp2, double %tmp3, i32 1
146*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %tmp4
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins16b8(<16 x i8> %tmp1, <8 x i8> %tmp2) {
150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16b8:
151*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[7], {{v[0-9]+}}.b[2]
152*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <16 x i8> %tmp1, i32 2
153*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <8 x i8> %tmp2, i8 %tmp3, i32 7
154*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %tmp4
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins8h4(<8 x i16> %tmp1, <4 x i16> %tmp2) {
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8h4:
159*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{v[0-9]+}}.h[2]
160*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %tmp1, i32 2
161*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 3
162*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %tmp4
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins4s2(<4 x i32> %tmp1, <2 x i32> %tmp2) {
166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4s2:
167*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2]
168*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i32> %tmp1, i32 2
169*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x i32> %tmp2, i32 %tmp3, i32 1
170*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %tmp4
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @ins2d1(<2 x i64> %tmp1, <1 x i64> %tmp2) {
174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2d1:
175*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[0]
176*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i64> %tmp1, i32 0
177*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <1 x i64> %tmp2, i64 %tmp3, i32 0
178*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %tmp4
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @ins4f2(<4 x float> %tmp1, <2 x float> %tmp2) {
182*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4f2:
183*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2]
184*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x float> %tmp1, i32 2
185*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x float> %tmp2, float %tmp3, i32 1
186*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %tmp4
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @ins2f1(<2 x double> %tmp1, <1 x double> %tmp2) {
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f1:
191*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{d[0-9]+}}, {{v[0-9]+}}.d[1]
192*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x double> %tmp1, i32 1
193*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <1 x double> %tmp2, double %tmp3, i32 0
194*9880d681SAndroid Build Coastguard Worker  ret <1 x double> %tmp4
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins8b8(<8 x i8> %tmp1, <8 x i8> %tmp2) {
198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8b8:
199*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[4], {{v[0-9]+}}.b[2]
200*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i8> %tmp1, i32 2
201*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <8 x i8> %tmp2, i8 %tmp3, i32 4
202*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %tmp4
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins4h4(<4 x i16> %tmp1, <4 x i16> %tmp2) {
206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4h4:
207*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{v[0-9]+}}.h[2]
208*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i16> %tmp1, i32 2
209*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 3
210*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %tmp4
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins2s2(<2 x i32> %tmp1, <2 x i32> %tmp2) {
214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2s2:
215*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[0]
216*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i32> %tmp1, i32 0
217*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x i32> %tmp2, i32 %tmp3, i32 1
218*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %tmp4
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @ins1d1(<1 x i64> %tmp1, <1 x i64> %tmp2) {
222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1d1:
223*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[0]
224*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <1 x i64> %tmp1, i32 0
225*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <1 x i64> %tmp2, i64 %tmp3, i32 0
226*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %tmp4
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @ins2f2(<2 x float> %tmp1, <2 x float> %tmp2) {
230*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f2:
231*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[0]
232*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x float> %tmp1, i32 0
233*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <2 x float> %tmp2, float %tmp3, i32 1
234*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %tmp4
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @ins1df1(<1 x double> %tmp1, <1 x double> %tmp2) {
238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1df1:
239*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ins {{v[0-9]+}}
240*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <1 x double> %tmp1, i32 0
241*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <1 x double> %tmp2, double %tmp3, i32 0
242*9880d681SAndroid Build Coastguard Worker  ret <1 x double> %tmp4
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw16b(<16 x i8> %tmp1) {
246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw16b:
247*9880d681SAndroid Build Coastguard Worker; CHECK: umov {{w[0-9]+}}, {{v[0-9]+}}.b[8]
248*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <16 x i8> %tmp1, i32 8
249*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext i8 %tmp3 to i32
250*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
251*9880d681SAndroid Build Coastguard Worker}
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw8h(<8 x i16> %tmp1) {
254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw8h:
255*9880d681SAndroid Build Coastguard Worker; CHECK: umov {{w[0-9]+}}, {{v[0-9]+}}.h[2]
256*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %tmp1, i32 2
257*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext i16 %tmp3 to i32
258*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw4s(<4 x i32> %tmp1) {
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw4s:
263*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.s[2]
264*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i32> %tmp1, i32 2
265*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp3
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerdefine i64 @umovx2d(<2 x i64> %tmp1) {
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovx2d:
270*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{x[0-9]+}}, {{v[0-9]+}}.d[1]
271*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i64> %tmp1, i32 1
272*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp3
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw8b(<8 x i8> %tmp1) {
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw8b:
277*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.b[7]
278*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i8> %tmp1, i32 7
279*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext i8 %tmp3 to i32
280*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw4h(<4 x i16> %tmp1) {
284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw4h:
285*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.h[2]
286*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i16> %tmp1, i32 2
287*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext i16 %tmp3 to i32
288*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw2s(<2 x i32> %tmp1) {
292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw2s:
293*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.s[1]
294*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i32> %tmp1, i32 1
295*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp3
296*9880d681SAndroid Build Coastguard Worker}
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerdefine i64 @umovx1d(<1 x i64> %tmp1) {
299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovx1d:
300*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
301*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <1 x i64> %tmp1, i32 0
302*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp3
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw16b(<16 x i8> %tmp1) {
306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw16b:
307*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.b[8]
308*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <16 x i8> %tmp1, i32 8
309*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i8 %tmp3 to i32
310*9880d681SAndroid Build Coastguard Worker  %tmp5 = add i32 %tmp4, %tmp4
311*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp5
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw8h(<8 x i16> %tmp1) {
315*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw8h:
316*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.h[2]
317*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %tmp1, i32 2
318*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i16 %tmp3 to i32
319*9880d681SAndroid Build Coastguard Worker  %tmp5 = add i32 %tmp4, %tmp4
320*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp5
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx16b(<16 x i8> %tmp1) {
324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx16b:
325*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.b[8]
326*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <16 x i8> %tmp1, i32 8
327*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i8 %tmp3 to i64
328*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp4
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx8h(<8 x i16> %tmp1) {
332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx8h:
333*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.h[2]
334*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %tmp1, i32 2
335*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i16 %tmp3 to i64
336*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp4
337*9880d681SAndroid Build Coastguard Worker}
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx4s(<4 x i32> %tmp1) {
340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx4s:
341*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.s[2]
342*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i32> %tmp1, i32 2
343*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i32 %tmp3 to i64
344*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp4
345*9880d681SAndroid Build Coastguard Worker}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw8b(<8 x i8> %tmp1) {
348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw8b:
349*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.b[4]
350*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i8> %tmp1, i32 4
351*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i8 %tmp3 to i32
352*9880d681SAndroid Build Coastguard Worker  %tmp5 = add i32 %tmp4, %tmp4
353*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp5
354*9880d681SAndroid Build Coastguard Worker}
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw4h(<4 x i16> %tmp1) {
357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw4h:
358*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.h[2]
359*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i16> %tmp1, i32 2
360*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i16 %tmp3 to i32
361*9880d681SAndroid Build Coastguard Worker  %tmp5 = add i32 %tmp4, %tmp4
362*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp5
363*9880d681SAndroid Build Coastguard Worker}
364*9880d681SAndroid Build Coastguard Worker
365*9880d681SAndroid Build Coastguard Workerdefine i32 @smovx8b(<8 x i8> %tmp1) {
366*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx8b:
367*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{[xw][0-9]+}}, {{v[0-9]+}}.b[6]
368*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i8> %tmp1, i32 6
369*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i8 %tmp3 to i32
370*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Workerdefine i32 @smovx4h(<4 x i16> %tmp1) {
374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx4h:
375*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{[xw][0-9]+}}, {{v[0-9]+}}.h[2]
376*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <4 x i16> %tmp1, i32 2
377*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i16 %tmp3 to i32
378*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp4
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx2s(<2 x i32> %tmp1) {
382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx2s:
383*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.s[1]
384*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <2 x i32> %tmp1, i32 1
385*9880d681SAndroid Build Coastguard Worker  %tmp4 = sext i32 %tmp3 to i64
386*9880d681SAndroid Build Coastguard Worker  ret i64 %tmp4
387*9880d681SAndroid Build Coastguard Worker}
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vcopy_lane_s8(<8 x i8> %v1, <8 x i8> %v2) {
390*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopy_lane_s8:
391*9880d681SAndroid Build Coastguard Worker; CHECK: ins  {{v[0-9]+}}.b[5], {{v[0-9]+}}.b[3]
392*9880d681SAndroid Build Coastguard Worker  %vset_lane = shufflevector <8 x i8> %v1, <8 x i8> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 11, i32 6, i32 7>
393*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vset_lane
394*9880d681SAndroid Build Coastguard Worker}
395*9880d681SAndroid Build Coastguard Worker
396*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vcopyq_laneq_s8(<16 x i8> %v1, <16 x i8> %v2) {
397*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopyq_laneq_s8:
398*9880d681SAndroid Build Coastguard Worker; CHECK: ins  {{v[0-9]+}}.b[14], {{v[0-9]+}}.b[6]
399*9880d681SAndroid Build Coastguard Worker  %vset_lane = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 22, i32 15>
400*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vset_lane
401*9880d681SAndroid Build Coastguard Worker}
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vcopy_lane_swap_s8(<8 x i8> %v1, <8 x i8> %v2) {
404*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopy_lane_swap_s8:
405*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[7], {{v[0-9]+}}.b[0]
406*9880d681SAndroid Build Coastguard Worker  %vset_lane = shufflevector <8 x i8> %v1, <8 x i8> %v2, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0>
407*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vset_lane
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vcopyq_laneq_swap_s8(<16 x i8> %v1, <16 x i8> %v2) {
411*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopyq_laneq_swap_s8:
412*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[0], {{v[0-9]+}}.b[15]
413*9880d681SAndroid Build Coastguard Worker  %vset_lane = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 15, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
414*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vset_lane
415*9880d681SAndroid Build Coastguard Worker}
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_n_u8(i8 %v1) #0 {
418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u8:
419*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{w[0-9]+}}
420*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <8 x i8> undef, i8 %v1, i32 0
421*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <8 x i8> %vecinit.i, i8 %v1, i32 1
422*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <8 x i8> %vecinit1.i, i8 %v1, i32 2
423*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <8 x i8> %vecinit2.i, i8 %v1, i32 3
424*9880d681SAndroid Build Coastguard Worker  %vecinit4.i = insertelement <8 x i8> %vecinit3.i, i8 %v1, i32 4
425*9880d681SAndroid Build Coastguard Worker  %vecinit5.i = insertelement <8 x i8> %vecinit4.i, i8 %v1, i32 5
426*9880d681SAndroid Build Coastguard Worker  %vecinit6.i = insertelement <8 x i8> %vecinit5.i, i8 %v1, i32 6
427*9880d681SAndroid Build Coastguard Worker  %vecinit7.i = insertelement <8 x i8> %vecinit6.i, i8 %v1, i32 7
428*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vecinit7.i
429*9880d681SAndroid Build Coastguard Worker}
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_n_u16(i16 %v1) #0 {
432*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u16:
433*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{w[0-9]+}}
434*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i16> undef, i16 %v1, i32 0
435*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %v1, i32 1
436*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %v1, i32 2
437*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %v1, i32 3
438*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vecinit3.i
439*9880d681SAndroid Build Coastguard Worker}
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_n_u32(i32 %v1) #0 {
442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u32:
443*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{w[0-9]+}}
444*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x i32> undef, i32 %v1, i32 0
445*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %v1, i32 1
446*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit1.i
447*9880d681SAndroid Build Coastguard Worker}
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vdup_n_u64(i64 %v1) #0 {
450*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u64:
451*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
452*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <1 x i64> undef, i64 %v1, i32 0
453*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vecinit.i
454*9880d681SAndroid Build Coastguard Worker}
455*9880d681SAndroid Build Coastguard Worker
456*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_n_u8(i8 %v1) #0 {
457*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u8:
458*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.16b, {{w[0-9]+}}
459*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <16 x i8> undef, i8 %v1, i32 0
460*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <16 x i8> %vecinit.i, i8 %v1, i32 1
461*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <16 x i8> %vecinit1.i, i8 %v1, i32 2
462*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <16 x i8> %vecinit2.i, i8 %v1, i32 3
463*9880d681SAndroid Build Coastguard Worker  %vecinit4.i = insertelement <16 x i8> %vecinit3.i, i8 %v1, i32 4
464*9880d681SAndroid Build Coastguard Worker  %vecinit5.i = insertelement <16 x i8> %vecinit4.i, i8 %v1, i32 5
465*9880d681SAndroid Build Coastguard Worker  %vecinit6.i = insertelement <16 x i8> %vecinit5.i, i8 %v1, i32 6
466*9880d681SAndroid Build Coastguard Worker  %vecinit7.i = insertelement <16 x i8> %vecinit6.i, i8 %v1, i32 7
467*9880d681SAndroid Build Coastguard Worker  %vecinit8.i = insertelement <16 x i8> %vecinit7.i, i8 %v1, i32 8
468*9880d681SAndroid Build Coastguard Worker  %vecinit9.i = insertelement <16 x i8> %vecinit8.i, i8 %v1, i32 9
469*9880d681SAndroid Build Coastguard Worker  %vecinit10.i = insertelement <16 x i8> %vecinit9.i, i8 %v1, i32 10
470*9880d681SAndroid Build Coastguard Worker  %vecinit11.i = insertelement <16 x i8> %vecinit10.i, i8 %v1, i32 11
471*9880d681SAndroid Build Coastguard Worker  %vecinit12.i = insertelement <16 x i8> %vecinit11.i, i8 %v1, i32 12
472*9880d681SAndroid Build Coastguard Worker  %vecinit13.i = insertelement <16 x i8> %vecinit12.i, i8 %v1, i32 13
473*9880d681SAndroid Build Coastguard Worker  %vecinit14.i = insertelement <16 x i8> %vecinit13.i, i8 %v1, i32 14
474*9880d681SAndroid Build Coastguard Worker  %vecinit15.i = insertelement <16 x i8> %vecinit14.i, i8 %v1, i32 15
475*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vecinit15.i
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_n_u16(i16 %v1) #0 {
479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u16:
480*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8h, {{w[0-9]+}}
481*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <8 x i16> undef, i16 %v1, i32 0
482*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %v1, i32 1
483*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %v1, i32 2
484*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %v1, i32 3
485*9880d681SAndroid Build Coastguard Worker  %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %v1, i32 4
486*9880d681SAndroid Build Coastguard Worker  %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %v1, i32 5
487*9880d681SAndroid Build Coastguard Worker  %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %v1, i32 6
488*9880d681SAndroid Build Coastguard Worker  %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %v1, i32 7
489*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit7.i
490*9880d681SAndroid Build Coastguard Worker}
491*9880d681SAndroid Build Coastguard Worker
492*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_n_u32(i32 %v1) #0 {
493*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u32:
494*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4s, {{w[0-9]+}}
495*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i32> undef, i32 %v1, i32 0
496*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i32> %vecinit.i, i32 %v1, i32 1
497*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i32> %vecinit1.i, i32 %v1, i32 2
498*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i32> %vecinit2.i, i32 %v1, i32 3
499*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit3.i
500*9880d681SAndroid Build Coastguard Worker}
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_n_u64(i64 %v1) #0 {
503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u64:
504*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2d, {{x[0-9]+}}
505*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x i64> undef, i64 %v1, i32 0
506*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i64> %vecinit.i, i64 %v1, i32 1
507*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vecinit1.i
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_lane_s8(<8 x i8> %v1) #0 {
511*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s8:
512*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{v[0-9]+}}.b[5]
513*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i8> %v1, <8 x i8> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
514*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %shuffle
515*9880d681SAndroid Build Coastguard Worker}
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_lane_s16(<4 x i16> %v1) #0 {
518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s16:
519*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{v[0-9]+}}.h[2]
520*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i16> %v1, <4 x i16> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
521*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %shuffle
522*9880d681SAndroid Build Coastguard Worker}
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_lane_s32(<2 x i32> %v1) #0 {
525*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s32:
526*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1]
527*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i32> %v1, <2 x i32> undef, <2 x i32> <i32 1, i32 1>
528*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %shuffle
529*9880d681SAndroid Build Coastguard Worker}
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_lane_s8(<8 x i8> %v1) #0 {
532*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s8:
533*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.16b, {{v[0-9]+}}.b[5]
534*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i8> %v1, <8 x i8> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
535*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shuffle
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_lane_s16(<4 x i16> %v1) #0 {
539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s16:
540*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.8h, {{v[0-9]+}}.h[2]
541*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i16> %v1, <4 x i16> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
542*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shuffle
543*9880d681SAndroid Build Coastguard Worker}
544*9880d681SAndroid Build Coastguard Worker
545*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_lane_s32(<2 x i32> %v1) #0 {
546*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s32:
547*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1]
548*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i32> %v1, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
549*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shuffle
550*9880d681SAndroid Build Coastguard Worker}
551*9880d681SAndroid Build Coastguard Worker
552*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_lane_s64(<1 x i64> %v1) #0 {
553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s64:
554*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
555*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <1 x i64> %v1, <1 x i64> undef, <2 x i32> zeroinitializer
556*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
557*9880d681SAndroid Build Coastguard Worker}
558*9880d681SAndroid Build Coastguard Worker
559*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_laneq_s8(<16 x i8> %v1) #0 {
560*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s8:
561*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{v[0-9]+}}.b[5]
562*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i8> %v1, <16 x i8> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
563*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %shuffle
564*9880d681SAndroid Build Coastguard Worker}
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_laneq_s16(<8 x i16> %v1) #0 {
567*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s16:
568*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{v[0-9]+}}.h[2]
569*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i16> %v1, <8 x i16> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
570*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %shuffle
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_laneq_s32(<4 x i32> %v1) #0 {
574*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s32:
575*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1]
576*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 1, i32 1>
577*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %shuffle
578*9880d681SAndroid Build Coastguard Worker}
579*9880d681SAndroid Build Coastguard Worker
580*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_laneq_s8(<16 x i8> %v1) #0 {
581*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s8:
582*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.16b, {{v[0-9]+}}.b[5]
583*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
584*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shuffle
585*9880d681SAndroid Build Coastguard Worker}
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_laneq_s16(<8 x i16> %v1) #0 {
588*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s16:
589*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.8h, {{v[0-9]+}}.h[2]
590*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
591*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shuffle
592*9880d681SAndroid Build Coastguard Worker}
593*9880d681SAndroid Build Coastguard Worker
594*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_laneq_s32(<4 x i32> %v1) #0 {
595*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s32:
596*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1]
597*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
598*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shuffle
599*9880d681SAndroid Build Coastguard Worker}
600*9880d681SAndroid Build Coastguard Worker
601*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_laneq_s64(<2 x i64> %v1) #0 {
602*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s64:
603*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
604*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
605*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
606*9880d681SAndroid Build Coastguard Worker}
607*9880d681SAndroid Build Coastguard Worker
608*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv8i8toi64(<8 x i8> %in) {
609*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv8i8toi64:
610*9880d681SAndroid Build Coastguard Worker   %res = bitcast <8 x i8> %in to i64
611*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
612*9880d681SAndroid Build Coastguard Worker   ret i64 %res
613*9880d681SAndroid Build Coastguard Worker}
614*9880d681SAndroid Build Coastguard Worker
615*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv4i16toi64(<4 x i16> %in) {
616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv4i16toi64:
617*9880d681SAndroid Build Coastguard Worker   %res = bitcast <4 x i16> %in to i64
618*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
619*9880d681SAndroid Build Coastguard Worker   ret i64 %res
620*9880d681SAndroid Build Coastguard Worker}
621*9880d681SAndroid Build Coastguard Worker
622*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv2i32toi64(<2 x i32> %in) {
623*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2i32toi64:
624*9880d681SAndroid Build Coastguard Worker   %res = bitcast <2 x i32> %in to i64
625*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
626*9880d681SAndroid Build Coastguard Worker   ret i64 %res
627*9880d681SAndroid Build Coastguard Worker}
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv2f32toi64(<2 x float> %in) {
630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2f32toi64:
631*9880d681SAndroid Build Coastguard Worker   %res = bitcast <2 x float> %in to i64
632*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
633*9880d681SAndroid Build Coastguard Worker   ret i64 %res
634*9880d681SAndroid Build Coastguard Worker}
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv1i64toi64(<1 x i64> %in) {
637*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1i64toi64:
638*9880d681SAndroid Build Coastguard Worker   %res = bitcast <1 x i64> %in to i64
639*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
640*9880d681SAndroid Build Coastguard Worker   ret i64 %res
641*9880d681SAndroid Build Coastguard Worker}
642*9880d681SAndroid Build Coastguard Worker
643*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv1f64toi64(<1 x double> %in) {
644*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64toi64:
645*9880d681SAndroid Build Coastguard Worker   %res = bitcast <1 x double> %in to i64
646*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
647*9880d681SAndroid Build Coastguard Worker   ret i64 %res
648*9880d681SAndroid Build Coastguard Worker}
649*9880d681SAndroid Build Coastguard Worker
650*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_bitcasti64tov8i8(i64 %in) {
651*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov8i8:
652*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <8 x i8>
653*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
654*9880d681SAndroid Build Coastguard Worker   ret <8 x i8> %res
655*9880d681SAndroid Build Coastguard Worker}
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_bitcasti64tov4i16(i64 %in) {
658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov4i16:
659*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <4 x i16>
660*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
661*9880d681SAndroid Build Coastguard Worker   ret <4 x i16> %res
662*9880d681SAndroid Build Coastguard Worker}
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_bitcasti64tov2i32(i64 %in) {
665*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov2i32:
666*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <2 x i32>
667*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
668*9880d681SAndroid Build Coastguard Worker   ret <2 x i32> %res
669*9880d681SAndroid Build Coastguard Worker}
670*9880d681SAndroid Build Coastguard Worker
671*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_bitcasti64tov2f32(i64 %in) {
672*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov2f32:
673*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <2 x float>
674*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
675*9880d681SAndroid Build Coastguard Worker   ret <2 x float> %res
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcasti64tov1i64(i64 %in) {
679*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov1i64:
680*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <1 x i64>
681*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
682*9880d681SAndroid Build Coastguard Worker   ret <1 x i64> %res
683*9880d681SAndroid Build Coastguard Worker}
684*9880d681SAndroid Build Coastguard Worker
685*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_bitcasti64tov1f64(i64 %in) {
686*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov1f64:
687*9880d681SAndroid Build Coastguard Worker   %res = bitcast i64 %in to <1 x double>
688*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
689*9880d681SAndroid Build Coastguard Worker   ret <1 x double> %res
690*9880d681SAndroid Build Coastguard Worker}
691*9880d681SAndroid Build Coastguard Worker
692*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv8i8tov1f64(<8 x i8> %a) #0 {
693*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv8i8tov1f64:
694*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
695*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}}
696*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <8 x i8> zeroinitializer, %a
697*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %sub.i to <1 x double>
698*9880d681SAndroid Build Coastguard Worker  %vcvt.i = fptosi <1 x double> %1 to <1 x i64>
699*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vcvt.i
700*9880d681SAndroid Build Coastguard Worker}
701*9880d681SAndroid Build Coastguard Worker
702*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv4i16tov1f64(<4 x i16> %a) #0 {
703*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv4i16tov1f64:
704*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
705*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[dx][0-9]+}}, {{d[0-9]+}}
706*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <4 x i16> zeroinitializer, %a
707*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %sub.i to <1 x double>
708*9880d681SAndroid Build Coastguard Worker  %vcvt.i = fptosi <1 x double> %1 to <1 x i64>
709*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vcvt.i
710*9880d681SAndroid Build Coastguard Worker}
711*9880d681SAndroid Build Coastguard Worker
712*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv2i32tov1f64(<2 x i32> %a) #0 {
713*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2i32tov1f64:
714*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
715*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}}
716*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <2 x i32> zeroinitializer, %a
717*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %sub.i to <1 x double>
718*9880d681SAndroid Build Coastguard Worker  %vcvt.i = fptosi <1 x double> %1 to <1 x i64>
719*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vcvt.i
720*9880d681SAndroid Build Coastguard Worker}
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv1i64tov1f64(<1 x i64> %a) #0 {
723*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1i64tov1f64:
724*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{d[0-9]+}}, {{d[0-9]+}}
725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[dx][0-9]+}}, {{d[0-9]+}}
726*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <1 x i64> zeroinitializer, %a
727*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x i64> %sub.i to <1 x double>
728*9880d681SAndroid Build Coastguard Worker  %vcvt.i = fptosi <1 x double> %1 to <1 x i64>
729*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vcvt.i
730*9880d681SAndroid Build Coastguard Worker}
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv2f32tov1f64(<2 x float> %a) #0 {
733*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2f32tov1f64:
734*9880d681SAndroid Build Coastguard Worker; CHECK: fneg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
735*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}}
736*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %a
737*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x float> %sub.i to <1 x double>
738*9880d681SAndroid Build Coastguard Worker  %vcvt.i = fptosi <1 x double> %1 to <1 x i64>
739*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vcvt.i
740*9880d681SAndroid Build Coastguard Worker}
741*9880d681SAndroid Build Coastguard Worker
742*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_bitcastv1f64tov8i8(<1 x i64> %a) #0 {
743*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov8i8:
744*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}}
745*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
746*9880d681SAndroid Build Coastguard Worker  %vcvt.i = sitofp <1 x i64> %a to <1 x double>
747*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %vcvt.i to <8 x i8>
748*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <8 x i8> zeroinitializer, %1
749*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %sub.i
750*9880d681SAndroid Build Coastguard Worker}
751*9880d681SAndroid Build Coastguard Worker
752*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_bitcastv1f64tov4i16(<1 x i64> %a) #0 {
753*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov4i16:
754*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}}
755*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
756*9880d681SAndroid Build Coastguard Worker  %vcvt.i = sitofp <1 x i64> %a to <1 x double>
757*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %vcvt.i to <4 x i16>
758*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <4 x i16> zeroinitializer, %1
759*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %sub.i
760*9880d681SAndroid Build Coastguard Worker}
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_bitcastv1f64tov2i32(<1 x i64> %a) #0 {
763*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov2i32:
764*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}}
765*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
766*9880d681SAndroid Build Coastguard Worker  %vcvt.i = sitofp <1 x i64> %a to <1 x double>
767*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %vcvt.i to <2 x i32>
768*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <2 x i32> zeroinitializer, %1
769*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %sub.i
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv1f64tov1i64(<1 x i64> %a) #0 {
773*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov1i64:
774*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}}
775*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{d[0-9]+}}, {{d[0-9]+}}
776*9880d681SAndroid Build Coastguard Worker  %vcvt.i = sitofp <1 x i64> %a to <1 x double>
777*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %vcvt.i to <1 x i64>
778*9880d681SAndroid Build Coastguard Worker  %sub.i = sub <1 x i64> zeroinitializer, %1
779*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %sub.i
780*9880d681SAndroid Build Coastguard Worker}
781*9880d681SAndroid Build Coastguard Worker
782*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_bitcastv1f64tov2f32(<1 x i64> %a) #0 {
783*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov2f32:
784*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}}
785*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fneg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
786*9880d681SAndroid Build Coastguard Worker  %vcvt.i = sitofp <1 x i64> %a to <1 x double>
787*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %vcvt.i to <2 x float>
788*9880d681SAndroid Build Coastguard Worker  %sub.i = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %1
789*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %sub.i
790*9880d681SAndroid Build Coastguard Worker}
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Worker; Test insert element into an undef vector
793*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @scalar_to_vector.v8i8(i8 %a) {
794*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v8i8:
795*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
796*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i8> undef, i8 %a, i32 0
797*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %b
798*9880d681SAndroid Build Coastguard Worker}
799*9880d681SAndroid Build Coastguard Worker
800*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @scalar_to_vector.v16i8(i8 %a) {
801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v16i8:
802*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
803*9880d681SAndroid Build Coastguard Worker  %b = insertelement <16 x i8> undef, i8 %a, i32 0
804*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %b
805*9880d681SAndroid Build Coastguard Worker}
806*9880d681SAndroid Build Coastguard Worker
807*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @scalar_to_vector.v4i16(i16 %a) {
808*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v4i16:
809*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
810*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x i16> undef, i16 %a, i32 0
811*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %b
812*9880d681SAndroid Build Coastguard Worker}
813*9880d681SAndroid Build Coastguard Worker
814*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @scalar_to_vector.v8i16(i16 %a) {
815*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v8i16:
816*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
817*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i16> undef, i16 %a, i32 0
818*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %b
819*9880d681SAndroid Build Coastguard Worker}
820*9880d681SAndroid Build Coastguard Worker
821*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @scalar_to_vector.v2i32(i32 %a) {
822*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v2i32:
823*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
824*9880d681SAndroid Build Coastguard Worker  %b = insertelement <2 x i32> undef, i32 %a, i32 0
825*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
826*9880d681SAndroid Build Coastguard Worker}
827*9880d681SAndroid Build Coastguard Worker
828*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @scalar_to_vector.v4i32(i32 %a) {
829*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v4i32:
830*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}}
831*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x i32> undef, i32 %a, i32 0
832*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %b
833*9880d681SAndroid Build Coastguard Worker}
834*9880d681SAndroid Build Coastguard Worker
835*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @scalar_to_vector.v2i64(i64 %a) {
836*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v2i64:
837*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
838*9880d681SAndroid Build Coastguard Worker  %b = insertelement <2 x i64> undef, i64 %a, i32 0
839*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %b
840*9880d681SAndroid Build Coastguard Worker}
841*9880d681SAndroid Build Coastguard Worker
842*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @testDUP.v1i8(<1 x i8> %a) {
843*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i8:
844*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8b, v0.b[0]
845*9880d681SAndroid Build Coastguard Worker  %b = extractelement <1 x i8> %a, i32 0
846*9880d681SAndroid Build Coastguard Worker  %c = insertelement <8 x i8> undef, i8 %b, i32 0
847*9880d681SAndroid Build Coastguard Worker  %d = insertelement <8 x i8> %c, i8 %b, i32 1
848*9880d681SAndroid Build Coastguard Worker  %e = insertelement <8 x i8> %d, i8 %b, i32 2
849*9880d681SAndroid Build Coastguard Worker  %f = insertelement <8 x i8> %e, i8 %b, i32 3
850*9880d681SAndroid Build Coastguard Worker  %g = insertelement <8 x i8> %f, i8 %b, i32 4
851*9880d681SAndroid Build Coastguard Worker  %h = insertelement <8 x i8> %g, i8 %b, i32 5
852*9880d681SAndroid Build Coastguard Worker  %i = insertelement <8 x i8> %h, i8 %b, i32 6
853*9880d681SAndroid Build Coastguard Worker  %j = insertelement <8 x i8> %i, i8 %b, i32 7
854*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %j
855*9880d681SAndroid Build Coastguard Worker}
856*9880d681SAndroid Build Coastguard Worker
857*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @testDUP.v1i16(<1 x i16> %a) {
858*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i16:
859*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[0]
860*9880d681SAndroid Build Coastguard Worker  %b = extractelement <1 x i16> %a, i32 0
861*9880d681SAndroid Build Coastguard Worker  %c = insertelement <8 x i16> undef, i16 %b, i32 0
862*9880d681SAndroid Build Coastguard Worker  %d = insertelement <8 x i16> %c, i16 %b, i32 1
863*9880d681SAndroid Build Coastguard Worker  %e = insertelement <8 x i16> %d, i16 %b, i32 2
864*9880d681SAndroid Build Coastguard Worker  %f = insertelement <8 x i16> %e, i16 %b, i32 3
865*9880d681SAndroid Build Coastguard Worker  %g = insertelement <8 x i16> %f, i16 %b, i32 4
866*9880d681SAndroid Build Coastguard Worker  %h = insertelement <8 x i16> %g, i16 %b, i32 5
867*9880d681SAndroid Build Coastguard Worker  %i = insertelement <8 x i16> %h, i16 %b, i32 6
868*9880d681SAndroid Build Coastguard Worker  %j = insertelement <8 x i16> %i, i16 %b, i32 7
869*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %j
870*9880d681SAndroid Build Coastguard Worker}
871*9880d681SAndroid Build Coastguard Worker
872*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @testDUP.v1i32(<1 x i32> %a) {
873*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i32:
874*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[0]
875*9880d681SAndroid Build Coastguard Worker  %b = extractelement <1 x i32> %a, i32 0
876*9880d681SAndroid Build Coastguard Worker  %c = insertelement <4 x i32> undef, i32 %b, i32 0
877*9880d681SAndroid Build Coastguard Worker  %d = insertelement <4 x i32> %c, i32 %b, i32 1
878*9880d681SAndroid Build Coastguard Worker  %e = insertelement <4 x i32> %d, i32 %b, i32 2
879*9880d681SAndroid Build Coastguard Worker  %f = insertelement <4 x i32> %e, i32 %b, i32 3
880*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %f
881*9880d681SAndroid Build Coastguard Worker}
882*9880d681SAndroid Build Coastguard Worker
883*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @getl(<16 x i8> %x) #0 {
884*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: getl:
885*9880d681SAndroid Build Coastguard Worker; CHECK: ret
886*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <16 x i8> %x, i32 0
887*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <8 x i8> undef, i8 %vecext, i32 0
888*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <16 x i8> %x, i32 1
889*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <8 x i8> %vecinit, i8 %vecext1, i32 1
890*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <16 x i8> %x, i32 2
891*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <8 x i8> %vecinit2, i8 %vecext3, i32 2
892*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <16 x i8> %x, i32 3
893*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <8 x i8> %vecinit4, i8 %vecext5, i32 3
894*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <16 x i8> %x, i32 4
895*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <8 x i8> %vecinit6, i8 %vecext7, i32 4
896*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <16 x i8> %x, i32 5
897*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <8 x i8> %vecinit8, i8 %vecext9, i32 5
898*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <16 x i8> %x, i32 6
899*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <8 x i8> %vecinit10, i8 %vecext11, i32 6
900*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <16 x i8> %x, i32 7
901*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <8 x i8> %vecinit12, i8 %vecext13, i32 7
902*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vecinit14
903*9880d681SAndroid Build Coastguard Worker}
904*9880d681SAndroid Build Coastguard Worker
905*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_extracts_inserts_varidx_extract:
906*9880d681SAndroid Build Coastguard Worker; CHECK: str q0
907*9880d681SAndroid Build Coastguard Worker; CHECK: add x[[PTR:[0-9]+]], {{.*}}, w0, sxtw #1
908*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld1 { v[[R:[0-9]+]].h }[0], [x[[PTR]]]
909*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[1], v0.h[1]
910*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[2], v0.h[2]
911*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[3], v0.h[3]
912*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_extracts_inserts_varidx_extract(<8 x i16> %x, i32 %idx) {
913*9880d681SAndroid Build Coastguard Worker  %tmp = extractelement <8 x i16> %x, i32 %idx
914*9880d681SAndroid Build Coastguard Worker  %tmp2 = insertelement <4 x i16> undef, i16 %tmp, i32 0
915*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %x, i32 1
916*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 1
917*9880d681SAndroid Build Coastguard Worker  %tmp5 = extractelement <8 x i16> %x, i32 2
918*9880d681SAndroid Build Coastguard Worker  %tmp6 = insertelement <4 x i16> %tmp4, i16 %tmp5, i32 2
919*9880d681SAndroid Build Coastguard Worker  %tmp7 = extractelement <8 x i16> %x, i32 3
920*9880d681SAndroid Build Coastguard Worker  %tmp8 = insertelement <4 x i16> %tmp6, i16 %tmp7, i32 3
921*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %tmp8
922*9880d681SAndroid Build Coastguard Worker}
923*9880d681SAndroid Build Coastguard Worker
924*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_extracts_inserts_varidx_insert:
925*9880d681SAndroid Build Coastguard Worker; CHECK: str h0, [{{.*}}, w0, sxtw #1]
926*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ldr d[[R:[0-9]+]]
927*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[1], v0.h[1]
928*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[2], v0.h[2]
929*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[3], v0.h[3]
930*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_extracts_inserts_varidx_insert(<8 x i16> %x, i32 %idx) {
931*9880d681SAndroid Build Coastguard Worker  %tmp = extractelement <8 x i16> %x, i32 0
932*9880d681SAndroid Build Coastguard Worker  %tmp2 = insertelement <4 x i16> undef, i16 %tmp, i32 %idx
933*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractelement <8 x i16> %x, i32 1
934*9880d681SAndroid Build Coastguard Worker  %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 1
935*9880d681SAndroid Build Coastguard Worker  %tmp5 = extractelement <8 x i16> %x, i32 2
936*9880d681SAndroid Build Coastguard Worker  %tmp6 = insertelement <4 x i16> %tmp4, i16 %tmp5, i32 2
937*9880d681SAndroid Build Coastguard Worker  %tmp7 = extractelement <8 x i16> %x, i32 3
938*9880d681SAndroid Build Coastguard Worker  %tmp8 = insertelement <4 x i16> %tmp6, i16 %tmp7, i32 3
939*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %tmp8
940*9880d681SAndroid Build Coastguard Worker}
941*9880d681SAndroid Build Coastguard Worker
942*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v2i32_v4i16(<2 x i32> %a) {
943*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i32_v4i16:
944*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[2]
945*9880d681SAndroid Build Coastguard Workerentry:
946*9880d681SAndroid Build Coastguard Worker  %x = extractelement <2 x i32> %a, i32 1
947*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i32 %x to i16
948*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0
949*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1
950*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2
951*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3
952*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vecinit3.i
953*9880d681SAndroid Build Coastguard Worker}
954*9880d681SAndroid Build Coastguard Worker
955*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_dup_v4i32_v8i16(<4 x i32> %a) {
956*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v4i32_v8i16:
957*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[6]
958*9880d681SAndroid Build Coastguard Workerentry:
959*9880d681SAndroid Build Coastguard Worker  %x = extractelement <4 x i32> %a, i32 3
960*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i32 %x to i16
961*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <8 x i16> undef, i16 %vget_lane, i32 0
962*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %vget_lane, i32 1
963*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %vget_lane, i32 2
964*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %vget_lane, i32 3
965*9880d681SAndroid Build Coastguard Worker  %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %vget_lane, i32 4
966*9880d681SAndroid Build Coastguard Worker  %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %vget_lane, i32 5
967*9880d681SAndroid Build Coastguard Worker  %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %vget_lane, i32 6
968*9880d681SAndroid Build Coastguard Worker  %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %vget_lane, i32 7
969*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit7.i
970*9880d681SAndroid Build Coastguard Worker}
971*9880d681SAndroid Build Coastguard Worker
972*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v1i64_v4i16(<1 x i64> %a) {
973*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v1i64_v4i16:
974*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0]
975*9880d681SAndroid Build Coastguard Workerentry:
976*9880d681SAndroid Build Coastguard Worker  %x = extractelement <1 x i64> %a, i32 0
977*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i16
978*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0
979*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1
980*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2
981*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3
982*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vecinit3.i
983*9880d681SAndroid Build Coastguard Worker}
984*9880d681SAndroid Build Coastguard Worker
985*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_dup_v1i64_v2i32(<1 x i64> %a) {
986*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v1i64_v2i32:
987*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.2s, v0.s[0]
988*9880d681SAndroid Build Coastguard Workerentry:
989*9880d681SAndroid Build Coastguard Worker  %x = extractelement <1 x i64> %a, i32 0
990*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i32
991*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x i32> undef, i32 %vget_lane, i32 0
992*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %vget_lane, i32 1
993*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit1.i
994*9880d681SAndroid Build Coastguard Worker}
995*9880d681SAndroid Build Coastguard Worker
996*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_dup_v2i64_v8i16(<2 x i64> %a) {
997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v8i16:
998*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[4]
999*9880d681SAndroid Build Coastguard Workerentry:
1000*9880d681SAndroid Build Coastguard Worker  %x = extractelement <2 x i64> %a, i32 1
1001*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i16
1002*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <8 x i16> undef, i16 %vget_lane, i32 0
1003*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %vget_lane, i32 1
1004*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %vget_lane, i32 2
1005*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %vget_lane, i32 3
1006*9880d681SAndroid Build Coastguard Worker  %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %vget_lane, i32 4
1007*9880d681SAndroid Build Coastguard Worker  %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %vget_lane, i32 5
1008*9880d681SAndroid Build Coastguard Worker  %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %vget_lane, i32 6
1009*9880d681SAndroid Build Coastguard Worker  %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %vget_lane, i32 7
1010*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit7.i
1011*9880d681SAndroid Build Coastguard Worker}
1012*9880d681SAndroid Build Coastguard Worker
1013*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_dup_v2i64_v4i32(<2 x i64> %a) {
1014*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v4i32:
1015*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[2]
1016*9880d681SAndroid Build Coastguard Workerentry:
1017*9880d681SAndroid Build Coastguard Worker  %x = extractelement <2 x i64> %a, i32 1
1018*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i32
1019*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i32> undef, i32 %vget_lane, i32 0
1020*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i32> %vecinit.i, i32 %vget_lane, i32 1
1021*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i32> %vecinit1.i, i32 %vget_lane, i32 2
1022*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i32> %vecinit2.i, i32 %vget_lane, i32 3
1023*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit3.i
1024*9880d681SAndroid Build Coastguard Worker}
1025*9880d681SAndroid Build Coastguard Worker
1026*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v4i32_v4i16(<4 x i32> %a) {
1027*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v4i32_v4i16:
1028*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[2]
1029*9880d681SAndroid Build Coastguard Workerentry:
1030*9880d681SAndroid Build Coastguard Worker  %x = extractelement <4 x i32> %a, i32 1
1031*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i32 %x to i16
1032*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0
1033*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1
1034*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2
1035*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3
1036*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vecinit3.i
1037*9880d681SAndroid Build Coastguard Worker}
1038*9880d681SAndroid Build Coastguard Worker
1039*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v2i64_v4i16(<2 x i64> %a) {
1040*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v4i16:
1041*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0]
1042*9880d681SAndroid Build Coastguard Workerentry:
1043*9880d681SAndroid Build Coastguard Worker  %x = extractelement <2 x i64> %a, i32 0
1044*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i16
1045*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0
1046*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1
1047*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2
1048*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3
1049*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vecinit3.i
1050*9880d681SAndroid Build Coastguard Worker}
1051*9880d681SAndroid Build Coastguard Worker
1052*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_dup_v2i64_v2i32(<2 x i64> %a) {
1053*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v2i32:
1054*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.2s, v0.s[0]
1055*9880d681SAndroid Build Coastguard Workerentry:
1056*9880d681SAndroid Build Coastguard Worker  %x = extractelement <2 x i64> %a, i32 0
1057*9880d681SAndroid Build Coastguard Worker  %vget_lane = trunc i64 %x to i32
1058*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x i32> undef, i32 %vget_lane, i32 0
1059*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %vget_lane, i32 1
1060*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit1.i
1061*9880d681SAndroid Build Coastguard Worker}
1062*9880d681SAndroid Build Coastguard Worker
1063*9880d681SAndroid Build Coastguard Worker
1064*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_scalar_to_vector_f32_to_v2f32(<2 x float> %a) {
1065*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_scalar_to_vector_f32_to_v2f32:
1066*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxp s{{[0-9]+}}, v{{[0-9]+}}.2s
1067*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
1068*9880d681SAndroid Build Coastguard Workerentry:
1069*9880d681SAndroid Build Coastguard Worker  %0 = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a)
1070*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <1 x float> undef, float %0, i32 0
1071*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <1 x float> %1, i32 0
1072*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x float> undef, float %2, i32 0
1073*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %vecinit1.i
1074*9880d681SAndroid Build Coastguard Worker}
1075*9880d681SAndroid Build Coastguard Worker
1076*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_scalar_to_vector_f32_to_v4f32(<2 x float> %a) {
1077*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_scalar_to_vector_f32_to_v4f32:
1078*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxp s{{[0-9]+}}, v{{[0-9]+}}.2s
1079*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
1080*9880d681SAndroid Build Coastguard Workerentry:
1081*9880d681SAndroid Build Coastguard Worker  %0 = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a)
1082*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <1 x float> undef, float %0, i32 0
1083*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <1 x float> %1, i32 0
1084*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x float> undef, float %2, i32 0
1085*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinit1.i
1086*9880d681SAndroid Build Coastguard Worker}
1087*9880d681SAndroid Build Coastguard Worker
1088*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float>)
1089*9880d681SAndroid Build Coastguard Worker
1090*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_undef_v1i32(<2 x i32> %a) {
1091*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_undef_v1i32:
1092*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
1093*9880d681SAndroid Build Coastguard Workerentry:
1094*9880d681SAndroid Build Coastguard Worker  %0 = extractelement <2 x i32> %a, i32 0
1095*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i32> undef, i32 %0, i32 1
1096*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit1.i
1097*9880d681SAndroid Build Coastguard Worker}
1098*9880d681SAndroid Build Coastguard Worker
1099*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqabs.i32(i32) #4
1100*9880d681SAndroid Build Coastguard Worker
1101*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_v1i32_undef(i32 %a) {
1102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v1i32_undef:
1103*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}}
1104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
1105*9880d681SAndroid Build Coastguard Workerentry:
1106*9880d681SAndroid Build Coastguard Worker  %b = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %a)
1107*9880d681SAndroid Build Coastguard Worker  %vecinit.i432 = insertelement <2 x i32> undef, i32 %b, i32 0
1108*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit.i432
1109*9880d681SAndroid Build Coastguard Worker}
1110*9880d681SAndroid Build Coastguard Worker
1111*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_same_v1i32_v1i32(<2 x i32> %a) {
1112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_same_v1i32_v1i32:
1113*9880d681SAndroid Build Coastguard Worker; CHECK: dup v{{[0-9]+}}.2s, v{{[0-9]+}}.s[0]
1114*9880d681SAndroid Build Coastguard Workerentry:
1115*9880d681SAndroid Build Coastguard Worker  %0 = extractelement <2 x i32> %a, i32 0
1116*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x i32> undef, i32 %0, i32 0
1117*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %0, i32 1
1118*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vecinit1.i
1119*9880d681SAndroid Build Coastguard Worker}
1120*9880d681SAndroid Build Coastguard Worker
1121*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_diff_v1i32_v1i32(i32 %a, i32 %b) {
1122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_diff_v1i32_v1i32:
1123*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}}
1124*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}}
1125*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], w{{[0-9]+}}
1126*9880d681SAndroid Build Coastguard Workerentry:
1127*9880d681SAndroid Build Coastguard Worker  %c = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %a)
1128*9880d681SAndroid Build Coastguard Worker  %d = insertelement <2 x i32> undef, i32 %c, i32 0
1129*9880d681SAndroid Build Coastguard Worker  %e = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %b)
1130*9880d681SAndroid Build Coastguard Worker  %f = insertelement <2 x i32> undef, i32 %e, i32 0
1131*9880d681SAndroid Build Coastguard Worker  %h = shufflevector <2 x i32> %d, <2 x i32> %f, <2 x i32> <i32 0, i32 2>
1132*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %h
1133*9880d681SAndroid Build Coastguard Worker}
1134*9880d681SAndroid Build Coastguard Worker
1135*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v16i8_v16i8(<16 x i8> %x, <16 x i8> %y) #0 {
1136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v16i8_v16i8:
1137*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1138*9880d681SAndroid Build Coastguard Workerentry:
1139*9880d681SAndroid Build Coastguard Worker  %vecinit30 = shufflevector <16 x i8> %x, <16 x i8> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>
1140*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vecinit30
1141*9880d681SAndroid Build Coastguard Worker}
1142*9880d681SAndroid Build Coastguard Worker
1143*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v8i8_v16i8(<8 x i8> %x, <16 x i8> %y) #0 {
1144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v8i8_v16i8:
1145*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1146*9880d681SAndroid Build Coastguard Workerentry:
1147*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <8 x i8> %x, i32 0
1148*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0
1149*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <8 x i8> %x, i32 1
1150*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1
1151*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <8 x i8> %x, i32 2
1152*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2
1153*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <8 x i8> %x, i32 3
1154*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3
1155*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <8 x i8> %x, i32 4
1156*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4
1157*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <8 x i8> %x, i32 5
1158*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5
1159*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <8 x i8> %x, i32 6
1160*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6
1161*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <8 x i8> %x, i32 7
1162*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7
1163*9880d681SAndroid Build Coastguard Worker  %vecinit30 = shufflevector <16 x i8> %vecinit14, <16 x i8> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>
1164*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vecinit30
1165*9880d681SAndroid Build Coastguard Worker}
1166*9880d681SAndroid Build Coastguard Worker
1167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v16i8_v8i8(<16 x i8> %x, <8 x i8> %y) #0 {
1168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v16i8_v8i8:
1169*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1170*9880d681SAndroid Build Coastguard Workerentry:
1171*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <16 x i8> %x, i32 0
1172*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0
1173*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <16 x i8> %x, i32 1
1174*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1
1175*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <16 x i8> %x, i32 2
1176*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2
1177*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <16 x i8> %x, i32 3
1178*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3
1179*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <16 x i8> %x, i32 4
1180*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4
1181*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <16 x i8> %x, i32 5
1182*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5
1183*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <16 x i8> %x, i32 6
1184*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6
1185*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <16 x i8> %x, i32 7
1186*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7
1187*9880d681SAndroid Build Coastguard Worker  %vecext15 = extractelement <8 x i8> %y, i32 0
1188*9880d681SAndroid Build Coastguard Worker  %vecinit16 = insertelement <16 x i8> %vecinit14, i8 %vecext15, i32 8
1189*9880d681SAndroid Build Coastguard Worker  %vecext17 = extractelement <8 x i8> %y, i32 1
1190*9880d681SAndroid Build Coastguard Worker  %vecinit18 = insertelement <16 x i8> %vecinit16, i8 %vecext17, i32 9
1191*9880d681SAndroid Build Coastguard Worker  %vecext19 = extractelement <8 x i8> %y, i32 2
1192*9880d681SAndroid Build Coastguard Worker  %vecinit20 = insertelement <16 x i8> %vecinit18, i8 %vecext19, i32 10
1193*9880d681SAndroid Build Coastguard Worker  %vecext21 = extractelement <8 x i8> %y, i32 3
1194*9880d681SAndroid Build Coastguard Worker  %vecinit22 = insertelement <16 x i8> %vecinit20, i8 %vecext21, i32 11
1195*9880d681SAndroid Build Coastguard Worker  %vecext23 = extractelement <8 x i8> %y, i32 4
1196*9880d681SAndroid Build Coastguard Worker  %vecinit24 = insertelement <16 x i8> %vecinit22, i8 %vecext23, i32 12
1197*9880d681SAndroid Build Coastguard Worker  %vecext25 = extractelement <8 x i8> %y, i32 5
1198*9880d681SAndroid Build Coastguard Worker  %vecinit26 = insertelement <16 x i8> %vecinit24, i8 %vecext25, i32 13
1199*9880d681SAndroid Build Coastguard Worker  %vecext27 = extractelement <8 x i8> %y, i32 6
1200*9880d681SAndroid Build Coastguard Worker  %vecinit28 = insertelement <16 x i8> %vecinit26, i8 %vecext27, i32 14
1201*9880d681SAndroid Build Coastguard Worker  %vecext29 = extractelement <8 x i8> %y, i32 7
1202*9880d681SAndroid Build Coastguard Worker  %vecinit30 = insertelement <16 x i8> %vecinit28, i8 %vecext29, i32 15
1203*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vecinit30
1204*9880d681SAndroid Build Coastguard Worker}
1205*9880d681SAndroid Build Coastguard Worker
1206*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v8i8_v8i8(<8 x i8> %x, <8 x i8> %y) #0 {
1207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v8i8_v8i8:
1208*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1209*9880d681SAndroid Build Coastguard Workerentry:
1210*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <8 x i8> %x, i32 0
1211*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0
1212*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <8 x i8> %x, i32 1
1213*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1
1214*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <8 x i8> %x, i32 2
1215*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2
1216*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <8 x i8> %x, i32 3
1217*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3
1218*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <8 x i8> %x, i32 4
1219*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4
1220*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <8 x i8> %x, i32 5
1221*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5
1222*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <8 x i8> %x, i32 6
1223*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6
1224*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <8 x i8> %x, i32 7
1225*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7
1226*9880d681SAndroid Build Coastguard Worker  %vecext15 = extractelement <8 x i8> %y, i32 0
1227*9880d681SAndroid Build Coastguard Worker  %vecinit16 = insertelement <16 x i8> %vecinit14, i8 %vecext15, i32 8
1228*9880d681SAndroid Build Coastguard Worker  %vecext17 = extractelement <8 x i8> %y, i32 1
1229*9880d681SAndroid Build Coastguard Worker  %vecinit18 = insertelement <16 x i8> %vecinit16, i8 %vecext17, i32 9
1230*9880d681SAndroid Build Coastguard Worker  %vecext19 = extractelement <8 x i8> %y, i32 2
1231*9880d681SAndroid Build Coastguard Worker  %vecinit20 = insertelement <16 x i8> %vecinit18, i8 %vecext19, i32 10
1232*9880d681SAndroid Build Coastguard Worker  %vecext21 = extractelement <8 x i8> %y, i32 3
1233*9880d681SAndroid Build Coastguard Worker  %vecinit22 = insertelement <16 x i8> %vecinit20, i8 %vecext21, i32 11
1234*9880d681SAndroid Build Coastguard Worker  %vecext23 = extractelement <8 x i8> %y, i32 4
1235*9880d681SAndroid Build Coastguard Worker  %vecinit24 = insertelement <16 x i8> %vecinit22, i8 %vecext23, i32 12
1236*9880d681SAndroid Build Coastguard Worker  %vecext25 = extractelement <8 x i8> %y, i32 5
1237*9880d681SAndroid Build Coastguard Worker  %vecinit26 = insertelement <16 x i8> %vecinit24, i8 %vecext25, i32 13
1238*9880d681SAndroid Build Coastguard Worker  %vecext27 = extractelement <8 x i8> %y, i32 6
1239*9880d681SAndroid Build Coastguard Worker  %vecinit28 = insertelement <16 x i8> %vecinit26, i8 %vecext27, i32 14
1240*9880d681SAndroid Build Coastguard Worker  %vecext29 = extractelement <8 x i8> %y, i32 7
1241*9880d681SAndroid Build Coastguard Worker  %vecinit30 = insertelement <16 x i8> %vecinit28, i8 %vecext29, i32 15
1242*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vecinit30
1243*9880d681SAndroid Build Coastguard Worker}
1244*9880d681SAndroid Build Coastguard Worker
1245*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v8i16_v8i16(<8 x i16> %x, <8 x i16> %y) #0 {
1246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v8i16_v8i16:
1247*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1248*9880d681SAndroid Build Coastguard Workerentry:
1249*9880d681SAndroid Build Coastguard Worker  %vecinit14 = shufflevector <8 x i16> %x, <8 x i16> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1250*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit14
1251*9880d681SAndroid Build Coastguard Worker}
1252*9880d681SAndroid Build Coastguard Worker
1253*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v4i16_v8i16(<4 x i16> %x, <8 x i16> %y) #0 {
1254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v4i16_v8i16:
1255*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1256*9880d681SAndroid Build Coastguard Workerentry:
1257*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <4 x i16> %x, i32 0
1258*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0
1259*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <4 x i16> %x, i32 1
1260*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1
1261*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <4 x i16> %x, i32 2
1262*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2
1263*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <4 x i16> %x, i32 3
1264*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3
1265*9880d681SAndroid Build Coastguard Worker  %vecinit14 = shufflevector <8 x i16> %vecinit6, <8 x i16> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1266*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit14
1267*9880d681SAndroid Build Coastguard Worker}
1268*9880d681SAndroid Build Coastguard Worker
1269*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v8i16_v4i16(<8 x i16> %x, <4 x i16> %y) #0 {
1270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v8i16_v4i16:
1271*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1272*9880d681SAndroid Build Coastguard Workerentry:
1273*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <8 x i16> %x, i32 0
1274*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0
1275*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <8 x i16> %x, i32 1
1276*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1
1277*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <8 x i16> %x, i32 2
1278*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2
1279*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <8 x i16> %x, i32 3
1280*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3
1281*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <4 x i16> %y, i32 0
1282*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <8 x i16> %vecinit6, i16 %vecext7, i32 4
1283*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <4 x i16> %y, i32 1
1284*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <8 x i16> %vecinit8, i16 %vecext9, i32 5
1285*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <4 x i16> %y, i32 2
1286*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <8 x i16> %vecinit10, i16 %vecext11, i32 6
1287*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <4 x i16> %y, i32 3
1288*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <8 x i16> %vecinit12, i16 %vecext13, i32 7
1289*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit14
1290*9880d681SAndroid Build Coastguard Worker}
1291*9880d681SAndroid Build Coastguard Worker
1292*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v4i16_v4i16(<4 x i16> %x, <4 x i16> %y) #0 {
1293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v4i16_v4i16:
1294*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1295*9880d681SAndroid Build Coastguard Workerentry:
1296*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <4 x i16> %x, i32 0
1297*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0
1298*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <4 x i16> %x, i32 1
1299*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1
1300*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <4 x i16> %x, i32 2
1301*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2
1302*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <4 x i16> %x, i32 3
1303*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3
1304*9880d681SAndroid Build Coastguard Worker  %vecext7 = extractelement <4 x i16> %y, i32 0
1305*9880d681SAndroid Build Coastguard Worker  %vecinit8 = insertelement <8 x i16> %vecinit6, i16 %vecext7, i32 4
1306*9880d681SAndroid Build Coastguard Worker  %vecext9 = extractelement <4 x i16> %y, i32 1
1307*9880d681SAndroid Build Coastguard Worker  %vecinit10 = insertelement <8 x i16> %vecinit8, i16 %vecext9, i32 5
1308*9880d681SAndroid Build Coastguard Worker  %vecext11 = extractelement <4 x i16> %y, i32 2
1309*9880d681SAndroid Build Coastguard Worker  %vecinit12 = insertelement <8 x i16> %vecinit10, i16 %vecext11, i32 6
1310*9880d681SAndroid Build Coastguard Worker  %vecext13 = extractelement <4 x i16> %y, i32 3
1311*9880d681SAndroid Build Coastguard Worker  %vecinit14 = insertelement <8 x i16> %vecinit12, i16 %vecext13, i32 7
1312*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vecinit14
1313*9880d681SAndroid Build Coastguard Worker}
1314*9880d681SAndroid Build Coastguard Worker
1315*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v4i32_v4i32(<4 x i32> %x, <4 x i32> %y) #0 {
1316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v4i32_v4i32:
1317*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1318*9880d681SAndroid Build Coastguard Workerentry:
1319*9880d681SAndroid Build Coastguard Worker  %vecinit6 = shufflevector <4 x i32> %x, <4 x i32> %y, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1320*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit6
1321*9880d681SAndroid Build Coastguard Worker}
1322*9880d681SAndroid Build Coastguard Worker
1323*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v2i32_v4i32(<2 x i32> %x, <4 x i32> %y) #0 {
1324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v2i32_v4i32:
1325*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1326*9880d681SAndroid Build Coastguard Workerentry:
1327*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <2 x i32> %x, i32 0
1328*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <4 x i32> undef, i32 %vecext, i32 0
1329*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <2 x i32> %x, i32 1
1330*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <4 x i32> %vecinit, i32 %vecext1, i32 1
1331*9880d681SAndroid Build Coastguard Worker  %vecinit6 = shufflevector <4 x i32> %vecinit2, <4 x i32> %y, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1332*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit6
1333*9880d681SAndroid Build Coastguard Worker}
1334*9880d681SAndroid Build Coastguard Worker
1335*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v4i32_v2i32(<4 x i32> %x, <2 x i32> %y) #0 {
1336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v4i32_v2i32:
1337*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1338*9880d681SAndroid Build Coastguard Workerentry:
1339*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <4 x i32> %x, i32 0
1340*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <4 x i32> undef, i32 %vecext, i32 0
1341*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <4 x i32> %x, i32 1
1342*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <4 x i32> %vecinit, i32 %vecext1, i32 1
1343*9880d681SAndroid Build Coastguard Worker  %vecext3 = extractelement <2 x i32> %y, i32 0
1344*9880d681SAndroid Build Coastguard Worker  %vecinit4 = insertelement <4 x i32> %vecinit2, i32 %vecext3, i32 2
1345*9880d681SAndroid Build Coastguard Worker  %vecext5 = extractelement <2 x i32> %y, i32 1
1346*9880d681SAndroid Build Coastguard Worker  %vecinit6 = insertelement <4 x i32> %vecinit4, i32 %vecext5, i32 3
1347*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit6
1348*9880d681SAndroid Build Coastguard Worker}
1349*9880d681SAndroid Build Coastguard Worker
1350*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v2i32_v2i32(<2 x i32> %x, <2 x i32> %y) #0 {
1351*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v2i32_v2i32:
1352*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1353*9880d681SAndroid Build Coastguard Workerentry:
1354*9880d681SAndroid Build Coastguard Worker  %vecinit6 = shufflevector <2 x i32> %x, <2 x i32> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1355*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vecinit6
1356*9880d681SAndroid Build Coastguard Worker}
1357*9880d681SAndroid Build Coastguard Worker
1358*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v2i64_v2i64(<2 x i64> %x, <2 x i64> %y) #0 {
1359*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v2i64_v2i64:
1360*9880d681SAndroid Build Coastguard Worker; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1361*9880d681SAndroid Build Coastguard Workerentry:
1362*9880d681SAndroid Build Coastguard Worker  %vecinit2 = shufflevector <2 x i64> %x, <2 x i64> %y, <2 x i32> <i32 0, i32 2>
1363*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vecinit2
1364*9880d681SAndroid Build Coastguard Worker}
1365*9880d681SAndroid Build Coastguard Worker
1366*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v1i64_v2i64(<1 x i64> %x, <2 x i64> %y) #0 {
1367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v1i64_v2i64:
1368*9880d681SAndroid Build Coastguard Worker; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1369*9880d681SAndroid Build Coastguard Workerentry:
1370*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <1 x i64> %x, i32 0
1371*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0
1372*9880d681SAndroid Build Coastguard Worker  %vecinit2 = shufflevector <2 x i64> %vecinit, <2 x i64> %y, <2 x i32> <i32 0, i32 2>
1373*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vecinit2
1374*9880d681SAndroid Build Coastguard Worker}
1375*9880d681SAndroid Build Coastguard Worker
1376*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v2i64_v1i64(<2 x i64> %x, <1 x i64> %y) #0 {
1377*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v2i64_v1i64:
1378*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1379*9880d681SAndroid Build Coastguard Workerentry:
1380*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <2 x i64> %x, i32 0
1381*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0
1382*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <1 x i64> %y, i32 0
1383*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <2 x i64> %vecinit, i64 %vecext1, i32 1
1384*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vecinit2
1385*9880d681SAndroid Build Coastguard Worker}
1386*9880d681SAndroid Build Coastguard Worker
1387*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v1i64_v1i64(<1 x i64> %x, <1 x i64> %y) #0 {
1388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v1i64_v1i64:
1389*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
1390*9880d681SAndroid Build Coastguard Workerentry:
1391*9880d681SAndroid Build Coastguard Worker  %vecext = extractelement <1 x i64> %x, i32 0
1392*9880d681SAndroid Build Coastguard Worker  %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0
1393*9880d681SAndroid Build Coastguard Worker  %vecext1 = extractelement <1 x i64> %y, i32 0
1394*9880d681SAndroid Build Coastguard Worker  %vecinit2 = insertelement <2 x i64> %vecinit, i64 %vecext1, i32 1
1395*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vecinit2
1396*9880d681SAndroid Build Coastguard Worker}
1397*9880d681SAndroid Build Coastguard Worker
1398*9880d681SAndroid Build Coastguard Worker
1399*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16_const() {
1400*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16_const:
1401*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{d[0-9]+}}, #0
1402*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> zeroinitializer, <1 x i16> undef, <4 x i32> zeroinitializer
1403*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r
1404*9880d681SAndroid Build Coastguard Worker}
1405*9880d681SAndroid Build Coastguard Worker
1406*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16_const_one() {
1407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16_const_one:
1408*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.4h, #1
1409*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> <i16 1>, <1 x i16> undef, <4 x i32> zeroinitializer
1410*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r
1411*9880d681SAndroid Build Coastguard Worker}
1412*9880d681SAndroid Build Coastguard Worker
1413*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @concat_vector_v4i32_const() {
1414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i32_const:
1415*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0
1416*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i32> zeroinitializer, <1 x i32> undef, <4 x i32> zeroinitializer
1417*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r
1418*9880d681SAndroid Build Coastguard Worker}
1419*9880d681SAndroid Build Coastguard Worker
1420*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @concat_vector_v8i8_const() {
1421*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i8_const:
1422*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{d[0-9]+}}, #0
1423*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> zeroinitializer, <1 x i8> undef, <8 x i32> zeroinitializer
1424*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %r
1425*9880d681SAndroid Build Coastguard Worker}
1426*9880d681SAndroid Build Coastguard Worker
1427*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16_const() {
1428*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16_const:
1429*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0
1430*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> zeroinitializer, <1 x i16> undef, <8 x i32> zeroinitializer
1431*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r
1432*9880d681SAndroid Build Coastguard Worker}
1433*9880d681SAndroid Build Coastguard Worker
1434*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16_const_one() {
1435*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16_const_one:
1436*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.8h, #1
1437*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> <i16 1>, <1 x i16> undef, <8 x i32> zeroinitializer
1438*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r
1439*9880d681SAndroid Build Coastguard Worker}
1440*9880d681SAndroid Build Coastguard Worker
1441*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @concat_vector_v16i8_const() {
1442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v16i8_const:
1443*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0
1444*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> zeroinitializer, <1 x i8> undef, <16 x i32> zeroinitializer
1445*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r
1446*9880d681SAndroid Build Coastguard Worker}
1447*9880d681SAndroid Build Coastguard Worker
1448*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16(<1 x i16> %a) {
1449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16:
1450*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0]
1451*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> %a, <1 x i16> undef, <4 x i32> zeroinitializer
1452*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r
1453*9880d681SAndroid Build Coastguard Worker}
1454*9880d681SAndroid Build Coastguard Worker
1455*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @concat_vector_v4i32(<1 x i32> %a) {
1456*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i32:
1457*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[0]
1458*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i32> %a, <1 x i32> undef, <4 x i32> zeroinitializer
1459*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r
1460*9880d681SAndroid Build Coastguard Worker}
1461*9880d681SAndroid Build Coastguard Worker
1462*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @concat_vector_v8i8(<1 x i8> %a) {
1463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i8:
1464*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8b, v0.b[0]
1465*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> %a, <1 x i8> undef, <8 x i32> zeroinitializer
1466*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %r
1467*9880d681SAndroid Build Coastguard Worker}
1468*9880d681SAndroid Build Coastguard Worker
1469*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16(<1 x i16> %a) {
1470*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16:
1471*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[0]
1472*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> %a, <1 x i16> undef, <8 x i32> zeroinitializer
1473*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r
1474*9880d681SAndroid Build Coastguard Worker}
1475*9880d681SAndroid Build Coastguard Worker
1476*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @concat_vector_v16i8(<1 x i8> %a) {
1477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v16i8:
1478*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.16b, v0.b[0]
1479*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> %a, <1 x i8> undef, <16 x i32> zeroinitializer
1480*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r
1481*9880d681SAndroid Build Coastguard Worker}
1482