xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/msa/shuffle.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
5*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v16i8_0:
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
8*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
9*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
10*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
11*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]])
12*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.b [[R3]], [[R1]], [[R1]]
13*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* %c
14*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker  ret void
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
20*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v16i8_1:
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
23*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
24*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
25*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][1]
26*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* %c
27*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker  ret void
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
33*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v16i8_2:
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
36*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
37*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
38*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 16, 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 16>
39*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
40*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]])
41*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.b [[R3]], [[R2]], [[R2]]
42*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
43*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_3(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
49*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v16i8_3:
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
52*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
53*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
54*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
55*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 17, i32 24, i32 25, i32 18, i32 19, i32 20, i32 28, i32 19, i32 1, i32 8, i32 9, i32 2, i32 3, i32 4, i32 12, i32 3>
56*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
57*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]])
58*9880d681SAndroid Build Coastguard Worker  ; The concatenation step of vshf is bitwise not vectorwise so we must reverse
59*9880d681SAndroid Build Coastguard Worker  ; the operands to get the right answer.
60*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.b [[R3]], [[R2]], [[R1]]
61*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
62*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker  ret void
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_4(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
68*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v16i8_4:
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
71*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
72*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> %1, <16 x i32> <i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17>
73*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][1]
74*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* %c
75*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker  ret void
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
81*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v8i16_0:
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
84*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
85*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
86*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
87*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]])
88*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.h [[R3]], [[R1]], [[R1]]
89*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %c
90*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
96*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v8i16_1:
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
99*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
100*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
101*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][1]
102*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %c
103*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker  ret void
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
109*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v8i16_2:
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
112*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
113*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
114*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 8>
115*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
116*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]])
117*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.h [[R3]], [[R2]], [[R2]]
118*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
119*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker  ret void
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_3(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
125*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v8i16_3:
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
128*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
129*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
130*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
131*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 8, i32 9, i32 2, i32 3, i32 4, i32 12, i32 3>
132*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
133*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]])
134*9880d681SAndroid Build Coastguard Worker  ; The concatenation step of vshf is bitwise not vectorwise so we must reverse
135*9880d681SAndroid Build Coastguard Worker  ; the operands to get the right answer.
136*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.h [[R3]], [[R2]], [[R1]]
137*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
138*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker  ret void
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_4(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
144*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v8i16_4:
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
147*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
148*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> %1, <8 x i32> <i32 1, i32 9, i32 1, i32 9, i32 1, i32 9, i32 1, i32 9>
149*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][1]
150*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %c
151*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker  ret void
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker; Note: v4i32 only has one 4-element set so it's impossible to get a vshf.w
157*9880d681SAndroid Build Coastguard Worker; instruction when using a single vector.
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
160*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v4i32_0:
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
163*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
164*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
165*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R1]], 27
166*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* %c
167*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker  ret void
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
173*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v4i32_1:
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
176*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
177*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
178*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][1]
179*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* %c
180*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker  ret void
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
186*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v4i32_2:
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
189*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
190*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
191*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 5, i32 6, i32 4>
192*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R2]], 36
193*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
194*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker  ret void
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_3(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
200*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v4i32_3:
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
203*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
204*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
205*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
206*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 5, i32 6, i32 4>
207*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
208*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0([[PTR_A]])
209*9880d681SAndroid Build Coastguard Worker  ; The concatenation step of vshf is bitwise not vectorwise so we must reverse
210*9880d681SAndroid Build Coastguard Worker  ; the operands to get the right answer.
211*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.w [[R3]], [[R2]], [[R1]]
212*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
213*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  ret void
216*9880d681SAndroid Build Coastguard Worker}
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_4(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
219*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v4i32_4:
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
222*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
223*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> %1, <4 x i32> <i32 1, i32 5, i32 5, i32 1>
224*9880d681SAndroid Build Coastguard Worker  ; The two operand vectors are the same so element 1 and 5 are equivalent.
225*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][1]
226*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* %c
227*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker  ret void
230*9880d681SAndroid Build Coastguard Worker}
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
233*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v2i64_0:
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
236*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
237*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
238*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
239*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]])
240*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.d [[R3]], [[R1]], [[R1]]
241*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* %c
242*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker  ret void
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
248*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v2i64_1:
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
251*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
252*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1>
253*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
254*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* %c
255*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker  ret void
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
261*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v2i64_2:
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
264*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
265*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
266*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 2>
267*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
268*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]])
269*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.d [[R3]], [[R2]], [[R2]]
270*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
271*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker  ret void
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_3(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
277*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v2i64_3:
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
280*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
281*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
282*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
283*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 2>
284*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($
285*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]])
286*9880d681SAndroid Build Coastguard Worker  ; The concatenation step of vshf is bitwise not vectorwise so we must reverse
287*9880d681SAndroid Build Coastguard Worker  ; the operands to get the right answer.
288*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: vshf.d [[R3]], [[R2]], [[R1]]
289*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
290*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker  ret void
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_4(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
296*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: vshf_v2i64_4:
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
299*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
300*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <2 x i64> %1, <2 x i64> %1, <2 x i32> <i32 1, i32 3>
301*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
302*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* %c
303*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker  ret void
306*9880d681SAndroid Build Coastguard Worker}
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Workerdefine void @shf_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
309*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: shf_v16i8_0:
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
312*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
313*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 2, i32 0, i32 5, i32 7, i32 6, i32 4, i32 9, i32 11, i32 10, i32 8, i32 13, i32 15, i32 14, i32 12>
314*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: shf.b [[R3:\$w[0-9]+]], [[R1]], 45
315*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* %c
316*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Worker  ret void
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine void @shf_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
322*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: shf_v8i16_0:
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
325*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
326*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
327*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: shf.h [[R3:\$w[0-9]+]], [[R1]], 27
328*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %c
329*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker  ret void
332*9880d681SAndroid Build Coastguard Worker}
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerdefine void @shf_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
335*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: shf_v4i32_0:
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
338*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
339*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
340*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R1]], 27
341*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* %c
342*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Worker  ret void
345*9880d681SAndroid Build Coastguard Worker}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Worker; shf.d does not exist
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
350*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v16i8_0:
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
353*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
354*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
355*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
356*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
357*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
358*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R2]], [[R1]]
359*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
360*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker  ret void
363*9880d681SAndroid Build Coastguard Worker}
364*9880d681SAndroid Build Coastguard Worker
365*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
366*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v8i16_0:
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
369*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
370*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
371*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
372*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
373*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R2]], [[R1]]
374*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
375*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Worker  ret void
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
381*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v4i32_0:
382*9880d681SAndroid Build Coastguard Worker
383*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
384*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
385*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
386*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
387*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
388*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R2]], [[R1]]
389*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
390*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Worker  ret void
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
396*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v2i64_0:
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
399*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
400*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
401*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
402*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2>
403*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]]
404*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
405*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Worker  ret void
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Worker; Interleaving one operand with itself.
411*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
412*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v16i8_1:
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
415*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
416*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
417*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
418*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
419*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
420*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
421*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
422*9880d681SAndroid Build Coastguard Worker
423*9880d681SAndroid Build Coastguard Worker  ret void
424*9880d681SAndroid Build Coastguard Worker}
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
427*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v8i16_1:
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
430*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
431*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
432*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
433*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
434*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
435*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard Worker  ret void
438*9880d681SAndroid Build Coastguard Worker}
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
441*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v4i32_1:
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
444*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
445*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
446*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
447*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
448*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
449*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker  ret void
452*9880d681SAndroid Build Coastguard Worker}
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
455*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v2i64_1:
456*9880d681SAndroid Build Coastguard Worker
457*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
458*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
459*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
460*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0>
461*9880d681SAndroid Build Coastguard Worker  ; ilvev.d with two identical operands is equivalent to splati.d
462*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0]
463*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
464*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Worker  ret void
467*9880d681SAndroid Build Coastguard Worker}
468*9880d681SAndroid Build Coastguard Worker
469*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
470*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v16i8_2:
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
473*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
474*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
475*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
476*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 16, i32 16, i32 18, i32 18, i32 20, i32 20, i32 22, i32 22, i32 24, i32 24, i32 26, i32 26, i32 28, i32 28, i32 30, i32 30>
477*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
478*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
479*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Worker  ret void
482*9880d681SAndroid Build Coastguard Worker}
483*9880d681SAndroid Build Coastguard Worker
484*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
485*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v8i16_2:
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
488*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
489*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
490*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>
491*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
492*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
493*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
494*9880d681SAndroid Build Coastguard Worker
495*9880d681SAndroid Build Coastguard Worker  ret void
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
499*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v4i32_2:
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
502*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
503*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
504*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 4, i32 6, i32 6>
505*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
506*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
507*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker  ret void
510*9880d681SAndroid Build Coastguard Worker}
511*9880d681SAndroid Build Coastguard Worker
512*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
513*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvev_v2i64_2:
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
516*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
517*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
518*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2>
519*9880d681SAndroid Build Coastguard Worker  ; ilvev.d with two identical operands is equivalent to splati.d
520*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0]
521*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
522*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Worker  ret void
525*9880d681SAndroid Build Coastguard Worker}
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
528*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v16i8_0:
529*9880d681SAndroid Build Coastguard Worker
530*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
531*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
532*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
533*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
534*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
535*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
536*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
537*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
538*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker  ret void
541*9880d681SAndroid Build Coastguard Worker}
542*9880d681SAndroid Build Coastguard Worker
543*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
544*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v8i16_0:
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
547*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
548*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
549*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
550*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
551*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
552*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
553*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
554*9880d681SAndroid Build Coastguard Worker
555*9880d681SAndroid Build Coastguard Worker  ret void
556*9880d681SAndroid Build Coastguard Worker}
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
559*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v4i32_0:
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
562*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
563*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
564*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
565*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
566*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
567*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
568*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Worker  ret void
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
574*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v2i64_0:
575*9880d681SAndroid Build Coastguard Worker
576*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
577*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
578*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
579*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
580*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3>
581*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
582*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
583*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
584*9880d681SAndroid Build Coastguard Worker
585*9880d681SAndroid Build Coastguard Worker  ret void
586*9880d681SAndroid Build Coastguard Worker}
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
589*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v16i8_1:
590*9880d681SAndroid Build Coastguard Worker
591*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
592*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
593*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
594*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
595*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
596*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
597*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
598*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Worker  ret void
601*9880d681SAndroid Build Coastguard Worker}
602*9880d681SAndroid Build Coastguard Worker
603*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
604*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v8i16_1:
605*9880d681SAndroid Build Coastguard Worker
606*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
607*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
608*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
609*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
610*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
611*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
612*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
613*9880d681SAndroid Build Coastguard Worker
614*9880d681SAndroid Build Coastguard Worker  ret void
615*9880d681SAndroid Build Coastguard Worker}
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
618*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v4i32_1:
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
621*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
622*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
623*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
624*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
625*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
626*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Worker  ret void
629*9880d681SAndroid Build Coastguard Worker}
630*9880d681SAndroid Build Coastguard Worker
631*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
632*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v2i64_1:
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
635*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
636*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
637*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1>
638*9880d681SAndroid Build Coastguard Worker  ; ilvod.d with two identical operands is equivalent to splati.d
639*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
640*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
641*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
642*9880d681SAndroid Build Coastguard Worker
643*9880d681SAndroid Build Coastguard Worker  ret void
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
647*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v16i8_2:
648*9880d681SAndroid Build Coastguard Worker
649*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
650*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
651*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
652*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
653*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 17, i32 17, i32 19, i32 19, i32 21, i32 21, i32 23, i32 23, i32 25, i32 25, i32 27, i32 27, i32 29, i32 29, i32 31, i32 31>
654*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
655*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
656*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker  ret void
659*9880d681SAndroid Build Coastguard Worker}
660*9880d681SAndroid Build Coastguard Worker
661*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
662*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v8i16_2:
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
665*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
666*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
667*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>
668*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
669*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
670*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Worker  ret void
673*9880d681SAndroid Build Coastguard Worker}
674*9880d681SAndroid Build Coastguard Worker
675*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
676*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v4i32_2:
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
679*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
680*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
681*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 5, i32 5, i32 7, i32 7>
682*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
683*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
684*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
685*9880d681SAndroid Build Coastguard Worker
686*9880d681SAndroid Build Coastguard Worker  ret void
687*9880d681SAndroid Build Coastguard Worker}
688*9880d681SAndroid Build Coastguard Worker
689*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
690*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvod_v2i64_2:
691*9880d681SAndroid Build Coastguard Worker
692*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
693*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
694*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
695*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3>
696*9880d681SAndroid Build Coastguard Worker  ; ilvod.d with two identical operands is equivalent to splati.d
697*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1]
698*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
699*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
700*9880d681SAndroid Build Coastguard Worker
701*9880d681SAndroid Build Coastguard Worker  ret void
702*9880d681SAndroid Build Coastguard Worker}
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
705*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v16i8_0:
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
708*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
709*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
710*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
711*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
712*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
713*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R2]], [[R1]]
714*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
715*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
716*9880d681SAndroid Build Coastguard Worker
717*9880d681SAndroid Build Coastguard Worker  ret void
718*9880d681SAndroid Build Coastguard Worker}
719*9880d681SAndroid Build Coastguard Worker
720*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
721*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v8i16_0:
722*9880d681SAndroid Build Coastguard Worker
723*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
724*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
725*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
726*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
727*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
728*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R2]], [[R1]]
729*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
730*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Worker  ret void
733*9880d681SAndroid Build Coastguard Worker}
734*9880d681SAndroid Build Coastguard Worker
735*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
736*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v4i32_0:
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
739*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
740*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
741*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
742*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
743*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R2]], [[R1]]
744*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
745*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Worker  ret void
748*9880d681SAndroid Build Coastguard Worker}
749*9880d681SAndroid Build Coastguard Worker
750*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
751*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v2i64_0:
752*9880d681SAndroid Build Coastguard Worker
753*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
754*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
755*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
756*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
757*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2>
758*9880d681SAndroid Build Coastguard Worker  ; ilvr.d and ilvev.d are equivalent for v2i64
759*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]]
760*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
761*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
762*9880d681SAndroid Build Coastguard Worker
763*9880d681SAndroid Build Coastguard Worker  ret void
764*9880d681SAndroid Build Coastguard Worker}
765*9880d681SAndroid Build Coastguard Worker
766*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
767*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v16i8_1:
768*9880d681SAndroid Build Coastguard Worker
769*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
770*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
771*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
772*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
773*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 16, i32 16, i32 17, i32 17, i32 18, i32 18, i32 19, i32 19, i32 20, i32 20, i32 21, i32 21, i32 22, i32 22, i32 23, i32 23>
774*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
775*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
776*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
777*9880d681SAndroid Build Coastguard Worker
778*9880d681SAndroid Build Coastguard Worker  ret void
779*9880d681SAndroid Build Coastguard Worker}
780*9880d681SAndroid Build Coastguard Worker
781*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
782*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v8i16_1:
783*9880d681SAndroid Build Coastguard Worker
784*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
785*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
786*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
787*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 8, i32 9, i32 9, i32 10, i32 10, i32 11, i32 11>
788*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
789*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
790*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Worker  ret void
793*9880d681SAndroid Build Coastguard Worker}
794*9880d681SAndroid Build Coastguard Worker
795*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
796*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v4i32_1:
797*9880d681SAndroid Build Coastguard Worker
798*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
799*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
800*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
801*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 4, i32 5, i32 5>
802*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
803*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
804*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Worker  ret void
807*9880d681SAndroid Build Coastguard Worker}
808*9880d681SAndroid Build Coastguard Worker
809*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
810*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v2i64_1:
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
813*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
814*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
815*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2>
816*9880d681SAndroid Build Coastguard Worker  ; ilvr.d and splati.d are equivalent for v2i64
817*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0]
818*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
819*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
820*9880d681SAndroid Build Coastguard Worker
821*9880d681SAndroid Build Coastguard Worker  ret void
822*9880d681SAndroid Build Coastguard Worker}
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
825*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v16i8_2:
826*9880d681SAndroid Build Coastguard Worker
827*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
828*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
829*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
830*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
831*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7>
832*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
833*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
834*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
835*9880d681SAndroid Build Coastguard Worker
836*9880d681SAndroid Build Coastguard Worker  ret void
837*9880d681SAndroid Build Coastguard Worker}
838*9880d681SAndroid Build Coastguard Worker
839*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
840*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v8i16_2:
841*9880d681SAndroid Build Coastguard Worker
842*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
843*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
844*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
845*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
846*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
847*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
848*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
849*9880d681SAndroid Build Coastguard Worker
850*9880d681SAndroid Build Coastguard Worker  ret void
851*9880d681SAndroid Build Coastguard Worker}
852*9880d681SAndroid Build Coastguard Worker
853*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
854*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v4i32_2:
855*9880d681SAndroid Build Coastguard Worker
856*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
857*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
858*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
859*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
860*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
861*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
862*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
863*9880d681SAndroid Build Coastguard Worker
864*9880d681SAndroid Build Coastguard Worker  ret void
865*9880d681SAndroid Build Coastguard Worker}
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
868*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvr_v2i64_2:
869*9880d681SAndroid Build Coastguard Worker
870*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
871*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
872*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
873*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0>
874*9880d681SAndroid Build Coastguard Worker  ; ilvr.d and splati.d are equivalent for v2i64
875*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0]
876*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
877*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
878*9880d681SAndroid Build Coastguard Worker
879*9880d681SAndroid Build Coastguard Worker  ret void
880*9880d681SAndroid Build Coastguard Worker}
881*9880d681SAndroid Build Coastguard Worker
882*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
883*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v16i8_0:
884*9880d681SAndroid Build Coastguard Worker
885*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
886*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
887*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
888*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
889*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
890*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
891*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R2]], [[R1]]
892*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
893*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
894*9880d681SAndroid Build Coastguard Worker
895*9880d681SAndroid Build Coastguard Worker  ret void
896*9880d681SAndroid Build Coastguard Worker}
897*9880d681SAndroid Build Coastguard Worker
898*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
899*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v8i16_0:
900*9880d681SAndroid Build Coastguard Worker
901*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
902*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
903*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
904*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
905*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
906*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R2]], [[R1]]
907*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
908*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
909*9880d681SAndroid Build Coastguard Worker
910*9880d681SAndroid Build Coastguard Worker  ret void
911*9880d681SAndroid Build Coastguard Worker}
912*9880d681SAndroid Build Coastguard Worker
913*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
914*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v4i32_0:
915*9880d681SAndroid Build Coastguard Worker
916*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
917*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
918*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
919*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
920*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
921*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R2]], [[R1]]
922*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
923*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
924*9880d681SAndroid Build Coastguard Worker
925*9880d681SAndroid Build Coastguard Worker  ret void
926*9880d681SAndroid Build Coastguard Worker}
927*9880d681SAndroid Build Coastguard Worker
928*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
929*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v2i64_0:
930*9880d681SAndroid Build Coastguard Worker
931*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
932*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
933*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
934*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
935*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3>
936*9880d681SAndroid Build Coastguard Worker  ; ilvl.d and ilvod.d are equivalent for v2i64
937*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
938*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
939*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
940*9880d681SAndroid Build Coastguard Worker
941*9880d681SAndroid Build Coastguard Worker  ret void
942*9880d681SAndroid Build Coastguard Worker}
943*9880d681SAndroid Build Coastguard Worker
944*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
945*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v16i8_1:
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
948*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
949*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
950*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
951*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 24, i32 24, i32 25, i32 25, i32 26, i32 26, i32 27, i32 27, i32 28, i32 28, i32 29, i32 29, i32 30, i32 30, i32 31, i32 31>
952*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
953*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
954*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
955*9880d681SAndroid Build Coastguard Worker
956*9880d681SAndroid Build Coastguard Worker  ret void
957*9880d681SAndroid Build Coastguard Worker}
958*9880d681SAndroid Build Coastguard Worker
959*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
960*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v8i16_1:
961*9880d681SAndroid Build Coastguard Worker
962*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
963*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
964*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
965*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 12, i32 12, i32 13, i32 13, i32 14, i32 14, i32 15, i32 15>
966*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
967*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
968*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
969*9880d681SAndroid Build Coastguard Worker
970*9880d681SAndroid Build Coastguard Worker  ret void
971*9880d681SAndroid Build Coastguard Worker}
972*9880d681SAndroid Build Coastguard Worker
973*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
974*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v4i32_1:
975*9880d681SAndroid Build Coastguard Worker
976*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
977*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
978*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
979*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 6, i32 6, i32 7, i32 7>
980*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
981*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
982*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
983*9880d681SAndroid Build Coastguard Worker
984*9880d681SAndroid Build Coastguard Worker  ret void
985*9880d681SAndroid Build Coastguard Worker}
986*9880d681SAndroid Build Coastguard Worker
987*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
988*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v2i64_1:
989*9880d681SAndroid Build Coastguard Worker
990*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
991*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
992*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
993*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3>
994*9880d681SAndroid Build Coastguard Worker  ; ilvl.d and splati.d are equivalent for v2i64
995*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1]
996*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
997*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
998*9880d681SAndroid Build Coastguard Worker
999*9880d681SAndroid Build Coastguard Worker  ret void
1000*9880d681SAndroid Build Coastguard Worker}
1001*9880d681SAndroid Build Coastguard Worker
1002*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1003*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v16i8_2:
1004*9880d681SAndroid Build Coastguard Worker
1005*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1006*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1007*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1008*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1009*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 8, i32 8, i32 9, i32 9, i32 10, i32 10, i32 11, i32 11, i32 12, i32 12, i32 13, i32 13, i32 14, i32 14, i32 15, i32 15>
1010*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1011*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1012*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1013*9880d681SAndroid Build Coastguard Worker
1014*9880d681SAndroid Build Coastguard Worker  ret void
1015*9880d681SAndroid Build Coastguard Worker}
1016*9880d681SAndroid Build Coastguard Worker
1017*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1018*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v8i16_2:
1019*9880d681SAndroid Build Coastguard Worker
1020*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1021*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1022*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1023*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7>
1024*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1025*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1026*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1027*9880d681SAndroid Build Coastguard Worker
1028*9880d681SAndroid Build Coastguard Worker  ret void
1029*9880d681SAndroid Build Coastguard Worker}
1030*9880d681SAndroid Build Coastguard Worker
1031*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1032*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v4i32_2:
1033*9880d681SAndroid Build Coastguard Worker
1034*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1035*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1036*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1037*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 2, i32 2, i32 3, i32 3>
1038*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1039*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1040*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1041*9880d681SAndroid Build Coastguard Worker
1042*9880d681SAndroid Build Coastguard Worker  ret void
1043*9880d681SAndroid Build Coastguard Worker}
1044*9880d681SAndroid Build Coastguard Worker
1045*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1046*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: ilvl_v2i64_2:
1047*9880d681SAndroid Build Coastguard Worker
1048*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1049*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1050*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1051*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1>
1052*9880d681SAndroid Build Coastguard Worker  ; ilvl.d and splati.d are equivalent for v2i64
1053*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
1054*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1055*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1056*9880d681SAndroid Build Coastguard Worker
1057*9880d681SAndroid Build Coastguard Worker  ret void
1058*9880d681SAndroid Build Coastguard Worker}
1059*9880d681SAndroid Build Coastguard Worker
1060*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1061*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v16i8_0:
1062*9880d681SAndroid Build Coastguard Worker
1063*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1064*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1065*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1066*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
1067*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1068*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
1069*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1070*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1071*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Worker  ret void
1074*9880d681SAndroid Build Coastguard Worker}
1075*9880d681SAndroid Build Coastguard Worker
1076*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1077*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v8i16_0:
1078*9880d681SAndroid Build Coastguard Worker
1079*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1080*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1081*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1082*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
1083*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1084*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1085*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1086*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1087*9880d681SAndroid Build Coastguard Worker
1088*9880d681SAndroid Build Coastguard Worker  ret void
1089*9880d681SAndroid Build Coastguard Worker}
1090*9880d681SAndroid Build Coastguard Worker
1091*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1092*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v4i32_0:
1093*9880d681SAndroid Build Coastguard Worker
1094*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1095*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1096*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1097*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
1098*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1099*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1100*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1101*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1102*9880d681SAndroid Build Coastguard Worker
1103*9880d681SAndroid Build Coastguard Worker  ret void
1104*9880d681SAndroid Build Coastguard Worker}
1105*9880d681SAndroid Build Coastguard Worker
1106*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1107*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v2i64_0:
1108*9880d681SAndroid Build Coastguard Worker
1109*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1110*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1111*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1112*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
1113*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2>
1114*9880d681SAndroid Build Coastguard Worker  ; pckev.d and ilvev.d are equivalent for v2i64
1115*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1116*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1117*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1118*9880d681SAndroid Build Coastguard Worker
1119*9880d681SAndroid Build Coastguard Worker  ret void
1120*9880d681SAndroid Build Coastguard Worker}
1121*9880d681SAndroid Build Coastguard Worker
1122*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1123*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v16i8_1:
1124*9880d681SAndroid Build Coastguard Worker
1125*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1126*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1127*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
1128*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1129*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
1130*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1131*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1132*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1133*9880d681SAndroid Build Coastguard Worker
1134*9880d681SAndroid Build Coastguard Worker  ret void
1135*9880d681SAndroid Build Coastguard Worker}
1136*9880d681SAndroid Build Coastguard Worker
1137*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1138*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v8i16_1:
1139*9880d681SAndroid Build Coastguard Worker
1140*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1141*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1142*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
1143*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 8, i32 10, i32 12, i32 14>
1144*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1145*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1146*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1147*9880d681SAndroid Build Coastguard Worker
1148*9880d681SAndroid Build Coastguard Worker  ret void
1149*9880d681SAndroid Build Coastguard Worker}
1150*9880d681SAndroid Build Coastguard Worker
1151*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1152*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v4i32_1:
1153*9880d681SAndroid Build Coastguard Worker
1154*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1155*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1156*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
1157*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 6, i32 4, i32 6>
1158*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1159*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1160*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1161*9880d681SAndroid Build Coastguard Worker
1162*9880d681SAndroid Build Coastguard Worker  ret void
1163*9880d681SAndroid Build Coastguard Worker}
1164*9880d681SAndroid Build Coastguard Worker
1165*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1166*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v2i64_1:
1167*9880d681SAndroid Build Coastguard Worker
1168*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1169*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1170*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
1171*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2>
1172*9880d681SAndroid Build Coastguard Worker  ; pckev.d and splati.d are equivalent for v2i64
1173*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0]
1174*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1175*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1176*9880d681SAndroid Build Coastguard Worker
1177*9880d681SAndroid Build Coastguard Worker  ret void
1178*9880d681SAndroid Build Coastguard Worker}
1179*9880d681SAndroid Build Coastguard Worker
1180*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1181*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v16i8_2:
1182*9880d681SAndroid Build Coastguard Worker
1183*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1184*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1185*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1186*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1187*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1188*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1189*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1190*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1191*9880d681SAndroid Build Coastguard Worker
1192*9880d681SAndroid Build Coastguard Worker  ret void
1193*9880d681SAndroid Build Coastguard Worker}
1194*9880d681SAndroid Build Coastguard Worker
1195*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1196*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v8i16_2:
1197*9880d681SAndroid Build Coastguard Worker
1198*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1199*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1200*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1201*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 0, i32 2, i32 4, i32 6>
1202*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1203*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1204*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1205*9880d681SAndroid Build Coastguard Worker
1206*9880d681SAndroid Build Coastguard Worker  ret void
1207*9880d681SAndroid Build Coastguard Worker}
1208*9880d681SAndroid Build Coastguard Worker
1209*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1210*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v4i32_2:
1211*9880d681SAndroid Build Coastguard Worker
1212*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1213*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1214*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1215*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 2, i32 0, i32 2>
1216*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1217*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1218*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1219*9880d681SAndroid Build Coastguard Worker
1220*9880d681SAndroid Build Coastguard Worker  ret void
1221*9880d681SAndroid Build Coastguard Worker}
1222*9880d681SAndroid Build Coastguard Worker
1223*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1224*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckev_v2i64_2:
1225*9880d681SAndroid Build Coastguard Worker
1226*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1227*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1228*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1229*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0>
1230*9880d681SAndroid Build Coastguard Worker  ; pckev.d and splati.d are equivalent for v2i64
1231*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0]
1232*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1233*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1234*9880d681SAndroid Build Coastguard Worker
1235*9880d681SAndroid Build Coastguard Worker  ret void
1236*9880d681SAndroid Build Coastguard Worker}
1237*9880d681SAndroid Build Coastguard Worker
1238*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1239*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v16i8_0:
1240*9880d681SAndroid Build Coastguard Worker
1241*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1242*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1243*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1244*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
1245*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1246*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
1247*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1248*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1249*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1250*9880d681SAndroid Build Coastguard Worker
1251*9880d681SAndroid Build Coastguard Worker  ret void
1252*9880d681SAndroid Build Coastguard Worker}
1253*9880d681SAndroid Build Coastguard Worker
1254*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1255*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v8i16_0:
1256*9880d681SAndroid Build Coastguard Worker
1257*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1258*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1259*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1260*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
1261*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1262*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1263*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1264*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1265*9880d681SAndroid Build Coastguard Worker
1266*9880d681SAndroid Build Coastguard Worker  ret void
1267*9880d681SAndroid Build Coastguard Worker}
1268*9880d681SAndroid Build Coastguard Worker
1269*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1270*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v4i32_0:
1271*9880d681SAndroid Build Coastguard Worker
1272*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1273*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1274*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1275*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
1276*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1277*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R2]], [[R1]]
1278*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1279*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1280*9880d681SAndroid Build Coastguard Worker
1281*9880d681SAndroid Build Coastguard Worker  ret void
1282*9880d681SAndroid Build Coastguard Worker}
1283*9880d681SAndroid Build Coastguard Worker
1284*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1285*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v2i64_0:
1286*9880d681SAndroid Build Coastguard Worker
1287*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1288*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1289*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1290*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
1291*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3>
1292*9880d681SAndroid Build Coastguard Worker  ; pckod.d and ilvod.d are equivalent for v2i64
1293*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
1294*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1295*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1296*9880d681SAndroid Build Coastguard Worker
1297*9880d681SAndroid Build Coastguard Worker  ret void
1298*9880d681SAndroid Build Coastguard Worker}
1299*9880d681SAndroid Build Coastguard Worker
1300*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1301*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v16i8_1:
1302*9880d681SAndroid Build Coastguard Worker
1303*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1304*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1305*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
1306*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1307*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
1308*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1309*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1310*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1311*9880d681SAndroid Build Coastguard Worker
1312*9880d681SAndroid Build Coastguard Worker  ret void
1313*9880d681SAndroid Build Coastguard Worker}
1314*9880d681SAndroid Build Coastguard Worker
1315*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1316*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v8i16_1:
1317*9880d681SAndroid Build Coastguard Worker
1318*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1319*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1320*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
1321*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 9, i32 11, i32 13, i32 15>
1322*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1323*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1324*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1325*9880d681SAndroid Build Coastguard Worker
1326*9880d681SAndroid Build Coastguard Worker  ret void
1327*9880d681SAndroid Build Coastguard Worker}
1328*9880d681SAndroid Build Coastguard Worker
1329*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1330*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v4i32_1:
1331*9880d681SAndroid Build Coastguard Worker
1332*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1333*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1334*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
1335*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 5, i32 7, i32 5, i32 7>
1336*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R2]], [[R2]]
1337*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1338*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1339*9880d681SAndroid Build Coastguard Worker
1340*9880d681SAndroid Build Coastguard Worker  ret void
1341*9880d681SAndroid Build Coastguard Worker}
1342*9880d681SAndroid Build Coastguard Worker
1343*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1344*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v2i64_1:
1345*9880d681SAndroid Build Coastguard Worker
1346*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1347*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1348*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
1349*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3>
1350*9880d681SAndroid Build Coastguard Worker  ; pckod.d and splati.d are equivalent for v2i64
1351*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1]
1352*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1353*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1354*9880d681SAndroid Build Coastguard Worker
1355*9880d681SAndroid Build Coastguard Worker  ret void
1356*9880d681SAndroid Build Coastguard Worker}
1357*9880d681SAndroid Build Coastguard Worker
1358*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
1359*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v16i8_2:
1360*9880d681SAndroid Build Coastguard Worker
1361*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1362*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1363*9880d681SAndroid Build Coastguard Worker  %2 = load <16 x i8>, <16 x i8>* %b
1364*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <16 x i8> %1, <16 x i8> %2,
1365*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1366*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1367*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %3, <16 x i8>* %c
1368*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1369*9880d681SAndroid Build Coastguard Worker
1370*9880d681SAndroid Build Coastguard Worker  ret void
1371*9880d681SAndroid Build Coastguard Worker}
1372*9880d681SAndroid Build Coastguard Worker
1373*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
1374*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v8i16_2:
1375*9880d681SAndroid Build Coastguard Worker
1376*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1377*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1378*9880d681SAndroid Build Coastguard Worker  %2 = load <8 x i16>, <8 x i16>* %b
1379*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 1, i32 3, i32 5, i32 7>
1380*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1381*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %3, <8 x i16>* %c
1382*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1383*9880d681SAndroid Build Coastguard Worker
1384*9880d681SAndroid Build Coastguard Worker  ret void
1385*9880d681SAndroid Build Coastguard Worker}
1386*9880d681SAndroid Build Coastguard Worker
1387*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
1388*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v4i32_2:
1389*9880d681SAndroid Build Coastguard Worker
1390*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1391*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1392*9880d681SAndroid Build Coastguard Worker  %2 = load <4 x i32>, <4 x i32>* %b
1393*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 3, i32 1, i32 3>
1394*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R1]], [[R1]]
1395*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %3, <4 x i32>* %c
1396*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1397*9880d681SAndroid Build Coastguard Worker
1398*9880d681SAndroid Build Coastguard Worker  ret void
1399*9880d681SAndroid Build Coastguard Worker}
1400*9880d681SAndroid Build Coastguard Worker
1401*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
1402*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: pckod_v2i64_2:
1403*9880d681SAndroid Build Coastguard Worker
1404*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1405*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1406*9880d681SAndroid Build Coastguard Worker  %2 = load <2 x i64>, <2 x i64>* %b
1407*9880d681SAndroid Build Coastguard Worker  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1>
1408*9880d681SAndroid Build Coastguard Worker  ; pckod.d and splati.d are equivalent for v2i64
1409*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
1410*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %3, <2 x i64>* %c
1411*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1412*9880d681SAndroid Build Coastguard Worker
1413*9880d681SAndroid Build Coastguard Worker  ret void
1414*9880d681SAndroid Build Coastguard Worker}
1415*9880d681SAndroid Build Coastguard Worker
1416*9880d681SAndroid Build Coastguard Workerdefine void @splati_v16i8_0(<16 x i8>* %c, <16 x i8>* %a) nounwind {
1417*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: splati_v16i8_0:
1418*9880d681SAndroid Build Coastguard Worker
1419*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
1420*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
1421*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> undef,
1422*9880d681SAndroid Build Coastguard Worker                     <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
1423*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][4]
1424*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* %c
1425*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.b [[R3]], 0($4)
1426*9880d681SAndroid Build Coastguard Worker
1427*9880d681SAndroid Build Coastguard Worker  ret void
1428*9880d681SAndroid Build Coastguard Worker}
1429*9880d681SAndroid Build Coastguard Worker
1430*9880d681SAndroid Build Coastguard Workerdefine void @splati_v8i16_0(<8 x i16>* %c, <8 x i16>* %a) nounwind {
1431*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: splati_v8i16_0:
1432*9880d681SAndroid Build Coastguard Worker
1433*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
1434*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
1435*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
1436*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][4]
1437*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* %c
1438*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.h [[R3]], 0($4)
1439*9880d681SAndroid Build Coastguard Worker
1440*9880d681SAndroid Build Coastguard Worker  ret void
1441*9880d681SAndroid Build Coastguard Worker}
1442*9880d681SAndroid Build Coastguard Worker
1443*9880d681SAndroid Build Coastguard Workerdefine void @splati_v4i32_0(<4 x i32>* %c, <4 x i32>* %a) nounwind {
1444*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: splati_v4i32_0:
1445*9880d681SAndroid Build Coastguard Worker
1446*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
1447*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
1448*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
1449*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][3]
1450*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* %c
1451*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.w [[R3]], 0($4)
1452*9880d681SAndroid Build Coastguard Worker
1453*9880d681SAndroid Build Coastguard Worker  ret void
1454*9880d681SAndroid Build Coastguard Worker}
1455*9880d681SAndroid Build Coastguard Worker
1456*9880d681SAndroid Build Coastguard Workerdefine void @splati_v2i64_0(<2 x i64>* %c, <2 x i64>* %a) nounwind {
1457*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: splati_v2i64_0:
1458*9880d681SAndroid Build Coastguard Worker
1459*9880d681SAndroid Build Coastguard Worker  %1 = load <2 x i64>, <2 x i64>* %a
1460*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
1461*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1>
1462*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1]
1463*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %2, <2 x i64>* %c
1464*9880d681SAndroid Build Coastguard Worker  ; CHECK-DAG: st.d [[R3]], 0($4)
1465*9880d681SAndroid Build Coastguard Worker
1466*9880d681SAndroid Build Coastguard Worker  ret void
1467*9880d681SAndroid Build Coastguard Worker}
1468