xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/vec-combine-02.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test various representations of pack-like operations.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; One way of writing a <4 x i32> -> <8 x i16> pack.
6*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @f1(<4 x i32> %val0, <4 x i32> %val1) {
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
8*9880d681SAndroid Build Coastguard Worker; CHECK: vpkf %v24, %v24, %v26
9*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
10*9880d681SAndroid Build Coastguard Worker  %elem0 = extractelement <4 x i32> %val0, i32 0
11*9880d681SAndroid Build Coastguard Worker  %elem1 = extractelement <4 x i32> %val0, i32 1
12*9880d681SAndroid Build Coastguard Worker  %elem2 = extractelement <4 x i32> %val0, i32 2
13*9880d681SAndroid Build Coastguard Worker  %elem3 = extractelement <4 x i32> %val0, i32 3
14*9880d681SAndroid Build Coastguard Worker  %elem4 = extractelement <4 x i32> %val1, i32 0
15*9880d681SAndroid Build Coastguard Worker  %elem5 = extractelement <4 x i32> %val1, i32 1
16*9880d681SAndroid Build Coastguard Worker  %elem6 = extractelement <4 x i32> %val1, i32 2
17*9880d681SAndroid Build Coastguard Worker  %elem7 = extractelement <4 x i32> %val1, i32 3
18*9880d681SAndroid Build Coastguard Worker  %hboth0 = bitcast i32 %elem0 to <2 x i16>
19*9880d681SAndroid Build Coastguard Worker  %hboth1 = bitcast i32 %elem1 to <2 x i16>
20*9880d681SAndroid Build Coastguard Worker  %hboth2 = bitcast i32 %elem2 to <2 x i16>
21*9880d681SAndroid Build Coastguard Worker  %hboth3 = bitcast i32 %elem3 to <2 x i16>
22*9880d681SAndroid Build Coastguard Worker  %hboth4 = bitcast i32 %elem4 to <2 x i16>
23*9880d681SAndroid Build Coastguard Worker  %hboth5 = bitcast i32 %elem5 to <2 x i16>
24*9880d681SAndroid Build Coastguard Worker  %hboth6 = bitcast i32 %elem6 to <2 x i16>
25*9880d681SAndroid Build Coastguard Worker  %hboth7 = bitcast i32 %elem7 to <2 x i16>
26*9880d681SAndroid Build Coastguard Worker  %hlow0 = shufflevector <2 x i16> %hboth0, <2 x i16> %hboth1,
27*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 1, i32 3>
28*9880d681SAndroid Build Coastguard Worker  %hlow1 = shufflevector <2 x i16> %hboth2, <2 x i16> %hboth3,
29*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 1, i32 3>
30*9880d681SAndroid Build Coastguard Worker  %hlow2 = shufflevector <2 x i16> %hboth4, <2 x i16> %hboth5,
31*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 1, i32 3>
32*9880d681SAndroid Build Coastguard Worker  %hlow3 = shufflevector <2 x i16> %hboth6, <2 x i16> %hboth7,
33*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 1, i32 3>
34*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <2 x i16> %hlow0, <2 x i16> %hlow1,
35*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 0, i32 1, i32 2, i32 3>
36*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <2 x i16> %hlow2, <2 x i16> %hlow3,
37*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 0, i32 1, i32 2, i32 3>
38*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <4 x i16> %join0, <4 x i16> %join1,
39*9880d681SAndroid Build Coastguard Worker                       <8 x i32> <i32 0, i32 1, i32 2, i32 3,
40*9880d681SAndroid Build Coastguard Worker                                  i32 4, i32 5, i32 6, i32 7>
41*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %ret
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; A different way of writing a <4 x i32> -> <8 x i16> pack.
45*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @f2(<4 x i32> %val0, <4 x i32> %val1) {
46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
47*9880d681SAndroid Build Coastguard Worker; CHECK: vpkf %v24, %v24, %v26
48*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
49*9880d681SAndroid Build Coastguard Worker  %elem0 = extractelement <4 x i32> %val0, i32 0
50*9880d681SAndroid Build Coastguard Worker  %elem1 = extractelement <4 x i32> %val0, i32 1
51*9880d681SAndroid Build Coastguard Worker  %elem2 = extractelement <4 x i32> %val0, i32 2
52*9880d681SAndroid Build Coastguard Worker  %elem3 = extractelement <4 x i32> %val0, i32 3
53*9880d681SAndroid Build Coastguard Worker  %elem4 = extractelement <4 x i32> %val1, i32 0
54*9880d681SAndroid Build Coastguard Worker  %elem5 = extractelement <4 x i32> %val1, i32 1
55*9880d681SAndroid Build Coastguard Worker  %elem6 = extractelement <4 x i32> %val1, i32 2
56*9880d681SAndroid Build Coastguard Worker  %elem7 = extractelement <4 x i32> %val1, i32 3
57*9880d681SAndroid Build Coastguard Worker  %wvec0 = insertelement <4 x i32> undef, i32 %elem0, i32 0
58*9880d681SAndroid Build Coastguard Worker  %wvec1 = insertelement <4 x i32> undef, i32 %elem1, i32 0
59*9880d681SAndroid Build Coastguard Worker  %wvec2 = insertelement <4 x i32> undef, i32 %elem2, i32 0
60*9880d681SAndroid Build Coastguard Worker  %wvec3 = insertelement <4 x i32> undef, i32 %elem3, i32 0
61*9880d681SAndroid Build Coastguard Worker  %wvec4 = insertelement <4 x i32> undef, i32 %elem4, i32 0
62*9880d681SAndroid Build Coastguard Worker  %wvec5 = insertelement <4 x i32> undef, i32 %elem5, i32 0
63*9880d681SAndroid Build Coastguard Worker  %wvec6 = insertelement <4 x i32> undef, i32 %elem6, i32 0
64*9880d681SAndroid Build Coastguard Worker  %wvec7 = insertelement <4 x i32> undef, i32 %elem7, i32 0
65*9880d681SAndroid Build Coastguard Worker  %hvec0 = bitcast <4 x i32> %wvec0 to <8 x i16>
66*9880d681SAndroid Build Coastguard Worker  %hvec1 = bitcast <4 x i32> %wvec1 to <8 x i16>
67*9880d681SAndroid Build Coastguard Worker  %hvec2 = bitcast <4 x i32> %wvec2 to <8 x i16>
68*9880d681SAndroid Build Coastguard Worker  %hvec3 = bitcast <4 x i32> %wvec3 to <8 x i16>
69*9880d681SAndroid Build Coastguard Worker  %hvec4 = bitcast <4 x i32> %wvec4 to <8 x i16>
70*9880d681SAndroid Build Coastguard Worker  %hvec5 = bitcast <4 x i32> %wvec5 to <8 x i16>
71*9880d681SAndroid Build Coastguard Worker  %hvec6 = bitcast <4 x i32> %wvec6 to <8 x i16>
72*9880d681SAndroid Build Coastguard Worker  %hvec7 = bitcast <4 x i32> %wvec7 to <8 x i16>
73*9880d681SAndroid Build Coastguard Worker  %hlow0 = shufflevector <8 x i16> %hvec0, <8 x i16> %hvec1,
74*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 9, i32 undef, i32 undef,
75*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
76*9880d681SAndroid Build Coastguard Worker  %hlow1 = shufflevector <8 x i16> %hvec2, <8 x i16> %hvec3,
77*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 9, i32 undef, i32 undef,
78*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
79*9880d681SAndroid Build Coastguard Worker  %hlow2 = shufflevector <8 x i16> %hvec4, <8 x i16> %hvec5,
80*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 9, i32 undef, i32 undef,
81*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
82*9880d681SAndroid Build Coastguard Worker  %hlow3 = shufflevector <8 x i16> %hvec6, <8 x i16> %hvec7,
83*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 9, i32 undef, i32 undef,
84*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
85*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <8 x i16> %hlow0, <8 x i16> %hlow1,
86*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 0, i32 1, i32 8, i32 9,
87*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
88*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <8 x i16> %hlow2, <8 x i16> %hlow3,
89*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 0, i32 1, i32 8, i32 9,
90*9880d681SAndroid Build Coastguard Worker                                    i32 undef, i32 undef, i32 undef, i32 undef>
91*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <8 x i16> %join0, <8 x i16> %join1,
92*9880d681SAndroid Build Coastguard Worker                       <8 x i32> <i32 0, i32 1, i32 2, i32 3,
93*9880d681SAndroid Build Coastguard Worker                                  i32 8, i32 9, i32 10, i32 11>
94*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %ret
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; A direct pack operation.
98*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @f3(<4 x i32> %val0, <4 x i32> %val1) {
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
100*9880d681SAndroid Build Coastguard Worker; CHECK: vpkf %v24, %v24, %v26
101*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
102*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast <4 x i32> %val0 to <8 x i16>
103*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast <4 x i32> %val1 to <8 x i16>
104*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <8 x i16> %bitcast0, <8 x i16> %bitcast1,
105*9880d681SAndroid Build Coastguard Worker                       <8 x i32> <i32 1, i32 3, i32 5, i32 7,
106*9880d681SAndroid Build Coastguard Worker                                  i32 9, i32 11, i32 13, i32 15>
107*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %ret
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; One way of writing a <4 x i32> -> <16 x i8> pack.  It doesn't matter
111*9880d681SAndroid Build Coastguard Worker; whether the first pack is VPKF or VPKH since the even bytes of the
112*9880d681SAndroid Build Coastguard Worker; result are discarded.
113*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f4(<4 x i32> %val0, <4 x i32> %val1,
114*9880d681SAndroid Build Coastguard Worker                     <4 x i32> %val2, <4 x i32> %val3) {
115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
116*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG1:%v[0-9]+]], %v24, %v26
117*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG2:%v[0-9]+]], %v28, %v30
118*9880d681SAndroid Build Coastguard Worker; CHECK: vpkh %v24, [[REG1]], [[REG2]]
119*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
120*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast <4 x i32> %val0 to <8 x i16>
121*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast <4 x i32> %val1 to <8 x i16>
122*9880d681SAndroid Build Coastguard Worker  %bitcast2 = bitcast <4 x i32> %val2 to <8 x i16>
123*9880d681SAndroid Build Coastguard Worker  %bitcast3 = bitcast <4 x i32> %val3 to <8 x i16>
124*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <8 x i16> %bitcast0, <8 x i16> %bitcast1,
125*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
126*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
127*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <8 x i16> %bitcast2, <8 x i16> %bitcast3,
128*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
129*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
130*9880d681SAndroid Build Coastguard Worker  %bitcast4 = bitcast <8 x i16> %join0 to <16 x i8>
131*9880d681SAndroid Build Coastguard Worker  %bitcast5 = bitcast <8 x i16> %join1 to <16 x i8>
132*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <16 x i8> %bitcast4, <16 x i8> %bitcast5,
133*9880d681SAndroid Build Coastguard Worker                       <16 x i32> <i32 1, i32 3, i32 5, i32 7,
134*9880d681SAndroid Build Coastguard Worker                                   i32 9, i32 11, i32 13, i32 15,
135*9880d681SAndroid Build Coastguard Worker                                   i32 17, i32 19, i32 21, i32 23,
136*9880d681SAndroid Build Coastguard Worker                                   i32 25, i32 27, i32 29, i32 31>
137*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %ret
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker; Check the same operation, but with elements being extracted from the result.
141*9880d681SAndroid Build Coastguard Workerdefine void @f5(<4 x i32> %val0, <4 x i32> %val1,
142*9880d681SAndroid Build Coastguard Worker                <4 x i32> %val2, <4 x i32> %val3,
143*9880d681SAndroid Build Coastguard Worker                i8 *%base) {
144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
145*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vsteb %v24, 0(%r2), 11
146*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vsteb %v26, 1(%r2), 15
147*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vsteb %v28, 2(%r2), 3
148*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vsteb %v30, 3(%r2), 7
149*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
150*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast <4 x i32> %val0 to <8 x i16>
151*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast <4 x i32> %val1 to <8 x i16>
152*9880d681SAndroid Build Coastguard Worker  %bitcast2 = bitcast <4 x i32> %val2 to <8 x i16>
153*9880d681SAndroid Build Coastguard Worker  %bitcast3 = bitcast <4 x i32> %val3 to <8 x i16>
154*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <8 x i16> %bitcast0, <8 x i16> %bitcast1,
155*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
156*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
157*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <8 x i16> %bitcast2, <8 x i16> %bitcast3,
158*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
159*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
160*9880d681SAndroid Build Coastguard Worker  %bitcast4 = bitcast <8 x i16> %join0 to <16 x i8>
161*9880d681SAndroid Build Coastguard Worker  %bitcast5 = bitcast <8 x i16> %join1 to <16 x i8>
162*9880d681SAndroid Build Coastguard Worker  %vec = shufflevector <16 x i8> %bitcast4, <16 x i8> %bitcast5,
163*9880d681SAndroid Build Coastguard Worker                       <16 x i32> <i32 1, i32 3, i32 5, i32 7,
164*9880d681SAndroid Build Coastguard Worker                                   i32 9, i32 11, i32 13, i32 15,
165*9880d681SAndroid Build Coastguard Worker                                   i32 17, i32 19, i32 21, i32 23,
166*9880d681SAndroid Build Coastguard Worker                                   i32 25, i32 27, i32 29, i32 31>
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker  %ptr0 = getelementptr i8, i8 *%base, i64 0
169*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i8, i8 *%base, i64 1
170*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i8, i8 *%base, i64 2
171*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i8, i8 *%base, i64 3
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker  %byte0 = extractelement <16 x i8> %vec, i32 2
174*9880d681SAndroid Build Coastguard Worker  %byte1 = extractelement <16 x i8> %vec, i32 7
175*9880d681SAndroid Build Coastguard Worker  %byte2 = extractelement <16 x i8> %vec, i32 8
176*9880d681SAndroid Build Coastguard Worker  %byte3 = extractelement <16 x i8> %vec, i32 13
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker  store i8 %byte0, i8 *%ptr0
179*9880d681SAndroid Build Coastguard Worker  store i8 %byte1, i8 *%ptr1
180*9880d681SAndroid Build Coastguard Worker  store i8 %byte2, i8 *%ptr2
181*9880d681SAndroid Build Coastguard Worker  store i8 %byte3, i8 *%ptr3
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker  ret void
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker; A different way of writing a <4 x i32> -> <16 x i8> pack.
187*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f6(<4 x i32> %val0, <4 x i32> %val1,
188*9880d681SAndroid Build Coastguard Worker                     <4 x i32> %val2, <4 x i32> %val3) {
189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
190*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG1:%v[0-9]+]], %v24, %v26
191*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG2:%v[0-9]+]], %v28, %v30
192*9880d681SAndroid Build Coastguard Worker; CHECK: vpkh %v24, [[REG1]], [[REG2]]
193*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
194*9880d681SAndroid Build Coastguard Worker  %elem0 = extractelement <4 x i32> %val0, i32 0
195*9880d681SAndroid Build Coastguard Worker  %elem1 = extractelement <4 x i32> %val0, i32 1
196*9880d681SAndroid Build Coastguard Worker  %elem2 = extractelement <4 x i32> %val0, i32 2
197*9880d681SAndroid Build Coastguard Worker  %elem3 = extractelement <4 x i32> %val0, i32 3
198*9880d681SAndroid Build Coastguard Worker  %elem4 = extractelement <4 x i32> %val1, i32 0
199*9880d681SAndroid Build Coastguard Worker  %elem5 = extractelement <4 x i32> %val1, i32 1
200*9880d681SAndroid Build Coastguard Worker  %elem6 = extractelement <4 x i32> %val1, i32 2
201*9880d681SAndroid Build Coastguard Worker  %elem7 = extractelement <4 x i32> %val1, i32 3
202*9880d681SAndroid Build Coastguard Worker  %elem8 = extractelement <4 x i32> %val2, i32 0
203*9880d681SAndroid Build Coastguard Worker  %elem9 = extractelement <4 x i32> %val2, i32 1
204*9880d681SAndroid Build Coastguard Worker  %elem10 = extractelement <4 x i32> %val2, i32 2
205*9880d681SAndroid Build Coastguard Worker  %elem11 = extractelement <4 x i32> %val2, i32 3
206*9880d681SAndroid Build Coastguard Worker  %elem12 = extractelement <4 x i32> %val3, i32 0
207*9880d681SAndroid Build Coastguard Worker  %elem13 = extractelement <4 x i32> %val3, i32 1
208*9880d681SAndroid Build Coastguard Worker  %elem14 = extractelement <4 x i32> %val3, i32 2
209*9880d681SAndroid Build Coastguard Worker  %elem15 = extractelement <4 x i32> %val3, i32 3
210*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast i32 %elem0 to <2 x i16>
211*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast i32 %elem1 to <2 x i16>
212*9880d681SAndroid Build Coastguard Worker  %bitcast2 = bitcast i32 %elem2 to <2 x i16>
213*9880d681SAndroid Build Coastguard Worker  %bitcast3 = bitcast i32 %elem3 to <2 x i16>
214*9880d681SAndroid Build Coastguard Worker  %bitcast4 = bitcast i32 %elem4 to <2 x i16>
215*9880d681SAndroid Build Coastguard Worker  %bitcast5 = bitcast i32 %elem5 to <2 x i16>
216*9880d681SAndroid Build Coastguard Worker  %bitcast6 = bitcast i32 %elem6 to <2 x i16>
217*9880d681SAndroid Build Coastguard Worker  %bitcast7 = bitcast i32 %elem7 to <2 x i16>
218*9880d681SAndroid Build Coastguard Worker  %bitcast8 = bitcast i32 %elem8 to <2 x i16>
219*9880d681SAndroid Build Coastguard Worker  %bitcast9 = bitcast i32 %elem9 to <2 x i16>
220*9880d681SAndroid Build Coastguard Worker  %bitcast10 = bitcast i32 %elem10 to <2 x i16>
221*9880d681SAndroid Build Coastguard Worker  %bitcast11 = bitcast i32 %elem11 to <2 x i16>
222*9880d681SAndroid Build Coastguard Worker  %bitcast12 = bitcast i32 %elem12 to <2 x i16>
223*9880d681SAndroid Build Coastguard Worker  %bitcast13 = bitcast i32 %elem13 to <2 x i16>
224*9880d681SAndroid Build Coastguard Worker  %bitcast14 = bitcast i32 %elem14 to <2 x i16>
225*9880d681SAndroid Build Coastguard Worker  %bitcast15 = bitcast i32 %elem15 to <2 x i16>
226*9880d681SAndroid Build Coastguard Worker  %low0 = shufflevector <2 x i16> %bitcast0, <2 x i16> %bitcast1,
227*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
228*9880d681SAndroid Build Coastguard Worker  %low1 = shufflevector <2 x i16> %bitcast2, <2 x i16> %bitcast3,
229*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
230*9880d681SAndroid Build Coastguard Worker  %low2 = shufflevector <2 x i16> %bitcast4, <2 x i16> %bitcast5,
231*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
232*9880d681SAndroid Build Coastguard Worker  %low3 = shufflevector <2 x i16> %bitcast6, <2 x i16> %bitcast7,
233*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
234*9880d681SAndroid Build Coastguard Worker  %low4 = shufflevector <2 x i16> %bitcast8, <2 x i16> %bitcast9,
235*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
236*9880d681SAndroid Build Coastguard Worker  %low5 = shufflevector <2 x i16> %bitcast10, <2 x i16> %bitcast11,
237*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
238*9880d681SAndroid Build Coastguard Worker  %low6 = shufflevector <2 x i16> %bitcast12, <2 x i16> %bitcast13,
239*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
240*9880d681SAndroid Build Coastguard Worker  %low7 = shufflevector <2 x i16> %bitcast14, <2 x i16> %bitcast15,
241*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
242*9880d681SAndroid Build Coastguard Worker  %bytes0 = bitcast <2 x i16> %low0 to <4 x i8>
243*9880d681SAndroid Build Coastguard Worker  %bytes1 = bitcast <2 x i16> %low1 to <4 x i8>
244*9880d681SAndroid Build Coastguard Worker  %bytes2 = bitcast <2 x i16> %low2 to <4 x i8>
245*9880d681SAndroid Build Coastguard Worker  %bytes3 = bitcast <2 x i16> %low3 to <4 x i8>
246*9880d681SAndroid Build Coastguard Worker  %bytes4 = bitcast <2 x i16> %low4 to <4 x i8>
247*9880d681SAndroid Build Coastguard Worker  %bytes5 = bitcast <2 x i16> %low5 to <4 x i8>
248*9880d681SAndroid Build Coastguard Worker  %bytes6 = bitcast <2 x i16> %low6 to <4 x i8>
249*9880d681SAndroid Build Coastguard Worker  %bytes7 = bitcast <2 x i16> %low7 to <4 x i8>
250*9880d681SAndroid Build Coastguard Worker  %blow0 = shufflevector <4 x i8> %bytes0, <4 x i8> %bytes1,
251*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
252*9880d681SAndroid Build Coastguard Worker  %blow1 = shufflevector <4 x i8> %bytes2, <4 x i8> %bytes3,
253*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
254*9880d681SAndroid Build Coastguard Worker  %blow2 = shufflevector <4 x i8> %bytes4, <4 x i8> %bytes5,
255*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
256*9880d681SAndroid Build Coastguard Worker  %blow3 = shufflevector <4 x i8> %bytes6, <4 x i8> %bytes7,
257*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
258*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <4 x i8> %blow0, <4 x i8> %blow1,
259*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 0, i32 1, i32 2, i32 3,
260*9880d681SAndroid Build Coastguard Worker                                    i32 4, i32 5, i32 6, i32 7>
261*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <4 x i8> %blow2, <4 x i8> %blow3,
262*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 0, i32 1, i32 2, i32 3,
263*9880d681SAndroid Build Coastguard Worker                                    i32 4, i32 5, i32 6, i32 7>
264*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <8 x i8> %join0, <8 x i8> %join1,
265*9880d681SAndroid Build Coastguard Worker                       <16 x i32> <i32 0, i32 1, i32 2, i32 3,
266*9880d681SAndroid Build Coastguard Worker                                   i32 4, i32 5, i32 6, i32 7,
267*9880d681SAndroid Build Coastguard Worker                                   i32 8, i32 9, i32 10, i32 11,
268*9880d681SAndroid Build Coastguard Worker                                   i32 12, i32 13, i32 14, i32 15>
269*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %ret
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Worker; One way of writing a <2 x i64> -> <16 x i8> pack.
273*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f7(<2 x i64> %val0, <2 x i64> %val1,
274*9880d681SAndroid Build Coastguard Worker                     <2 x i64> %val2, <2 x i64> %val3,
275*9880d681SAndroid Build Coastguard Worker                     <2 x i64> %val4, <2 x i64> %val5,
276*9880d681SAndroid Build Coastguard Worker                     <2 x i64> %val6, <2 x i64> %val7) {
277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
278*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hfg]}} [[REG1:%v[0-9]+]], %v24, %v26
279*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hfg]}} [[REG2:%v[0-9]+]], %v28, %v30
280*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hfg]}} [[REG3:%v[0-9]+]], %v25, %v27
281*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hfg]}} [[REG4:%v[0-9]+]], %v29, %v31
282*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG5:%v[0-9]+]], [[REG1]], [[REG2]]
283*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpk{{[hf]}} [[REG6:%v[0-9]+]], [[REG3]], [[REG4]]
284*9880d681SAndroid Build Coastguard Worker; CHECK: vpkh %v24, [[REG5]], [[REG6]]
285*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
286*9880d681SAndroid Build Coastguard Worker  %elem0 = extractelement <2 x i64> %val0, i32 0
287*9880d681SAndroid Build Coastguard Worker  %elem1 = extractelement <2 x i64> %val0, i32 1
288*9880d681SAndroid Build Coastguard Worker  %elem2 = extractelement <2 x i64> %val1, i32 0
289*9880d681SAndroid Build Coastguard Worker  %elem3 = extractelement <2 x i64> %val1, i32 1
290*9880d681SAndroid Build Coastguard Worker  %elem4 = extractelement <2 x i64> %val2, i32 0
291*9880d681SAndroid Build Coastguard Worker  %elem5 = extractelement <2 x i64> %val2, i32 1
292*9880d681SAndroid Build Coastguard Worker  %elem6 = extractelement <2 x i64> %val3, i32 0
293*9880d681SAndroid Build Coastguard Worker  %elem7 = extractelement <2 x i64> %val3, i32 1
294*9880d681SAndroid Build Coastguard Worker  %elem8 = extractelement <2 x i64> %val4, i32 0
295*9880d681SAndroid Build Coastguard Worker  %elem9 = extractelement <2 x i64> %val4, i32 1
296*9880d681SAndroid Build Coastguard Worker  %elem10 = extractelement <2 x i64> %val5, i32 0
297*9880d681SAndroid Build Coastguard Worker  %elem11 = extractelement <2 x i64> %val5, i32 1
298*9880d681SAndroid Build Coastguard Worker  %elem12 = extractelement <2 x i64> %val6, i32 0
299*9880d681SAndroid Build Coastguard Worker  %elem13 = extractelement <2 x i64> %val6, i32 1
300*9880d681SAndroid Build Coastguard Worker  %elem14 = extractelement <2 x i64> %val7, i32 0
301*9880d681SAndroid Build Coastguard Worker  %elem15 = extractelement <2 x i64> %val7, i32 1
302*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast i64 %elem0 to <2 x i32>
303*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast i64 %elem1 to <2 x i32>
304*9880d681SAndroid Build Coastguard Worker  %bitcast2 = bitcast i64 %elem2 to <2 x i32>
305*9880d681SAndroid Build Coastguard Worker  %bitcast3 = bitcast i64 %elem3 to <2 x i32>
306*9880d681SAndroid Build Coastguard Worker  %bitcast4 = bitcast i64 %elem4 to <2 x i32>
307*9880d681SAndroid Build Coastguard Worker  %bitcast5 = bitcast i64 %elem5 to <2 x i32>
308*9880d681SAndroid Build Coastguard Worker  %bitcast6 = bitcast i64 %elem6 to <2 x i32>
309*9880d681SAndroid Build Coastguard Worker  %bitcast7 = bitcast i64 %elem7 to <2 x i32>
310*9880d681SAndroid Build Coastguard Worker  %bitcast8 = bitcast i64 %elem8 to <2 x i32>
311*9880d681SAndroid Build Coastguard Worker  %bitcast9 = bitcast i64 %elem9 to <2 x i32>
312*9880d681SAndroid Build Coastguard Worker  %bitcast10 = bitcast i64 %elem10 to <2 x i32>
313*9880d681SAndroid Build Coastguard Worker  %bitcast11 = bitcast i64 %elem11 to <2 x i32>
314*9880d681SAndroid Build Coastguard Worker  %bitcast12 = bitcast i64 %elem12 to <2 x i32>
315*9880d681SAndroid Build Coastguard Worker  %bitcast13 = bitcast i64 %elem13 to <2 x i32>
316*9880d681SAndroid Build Coastguard Worker  %bitcast14 = bitcast i64 %elem14 to <2 x i32>
317*9880d681SAndroid Build Coastguard Worker  %bitcast15 = bitcast i64 %elem15 to <2 x i32>
318*9880d681SAndroid Build Coastguard Worker  %low0 = shufflevector <2 x i32> %bitcast0, <2 x i32> %bitcast1,
319*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
320*9880d681SAndroid Build Coastguard Worker  %low1 = shufflevector <2 x i32> %bitcast2, <2 x i32> %bitcast3,
321*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
322*9880d681SAndroid Build Coastguard Worker  %low2 = shufflevector <2 x i32> %bitcast4, <2 x i32> %bitcast5,
323*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
324*9880d681SAndroid Build Coastguard Worker  %low3 = shufflevector <2 x i32> %bitcast6, <2 x i32> %bitcast7,
325*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
326*9880d681SAndroid Build Coastguard Worker  %low4 = shufflevector <2 x i32> %bitcast8, <2 x i32> %bitcast9,
327*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
328*9880d681SAndroid Build Coastguard Worker  %low5 = shufflevector <2 x i32> %bitcast10, <2 x i32> %bitcast11,
329*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
330*9880d681SAndroid Build Coastguard Worker  %low6 = shufflevector <2 x i32> %bitcast12, <2 x i32> %bitcast13,
331*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
332*9880d681SAndroid Build Coastguard Worker  %low7 = shufflevector <2 x i32> %bitcast14, <2 x i32> %bitcast15,
333*9880d681SAndroid Build Coastguard Worker                        <2 x i32> <i32 1, i32 3>
334*9880d681SAndroid Build Coastguard Worker  %half0 = bitcast <2 x i32> %low0 to <4 x i16>
335*9880d681SAndroid Build Coastguard Worker  %half1 = bitcast <2 x i32> %low1 to <4 x i16>
336*9880d681SAndroid Build Coastguard Worker  %half2 = bitcast <2 x i32> %low2 to <4 x i16>
337*9880d681SAndroid Build Coastguard Worker  %half3 = bitcast <2 x i32> %low3 to <4 x i16>
338*9880d681SAndroid Build Coastguard Worker  %half4 = bitcast <2 x i32> %low4 to <4 x i16>
339*9880d681SAndroid Build Coastguard Worker  %half5 = bitcast <2 x i32> %low5 to <4 x i16>
340*9880d681SAndroid Build Coastguard Worker  %half6 = bitcast <2 x i32> %low6 to <4 x i16>
341*9880d681SAndroid Build Coastguard Worker  %half7 = bitcast <2 x i32> %low7 to <4 x i16>
342*9880d681SAndroid Build Coastguard Worker  %hlow0 = shufflevector <4 x i16> %half0, <4 x i16> %half1,
343*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
344*9880d681SAndroid Build Coastguard Worker  %hlow1 = shufflevector <4 x i16> %half2, <4 x i16> %half3,
345*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
346*9880d681SAndroid Build Coastguard Worker  %hlow2 = shufflevector <4 x i16> %half4, <4 x i16> %half5,
347*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
348*9880d681SAndroid Build Coastguard Worker  %hlow3 = shufflevector <4 x i16> %half6, <4 x i16> %half7,
349*9880d681SAndroid Build Coastguard Worker                         <4 x i32> <i32 1, i32 3, i32 5, i32 7>
350*9880d681SAndroid Build Coastguard Worker  %bytes0 = bitcast <4 x i16> %hlow0 to <8 x i8>
351*9880d681SAndroid Build Coastguard Worker  %bytes1 = bitcast <4 x i16> %hlow1 to <8 x i8>
352*9880d681SAndroid Build Coastguard Worker  %bytes2 = bitcast <4 x i16> %hlow2 to <8 x i8>
353*9880d681SAndroid Build Coastguard Worker  %bytes3 = bitcast <4 x i16> %hlow3 to <8 x i8>
354*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <8 x i8> %bytes0, <8 x i8> %bytes1,
355*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
356*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
357*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <8 x i8> %bytes2, <8 x i8> %bytes3,
358*9880d681SAndroid Build Coastguard Worker                         <8 x i32> <i32 1, i32 3, i32 5, i32 7,
359*9880d681SAndroid Build Coastguard Worker                                    i32 9, i32 11, i32 13, i32 15>
360*9880d681SAndroid Build Coastguard Worker  %ret = shufflevector <8 x i8> %join0, <8 x i8> %join1,
361*9880d681SAndroid Build Coastguard Worker                       <16 x i32> <i32 0, i32 1, i32 2, i32 3,
362*9880d681SAndroid Build Coastguard Worker                                   i32 4, i32 5, i32 6, i32 7,
363*9880d681SAndroid Build Coastguard Worker                                   i32 8, i32 9, i32 10, i32 11,
364*9880d681SAndroid Build Coastguard Worker                                   i32 12, i32 13, i32 14, i32 15>
365*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %ret
366*9880d681SAndroid Build Coastguard Worker}
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Worker; Test a <2 x i64> -> <4 x f32> pack in which only individual elements are
369*9880d681SAndroid Build Coastguard Worker; needed.
370*9880d681SAndroid Build Coastguard Workerdefine float @f8(i64 %scalar0, i64 %scalar1, i64 %scalar2, i64 %scalar3) {
371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
372*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vperm
373*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vpk
374*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmrh
375*9880d681SAndroid Build Coastguard Worker; CHECK: aebr {{%f[0-7]}},
376*9880d681SAndroid Build Coastguard Worker; CHECK: aebr {{%f[0-7]}},
377*9880d681SAndroid Build Coastguard Worker; CHECK: meebr %f0,
378*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
379*9880d681SAndroid Build Coastguard Worker  %vec0 = insertelement <2 x i64> undef, i64 %scalar0, i32 0
380*9880d681SAndroid Build Coastguard Worker  %vec1 = insertelement <2 x i64> undef, i64 %scalar1, i32 0
381*9880d681SAndroid Build Coastguard Worker  %vec2 = insertelement <2 x i64> undef, i64 %scalar2, i32 0
382*9880d681SAndroid Build Coastguard Worker  %vec3 = insertelement <2 x i64> undef, i64 %scalar3, i32 0
383*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <2 x i64> %vec0, <2 x i64> %vec1,
384*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 0, i32 2>
385*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <2 x i64> %vec2, <2 x i64> %vec3,
386*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 0, i32 2>
387*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast <2 x i64> %join0 to <4 x float>
388*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast <2 x i64> %join1 to <4 x float>
389*9880d681SAndroid Build Coastguard Worker  %pack = shufflevector <4 x float> %bitcast0, <4 x float> %bitcast1,
390*9880d681SAndroid Build Coastguard Worker                        <4 x i32> <i32 1, i32 3, i32 5, i32 7>
391*9880d681SAndroid Build Coastguard Worker  %elt0 = extractelement <4 x float> %pack, i32 0
392*9880d681SAndroid Build Coastguard Worker  %elt1 = extractelement <4 x float> %pack, i32 1
393*9880d681SAndroid Build Coastguard Worker  %elt2 = extractelement <4 x float> %pack, i32 2
394*9880d681SAndroid Build Coastguard Worker  %elt3 = extractelement <4 x float> %pack, i32 3
395*9880d681SAndroid Build Coastguard Worker  %add0 = fadd float %elt0, %elt2
396*9880d681SAndroid Build Coastguard Worker  %add1 = fadd float %elt1, %elt3
397*9880d681SAndroid Build Coastguard Worker  %ret = fmul float %add0, %add1
398*9880d681SAndroid Build Coastguard Worker  ret float %ret
399*9880d681SAndroid Build Coastguard Worker}
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker; Test a <2 x f64> -> <4 x i32> pack in which only individual elements are
402*9880d681SAndroid Build Coastguard Worker; needed.
403*9880d681SAndroid Build Coastguard Workerdefine i32 @f9(double %scalar0, double %scalar1, double %scalar2,
404*9880d681SAndroid Build Coastguard Worker               double %scalar3) {
405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
406*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vperm
407*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vpk
408*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmrh
409*9880d681SAndroid Build Coastguard Worker; CHECK: ar {{%r[0-5]}},
410*9880d681SAndroid Build Coastguard Worker; CHECK: ar {{%r[0-5]}},
411*9880d681SAndroid Build Coastguard Worker; CHECK: or %r2,
412*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
413*9880d681SAndroid Build Coastguard Worker  %vec0 = insertelement <2 x double> undef, double %scalar0, i32 0
414*9880d681SAndroid Build Coastguard Worker  %vec1 = insertelement <2 x double> undef, double %scalar1, i32 0
415*9880d681SAndroid Build Coastguard Worker  %vec2 = insertelement <2 x double> undef, double %scalar2, i32 0
416*9880d681SAndroid Build Coastguard Worker  %vec3 = insertelement <2 x double> undef, double %scalar3, i32 0
417*9880d681SAndroid Build Coastguard Worker  %join0 = shufflevector <2 x double> %vec0, <2 x double> %vec1,
418*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 0, i32 2>
419*9880d681SAndroid Build Coastguard Worker  %join1 = shufflevector <2 x double> %vec2, <2 x double> %vec3,
420*9880d681SAndroid Build Coastguard Worker                         <2 x i32> <i32 0, i32 2>
421*9880d681SAndroid Build Coastguard Worker  %bitcast0 = bitcast <2 x double> %join0 to <4 x i32>
422*9880d681SAndroid Build Coastguard Worker  %bitcast1 = bitcast <2 x double> %join1 to <4 x i32>
423*9880d681SAndroid Build Coastguard Worker  %pack = shufflevector <4 x i32> %bitcast0, <4 x i32> %bitcast1,
424*9880d681SAndroid Build Coastguard Worker                        <4 x i32> <i32 1, i32 3, i32 5, i32 7>
425*9880d681SAndroid Build Coastguard Worker  %elt0 = extractelement <4 x i32> %pack, i32 0
426*9880d681SAndroid Build Coastguard Worker  %elt1 = extractelement <4 x i32> %pack, i32 1
427*9880d681SAndroid Build Coastguard Worker  %elt2 = extractelement <4 x i32> %pack, i32 2
428*9880d681SAndroid Build Coastguard Worker  %elt3 = extractelement <4 x i32> %pack, i32 3
429*9880d681SAndroid Build Coastguard Worker  %add0 = add i32 %elt0, %elt2
430*9880d681SAndroid Build Coastguard Worker  %add1 = add i32 %elt1, %elt3
431*9880d681SAndroid Build Coastguard Worker  %ret = or i32 %add0, %add1
432*9880d681SAndroid Build Coastguard Worker  ret i32 %ret
433*9880d681SAndroid Build Coastguard Worker}
434