xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/build-vector.ll (revision 985d64b03accbed8500a85372d716367d89b61be)
1add224c0Swanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2add224c0Swanglei; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3add224c0Swanglei
4add224c0Swangleidefine void @buildvector_v32i8_splat(ptr %dst, i8 %a0) nounwind {
5add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_splat:
6add224c0Swanglei; CHECK:       # %bb.0: # %entry
7add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.b $xr0, $a1
8add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
9add224c0Swanglei; CHECK-NEXT:    ret
10add224c0Swangleientry:
11add224c0Swanglei  %insert = insertelement <32 x i8> undef, i8 %a0, i8 0
12add224c0Swanglei  %splat = shufflevector <32 x i8> %insert, <32 x i8> undef, <32 x i32> zeroinitializer
13add224c0Swanglei  store <32 x i8> %splat, ptr %dst
14add224c0Swanglei  ret void
15add224c0Swanglei}
16add224c0Swanglei
17add224c0Swangleidefine void @buildvector_v16i16_splat(ptr %dst, i16 %a0) nounwind {
18add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_splat:
19add224c0Swanglei; CHECK:       # %bb.0: # %entry
20add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.h $xr0, $a1
21add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
22add224c0Swanglei; CHECK-NEXT:    ret
23add224c0Swangleientry:
24add224c0Swanglei  %insert = insertelement <16 x i16> undef, i16 %a0, i8 0
25add224c0Swanglei  %splat = shufflevector <16 x i16> %insert, <16 x i16> undef, <16 x i32> zeroinitializer
26add224c0Swanglei  store <16 x i16> %splat, ptr %dst
27add224c0Swanglei  ret void
28add224c0Swanglei}
29add224c0Swanglei
30add224c0Swangleidefine void @buildvector_v8i32_splat(ptr %dst, i32 %a0) nounwind {
31add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_splat:
32add224c0Swanglei; CHECK:       # %bb.0: # %entry
33add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.w $xr0, $a1
34add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
35add224c0Swanglei; CHECK-NEXT:    ret
36add224c0Swangleientry:
37add224c0Swanglei  %insert = insertelement <8 x i32> undef, i32 %a0, i8 0
38add224c0Swanglei  %splat = shufflevector <8 x i32> %insert, <8 x i32> undef, <8 x i32> zeroinitializer
39add224c0Swanglei  store <8 x i32> %splat, ptr %dst
40add224c0Swanglei  ret void
41add224c0Swanglei}
42add224c0Swanglei
43add224c0Swangleidefine void @buildvector_v4i64_splat(ptr %dst, i64 %a0) nounwind {
44add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_splat:
45add224c0Swanglei; CHECK:       # %bb.0: # %entry
46add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.d $xr0, $a1
47add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
48add224c0Swanglei; CHECK-NEXT:    ret
49add224c0Swangleientry:
50add224c0Swanglei  %insert = insertelement <4 x i64> undef, i64 %a0, i8 0
51add224c0Swanglei  %splat = shufflevector <4 x i64> %insert, <4 x i64> undef, <4 x i32> zeroinitializer
52add224c0Swanglei  store <4 x i64> %splat, ptr %dst
53add224c0Swanglei  ret void
54add224c0Swanglei}
55add224c0Swanglei
56add224c0Swangleidefine void @buildvector_v8f32_splat(ptr %dst, float %a0) nounwind {
57add224c0Swanglei; CHECK-LABEL: buildvector_v8f32_splat:
58add224c0Swanglei; CHECK:       # %bb.0: # %entry
59add224c0Swanglei; CHECK-NEXT:    # kill: def $f0 killed $f0 def $xr0
60c7367f98Swanglei; CHECK-NEXT:    xvreplve0.w $xr0, $xr0
61add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
62add224c0Swanglei; CHECK-NEXT:    ret
63add224c0Swangleientry:
64add224c0Swanglei  %insert = insertelement <8 x float> undef, float %a0, i8 0
65add224c0Swanglei  %splat = shufflevector <8 x float> %insert, <8 x float> undef, <8 x i32> zeroinitializer
66add224c0Swanglei  store <8 x float> %splat, ptr %dst
67add224c0Swanglei  ret void
68add224c0Swanglei}
69add224c0Swanglei
70add224c0Swangleidefine void @buildvector_v4f64_splat(ptr %dst, double %a0) nounwind {
71add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_splat:
72add224c0Swanglei; CHECK:       # %bb.0: # %entry
73add224c0Swanglei; CHECK-NEXT:    # kill: def $f0_64 killed $f0_64 def $xr0
74c7367f98Swanglei; CHECK-NEXT:    xvreplve0.d $xr0, $xr0
75add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
76add224c0Swanglei; CHECK-NEXT:    ret
77add224c0Swangleientry:
78add224c0Swanglei  %insert = insertelement <4 x double> undef, double %a0, i8 0
79add224c0Swanglei  %splat = shufflevector <4 x double> %insert, <4 x double> undef, <4 x i32> zeroinitializer
80add224c0Swanglei  store <4 x double> %splat, ptr %dst
81add224c0Swanglei  ret void
82add224c0Swanglei}
83add224c0Swanglei
84add224c0Swangleidefine void @buildvector_v32i8_const_splat(ptr %dst) nounwind {
85add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_const_splat:
86add224c0Swanglei; CHECK:       # %bb.0: # %entry
87add224c0Swanglei; CHECK-NEXT:    xvrepli.b $xr0, 1
88add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
89add224c0Swanglei; CHECK-NEXT:    ret
90add224c0Swangleientry:
91add224c0Swanglei  store <32 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, ptr %dst
92add224c0Swanglei  ret void
93add224c0Swanglei}
94add224c0Swanglei
95add224c0Swangleidefine void @buildvector_v16i16_const_splat(ptr %dst) nounwind {
96add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_const_splat:
97add224c0Swanglei; CHECK:       # %bb.0: # %entry
98add224c0Swanglei; CHECK-NEXT:    xvrepli.h $xr0, 1
99add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
100add224c0Swanglei; CHECK-NEXT:    ret
101add224c0Swangleientry:
102add224c0Swanglei  store <16 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, ptr %dst
103add224c0Swanglei  ret void
104add224c0Swanglei}
105add224c0Swanglei
106add224c0Swangleidefine void @buildvector_v8i32_const_splat(ptr %dst) nounwind {
107add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_const_splat:
108add224c0Swanglei; CHECK:       # %bb.0: # %entry
109add224c0Swanglei; CHECK-NEXT:    xvrepli.w $xr0, 1
110add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
111add224c0Swanglei; CHECK-NEXT:    ret
112add224c0Swangleientry:
113add224c0Swanglei  store <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, ptr %dst
114add224c0Swanglei  ret void
115add224c0Swanglei}
116add224c0Swanglei
117add224c0Swangleidefine void @buildvector_v4i64_const_splat(ptr %dst) nounwind {
118add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_const_splat:
119add224c0Swanglei; CHECK:       # %bb.0: # %entry
120add224c0Swanglei; CHECK-NEXT:    xvrepli.d $xr0, 1
121add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
122add224c0Swanglei; CHECK-NEXT:    ret
123add224c0Swangleientry:
124add224c0Swanglei  store <4 x i64> <i64 1, i64 1, i64 1, i64 1>, ptr %dst
125add224c0Swanglei  ret void
126add224c0Swanglei}
127add224c0Swanglei
128add224c0Swangleidefine void @buildvector_v2f32_const_splat(ptr %dst) nounwind {
129add224c0Swanglei; CHECK-LABEL: buildvector_v2f32_const_splat:
130add224c0Swanglei; CHECK:       # %bb.0: # %entry
131add224c0Swanglei; CHECK-NEXT:    lu12i.w $a1, 260096
132add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.w $xr0, $a1
133add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
134add224c0Swanglei; CHECK-NEXT:    ret
135add224c0Swangleientry:
136add224c0Swanglei  store <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, ptr %dst
137add224c0Swanglei  ret void
138add224c0Swanglei}
139add224c0Swanglei
140add224c0Swangleidefine void @buildvector_v4f64_const_splat(ptr %dst) nounwind {
141add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_const_splat:
142add224c0Swanglei; CHECK:       # %bb.0: # %entry
143add224c0Swanglei; CHECK-NEXT:    lu52i.d $a1, $zero, 1023
144add224c0Swanglei; CHECK-NEXT:    xvreplgr2vr.d $xr0, $a1
145add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
146add224c0Swanglei; CHECK-NEXT:    ret
147add224c0Swangleientry:
148add224c0Swanglei  store <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, ptr %dst
149add224c0Swanglei  ret void
150add224c0Swanglei}
151add224c0Swanglei
152add224c0Swangleidefine void @buildvector_v32i8_const(ptr %dst) nounwind {
153add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_const:
154add224c0Swanglei; CHECK:       # %bb.0: # %entry
155add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI12_0)
156*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI12_0)
157add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
158add224c0Swanglei; CHECK-NEXT:    ret
159add224c0Swangleientry:
160add224c0Swanglei  store <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, ptr %dst
161add224c0Swanglei  ret void
162add224c0Swanglei}
163add224c0Swanglei
164add224c0Swangleidefine void @buildvector_v16i16_const(ptr %dst) nounwind {
165add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_const:
166add224c0Swanglei; CHECK:       # %bb.0: # %entry
167add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI13_0)
168*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI13_0)
169add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
170add224c0Swanglei; CHECK-NEXT:    ret
171add224c0Swangleientry:
172add224c0Swanglei  store <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, ptr %dst
173add224c0Swanglei  ret void
174add224c0Swanglei}
175add224c0Swanglei
176add224c0Swangleidefine void @buildvector_v8i32_const(ptr %dst) nounwind {
177add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_const:
178add224c0Swanglei; CHECK:       # %bb.0: # %entry
179add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI14_0)
180*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI14_0)
181add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
182add224c0Swanglei; CHECK-NEXT:    ret
183add224c0Swangleientry:
184add224c0Swanglei  store <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>, ptr %dst
185add224c0Swanglei  ret void
186add224c0Swanglei}
187add224c0Swanglei
188add224c0Swangleidefine void @buildvector_v4i64_const(ptr %dst) nounwind {
189add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_const:
190add224c0Swanglei; CHECK:       # %bb.0: # %entry
191add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI15_0)
192*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI15_0)
193add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
194add224c0Swanglei; CHECK-NEXT:    ret
195add224c0Swangleientry:
196add224c0Swanglei  store <4 x i64> <i64 0, i64 1, i64 2, i64 3>, ptr %dst
197add224c0Swanglei  ret void
198add224c0Swanglei}
199add224c0Swanglei
200add224c0Swangleidefine void @buildvector_v2f32_const(ptr %dst) nounwind {
201add224c0Swanglei; CHECK-LABEL: buildvector_v2f32_const:
202add224c0Swanglei; CHECK:       # %bb.0: # %entry
203add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI16_0)
204*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI16_0)
205add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
206add224c0Swanglei; CHECK-NEXT:    ret
207add224c0Swangleientry:
208add224c0Swanglei  store <8 x float> <float 0.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0>, ptr %dst
209add224c0Swanglei  ret void
210add224c0Swanglei}
211add224c0Swanglei
212add224c0Swangleidefine void @buildvector_v4f64_const(ptr %dst) nounwind {
213add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_const:
214add224c0Swanglei; CHECK:       # %bb.0: # %entry
215add224c0Swanglei; CHECK-NEXT:    pcalau12i $a1, %pc_hi20(.LCPI17_0)
216*985d64b0Shev; CHECK-NEXT:    xvld $xr0, $a1, %pc_lo12(.LCPI17_0)
217add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
218add224c0Swanglei; CHECK-NEXT:    ret
219add224c0Swangleientry:
220add224c0Swanglei  store <4 x double> <double 0.0, double 1.0, double 2.0, double 3.0>, ptr %dst
221add224c0Swanglei  ret void
222add224c0Swanglei}
223add224c0Swanglei
224add224c0Swangleidefine void @buildvector_v32i8(ptr %dst, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7, i8 %a8, i8 %a9, i8 %a10, i8 %a11, i8 %a12, i8 %a13, i8 %a14, i8 %a15, i8 %a16, i8 %a17, i8 %a18, i8 %a19, i8 %a20, i8 %a21, i8 %a22, i8 %a23, i8 %a24, i8 %a25, i8 %a26, i8 %a27, i8 %a28, i8 %a29, i8 %a30, i8 %a31) nounwind {
225add224c0Swanglei; CHECK-LABEL: buildvector_v32i8:
226add224c0Swanglei; CHECK:       # %bb.0: # %entry
227add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a1, 0
228add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a2, 1
229add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a3, 2
230add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a4, 3
231add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a5, 4
232add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 0
233a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a6, 5
234a5c90e48Swanglei; CHECK-NEXT:    ld.b $a2, $sp, 8
235a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a7, 6
236a5c90e48Swanglei; CHECK-NEXT:    ld.b $a3, $sp, 16
237add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a1, 7
238add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 24
239a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a2, 8
240a5c90e48Swanglei; CHECK-NEXT:    ld.b $a2, $sp, 32
241a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a3, 9
242a5c90e48Swanglei; CHECK-NEXT:    ld.b $a3, $sp, 40
243add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a1, 10
244add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 48
245a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a2, 11
246a5c90e48Swanglei; CHECK-NEXT:    ld.b $a2, $sp, 56
247a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a3, 12
248a5c90e48Swanglei; CHECK-NEXT:    ld.b $a3, $sp, 64
249add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a1, 13
250a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a2, 14
251add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 72
252a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr0, $a3, 15
253add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
254add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
255add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 0
256add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 80
257a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
258add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
259add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
260add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 1
261add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 88
262a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
263add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
264add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
265add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 2
266add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 96
267a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
268add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
269add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
270add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 3
271add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 104
272a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
273add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
274add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
275add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 4
276add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 112
277a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
278add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
279add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
280add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 5
281add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 120
282a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
283add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
284add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
285add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 6
286add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 128
287a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
288add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
289add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
290add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 7
291add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 136
292a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
293add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
294add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
295add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 8
296add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 144
297a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
298add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
299add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
300add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 9
301add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 152
302a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
303add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
304add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
305add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 10
306add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 160
307a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
308add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
309add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
310add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 11
311add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 168
312a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
313add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
314add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
315add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 12
316add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 176
317a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
318add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
319add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
320add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 13
321add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 184
322a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
323add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
324add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
325add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 14
326add224c0Swanglei; CHECK-NEXT:    ld.b $a1, $sp, 192
327a5c90e48Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
328add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
329add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
330add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.b $vr1, $a1, 15
331add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
332add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
333add224c0Swanglei; CHECK-NEXT:    ret
334add224c0Swangleientry:
335add224c0Swanglei  %ins0  = insertelement <32 x i8> undef,  i8 %a0,  i32 0
336add224c0Swanglei  %ins1  = insertelement <32 x i8> %ins0,  i8 %a1,  i32 1
337add224c0Swanglei  %ins2  = insertelement <32 x i8> %ins1,  i8 %a2,  i32 2
338add224c0Swanglei  %ins3  = insertelement <32 x i8> %ins2,  i8 %a3,  i32 3
339add224c0Swanglei  %ins4  = insertelement <32 x i8> %ins3,  i8 %a4,  i32 4
340add224c0Swanglei  %ins5  = insertelement <32 x i8> %ins4,  i8 %a5,  i32 5
341add224c0Swanglei  %ins6  = insertelement <32 x i8> %ins5,  i8 %a6,  i32 6
342add224c0Swanglei  %ins7  = insertelement <32 x i8> %ins6,  i8 %a7,  i32 7
343add224c0Swanglei  %ins8  = insertelement <32 x i8> %ins7,  i8 %a8,  i32 8
344add224c0Swanglei  %ins9  = insertelement <32 x i8> %ins8,  i8 %a9,  i32 9
345add224c0Swanglei  %ins10 = insertelement <32 x i8> %ins9,  i8 %a10, i32 10
346add224c0Swanglei  %ins11 = insertelement <32 x i8> %ins10, i8 %a11, i32 11
347add224c0Swanglei  %ins12 = insertelement <32 x i8> %ins11, i8 %a12, i32 12
348add224c0Swanglei  %ins13 = insertelement <32 x i8> %ins12, i8 %a13, i32 13
349add224c0Swanglei  %ins14 = insertelement <32 x i8> %ins13, i8 %a14, i32 14
350add224c0Swanglei  %ins15 = insertelement <32 x i8> %ins14, i8 %a15, i32 15
351add224c0Swanglei  %ins16 = insertelement <32 x i8> %ins15, i8 %a16, i32 16
352add224c0Swanglei  %ins17 = insertelement <32 x i8> %ins16, i8 %a17, i32 17
353add224c0Swanglei  %ins18 = insertelement <32 x i8> %ins17, i8 %a18, i32 18
354add224c0Swanglei  %ins19 = insertelement <32 x i8> %ins18, i8 %a19, i32 19
355add224c0Swanglei  %ins20 = insertelement <32 x i8> %ins19, i8 %a20, i32 20
356add224c0Swanglei  %ins21 = insertelement <32 x i8> %ins20, i8 %a21, i32 21
357add224c0Swanglei  %ins22 = insertelement <32 x i8> %ins21, i8 %a22, i32 22
358add224c0Swanglei  %ins23 = insertelement <32 x i8> %ins22, i8 %a23, i32 23
359add224c0Swanglei  %ins24 = insertelement <32 x i8> %ins23, i8 %a24, i32 24
360add224c0Swanglei  %ins25 = insertelement <32 x i8> %ins24, i8 %a25, i32 25
361add224c0Swanglei  %ins26 = insertelement <32 x i8> %ins25, i8 %a26, i32 26
362add224c0Swanglei  %ins27 = insertelement <32 x i8> %ins26, i8 %a27, i32 27
363add224c0Swanglei  %ins28 = insertelement <32 x i8> %ins27, i8 %a28, i32 28
364add224c0Swanglei  %ins29 = insertelement <32 x i8> %ins28, i8 %a29, i32 29
365add224c0Swanglei  %ins30 = insertelement <32 x i8> %ins29, i8 %a30, i32 30
366add224c0Swanglei  %ins31 = insertelement <32 x i8> %ins30, i8 %a31, i32 31
367add224c0Swanglei  store <32 x i8> %ins31, ptr %dst
368add224c0Swanglei  ret void
369add224c0Swanglei}
370add224c0Swanglei
371add224c0Swangleidefine void @buildvector_v16i16(ptr %dst, i16 %a0, i16 %a1, i16 %a2, i16 %a3, i16 %a4, i16 %a5, i16 %a6, i16 %a7, i16 %a8, i16 %a9, i16 %a10, i16 %a11, i16 %a12, i16 %a13, i16 %a14, i16 %a15) nounwind {
372add224c0Swanglei; CHECK-LABEL: buildvector_v16i16:
373add224c0Swanglei; CHECK:       # %bb.0: # %entry
374a5c90e48Swanglei; CHECK-NEXT:    ld.h $t0, $sp, 8
375a5c90e48Swanglei; CHECK-NEXT:    ld.h $t1, $sp, 0
376add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a1, 0
377add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a2, 1
378add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a3, 2
379add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a4, 3
380add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a5, 4
381add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a6, 5
382add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $a7, 6
383a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr0, $t1, 7
384a5c90e48Swanglei; CHECK-NEXT:    ld.h $a1, $sp, 16
385add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
386add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
387a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $t0, 0
388add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
389a5c90e48Swanglei; CHECK-NEXT:    ld.h $a2, $sp, 24
390add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
391add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
392add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a1, 1
393add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
394a5c90e48Swanglei; CHECK-NEXT:    ld.h $a1, $sp, 32
395add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
396add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
397a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a2, 2
398add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
399a5c90e48Swanglei; CHECK-NEXT:    ld.h $a2, $sp, 40
400add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
401add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
402add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a1, 3
403add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
404a5c90e48Swanglei; CHECK-NEXT:    ld.h $a1, $sp, 48
405add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
406add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
407a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a2, 4
408add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
409a5c90e48Swanglei; CHECK-NEXT:    ld.h $a2, $sp, 56
410add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
411add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
412add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a1, 5
413add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
414a5c90e48Swanglei; CHECK-NEXT:    ld.h $a1, $sp, 64
415add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
416add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
417a5c90e48Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a2, 6
418add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
419add224c0Swanglei; CHECK-NEXT:    xvori.b $xr1, $xr0, 0
420add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 1
421add224c0Swanglei; CHECK-NEXT:    vinsgr2vr.h $vr1, $a1, 7
422add224c0Swanglei; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2
423add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
424add224c0Swanglei; CHECK-NEXT:    ret
425add224c0Swangleientry:
426add224c0Swanglei  %ins0  = insertelement <16 x i16> undef,  i16 %a0,  i32 0
427add224c0Swanglei  %ins1  = insertelement <16 x i16> %ins0,  i16 %a1,  i32 1
428add224c0Swanglei  %ins2  = insertelement <16 x i16> %ins1,  i16 %a2,  i32 2
429add224c0Swanglei  %ins3  = insertelement <16 x i16> %ins2,  i16 %a3,  i32 3
430add224c0Swanglei  %ins4  = insertelement <16 x i16> %ins3,  i16 %a4,  i32 4
431add224c0Swanglei  %ins5  = insertelement <16 x i16> %ins4,  i16 %a5,  i32 5
432add224c0Swanglei  %ins6  = insertelement <16 x i16> %ins5,  i16 %a6,  i32 6
433add224c0Swanglei  %ins7  = insertelement <16 x i16> %ins6,  i16 %a7,  i32 7
434add224c0Swanglei  %ins8  = insertelement <16 x i16> %ins7,  i16 %a8,  i32 8
435add224c0Swanglei  %ins9  = insertelement <16 x i16> %ins8,  i16 %a9,  i32 9
436add224c0Swanglei  %ins10 = insertelement <16 x i16> %ins9,  i16 %a10, i32 10
437add224c0Swanglei  %ins11 = insertelement <16 x i16> %ins10, i16 %a11, i32 11
438add224c0Swanglei  %ins12 = insertelement <16 x i16> %ins11, i16 %a12, i32 12
439add224c0Swanglei  %ins13 = insertelement <16 x i16> %ins12, i16 %a13, i32 13
440add224c0Swanglei  %ins14 = insertelement <16 x i16> %ins13, i16 %a14, i32 14
441add224c0Swanglei  %ins15 = insertelement <16 x i16> %ins14, i16 %a15, i32 15
442add224c0Swanglei  store <16 x i16> %ins15, ptr %dst
443add224c0Swanglei  ret void
444add224c0Swanglei}
445add224c0Swanglei
446add224c0Swangleidefine void @buildvector_v8i32(ptr %dst, i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, i32 %a7) nounwind {
447add224c0Swanglei; CHECK-LABEL: buildvector_v8i32:
448add224c0Swanglei; CHECK:       # %bb.0: # %entry
449a5c90e48Swanglei; CHECK-NEXT:    ld.w $t0, $sp, 0
450add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 0
451add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a2, 1
452add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a3, 2
453add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a4, 3
454add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a5, 4
455add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a6, 5
456add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a7, 6
457a5c90e48Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $t0, 7
458add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
459add224c0Swanglei; CHECK-NEXT:    ret
460add224c0Swangleientry:
461add224c0Swanglei  %ins0 = insertelement <8 x i32> undef, i32 %a0, i32 0
462add224c0Swanglei  %ins1 = insertelement <8 x i32> %ins0, i32 %a1, i32 1
463add224c0Swanglei  %ins2 = insertelement <8 x i32> %ins1, i32 %a2, i32 2
464add224c0Swanglei  %ins3 = insertelement <8 x i32> %ins2, i32 %a3, i32 3
465add224c0Swanglei  %ins4 = insertelement <8 x i32> %ins3, i32 %a4, i32 4
466add224c0Swanglei  %ins5 = insertelement <8 x i32> %ins4, i32 %a5, i32 5
467add224c0Swanglei  %ins6 = insertelement <8 x i32> %ins5, i32 %a6, i32 6
468add224c0Swanglei  %ins7 = insertelement <8 x i32> %ins6, i32 %a7, i32 7
469add224c0Swanglei  store <8 x i32> %ins7, ptr %dst
470add224c0Swanglei  ret void
471add224c0Swanglei}
472add224c0Swanglei
473add224c0Swangleidefine void @buildvector_v4i64(ptr %dst, i64 %a0, i64 %a1, i64 %a2, i64 %a3) nounwind {
474add224c0Swanglei; CHECK-LABEL: buildvector_v4i64:
475add224c0Swanglei; CHECK:       # %bb.0: # %entry
476add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a1, 0
477add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a2, 1
478add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a3, 2
479add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a4, 3
480add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
481add224c0Swanglei; CHECK-NEXT:    ret
482add224c0Swangleientry:
483add224c0Swanglei  %ins0 = insertelement <4 x i64> undef, i64 %a0, i32 0
484add224c0Swanglei  %ins1 = insertelement <4 x i64> %ins0, i64 %a1, i32 1
485add224c0Swanglei  %ins2 = insertelement <4 x i64> %ins1, i64 %a2, i32 2
486add224c0Swanglei  %ins3 = insertelement <4 x i64> %ins2, i64 %a3, i32 3
487add224c0Swanglei  store <4 x i64> %ins3, ptr %dst
488add224c0Swanglei  ret void
489add224c0Swanglei}
490add224c0Swanglei
491add224c0Swangleidefine void @buildvector_v8f32(ptr %dst, float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7) nounwind {
492add224c0Swanglei; CHECK-LABEL: buildvector_v8f32:
493add224c0Swanglei; CHECK:       # %bb.0: # %entry
494add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa0
495add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 0
496add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa1
497add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 1
498add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa2
499add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 2
500add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa3
501add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 3
502add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa4
503add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 4
504add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa5
505add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 5
506add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa6
507add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 6
508add224c0Swanglei; CHECK-NEXT:    movfr2gr.s $a1, $fa7
509add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.w $xr0, $a1, 7
510add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
511add224c0Swanglei; CHECK-NEXT:    ret
512add224c0Swangleientry:
513add224c0Swanglei  %ins0 = insertelement <8 x float> undef, float %a0, i32 0
514add224c0Swanglei  %ins1 = insertelement <8 x float> %ins0, float %a1, i32 1
515add224c0Swanglei  %ins2 = insertelement <8 x float> %ins1, float %a2, i32 2
516add224c0Swanglei  %ins3 = insertelement <8 x float> %ins2, float %a3, i32 3
517add224c0Swanglei  %ins4 = insertelement <8 x float> %ins3, float %a4, i32 4
518add224c0Swanglei  %ins5 = insertelement <8 x float> %ins4, float %a5, i32 5
519add224c0Swanglei  %ins6 = insertelement <8 x float> %ins5, float %a6, i32 6
520add224c0Swanglei  %ins7 = insertelement <8 x float> %ins6, float %a7, i32 7
521add224c0Swanglei  store <8 x float> %ins7, ptr %dst
522add224c0Swanglei  ret void
523add224c0Swanglei}
524add224c0Swanglei
525add224c0Swangleidefine void @buildvector_v4f64(ptr %dst, double %a0, double %a1, double %a2, double %a3) nounwind {
526add224c0Swanglei; CHECK-LABEL: buildvector_v4f64:
527add224c0Swanglei; CHECK:       # %bb.0: # %entry
528add224c0Swanglei; CHECK-NEXT:    movfr2gr.d $a1, $fa0
529add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a1, 0
530add224c0Swanglei; CHECK-NEXT:    movfr2gr.d $a1, $fa1
531add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a1, 1
532add224c0Swanglei; CHECK-NEXT:    movfr2gr.d $a1, $fa2
533add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a1, 2
534add224c0Swanglei; CHECK-NEXT:    movfr2gr.d $a1, $fa3
535add224c0Swanglei; CHECK-NEXT:    xvinsgr2vr.d $xr0, $a1, 3
536add224c0Swanglei; CHECK-NEXT:    xvst $xr0, $a0, 0
537add224c0Swanglei; CHECK-NEXT:    ret
538add224c0Swangleientry:
539add224c0Swanglei  %ins0 = insertelement <4 x double> undef, double %a0, i32 0
540add224c0Swanglei  %ins1 = insertelement <4 x double> %ins0, double %a1, i32 1
541add224c0Swanglei  %ins2 = insertelement <4 x double> %ins1, double %a2, i32 2
542add224c0Swanglei  %ins3 = insertelement <4 x double> %ins2, double %a3, i32 3
543add224c0Swanglei  store <4 x double> %ins3, ptr %dst
544add224c0Swanglei  ret void
545add224c0Swanglei}
546