1; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck -check-prefix=MIPS32 %s
2
3@v4i8 = global <4 x i8> <i8 0, i8 0, i8 0, i8 0>
4@v16i8 = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
5@v8i16 = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
6@v4i32 = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>
7@v2i64 = global <2 x i64> <i64 0, i64 0>
8@i64 = global i64 0
9
10define void @const_v16i8() nounwind {
11  ; MIPS32: const_v16i8:
12
13  store volatile <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, <16 x i8>*@v16i8
14  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 0
15
16  store volatile <16 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>, <16 x i8>*@v16i8
17  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 1
18
19  store volatile <16 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 31>, <16 x i8>*@v16i8
20  ; MIPS32: ld.b  [[R1:\$w[0-9]+]], %lo(
21
22  store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6>, <16 x i8>*@v16i8
23  ; MIPS32: ld.b  [[R1:\$w[0-9]+]], %lo(
24
25  store volatile <16 x i8> <i8 1, i8 2, i8 1, i8 2, i8 1, i8 2, i8 1, i8 2, i8 1, i8 2, i8 1, i8 2, i8 1, i8 2, i8 1, i8 2>, <16 x i8>*@v16i8
26  ; MIPS32: ldi.h [[R1:\$w[0-9]+]], 258
27
28  store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4>, <16 x i8>*@v16i8
29  ; MIPS32-DAG: lui [[R2:\$[0-9]+]], 258
30  ; MIPS32-DAG: ori [[R2]], [[R2]], 772
31  ; MIPS32-DAG: fill.w [[R1:\$w[0-9]+]], [[R2]]
32
33  store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, <16 x i8>*@v16i8
34  ; MIPS32: ld.b  [[R1:\$w[0-9]+]], %lo(
35
36  ret void
37  ; MIPS32: .size const_v16i8
38}
39
40define void @const_v8i16() nounwind {
41  ; MIPS32: const_v8i16:
42
43  store volatile <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, <8 x i16>*@v8i16
44  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 0
45
46  store volatile <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <8 x i16>*@v8i16
47  ; MIPS32: ldi.h [[R1:\$w[0-9]+]], 1
48
49  store volatile <8 x i16> <i16 1, i16 1, i16 1, i16 2, i16 1, i16 1, i16 1, i16 31>, <8 x i16>*@v8i16
50  ; MIPS32: ld.h  [[R1:\$w[0-9]+]], %lo(
51
52  store volatile <8 x i16> <i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028>, <8 x i16>*@v8i16
53  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 4
54
55  store volatile <8 x i16> <i16 1, i16 2, i16 1, i16 2, i16 1, i16 2, i16 1, i16 2>, <8 x i16>*@v8i16
56  ; MIPS32-DAG: lui [[R2:\$[0-9]+]], 1
57  ; MIPS32-DAG: ori [[R2]], [[R2]], 2
58  ; MIPS32-DAG: fill.w [[R1:\$w[0-9]+]], [[R2]]
59
60  store volatile <8 x i16> <i16 1, i16 2, i16 3, i16 4, i16 1, i16 2, i16 3, i16 4>, <8 x i16>*@v8i16
61  ; MIPS32: ld.h  [[R1:\$w[0-9]+]], %lo(
62
63  ret void
64  ; MIPS32: .size const_v8i16
65}
66
67define void @const_v4i32() nounwind {
68  ; MIPS32: const_v4i32:
69
70  store volatile <4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32>*@v4i32
71  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 0
72
73  store volatile <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>*@v4i32
74  ; MIPS32: ldi.w [[R1:\$w[0-9]+]], 1
75
76  store volatile <4 x i32> <i32 1, i32 1, i32 1, i32 31>, <4 x i32>*@v4i32
77  ; MIPS32: ld.w  [[R1:\$w[0-9]+]], %lo(
78
79  store volatile <4 x i32> <i32 16843009, i32 16843009, i32 16843009, i32 16843009>, <4 x i32>*@v4i32
80  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 1
81
82  store volatile <4 x i32> <i32 65537, i32 65537, i32 65537, i32 65537>, <4 x i32>*@v4i32
83  ; MIPS32: ldi.h [[R1:\$w[0-9]+]], 1
84
85  store volatile <4 x i32> <i32 1, i32 2, i32 1, i32 2>, <4 x i32>*@v4i32
86  ; MIPS32: ld.w  [[R1:\$w[0-9]+]], %lo(
87
88  store volatile <4 x i32> <i32 3, i32 4, i32 5, i32 6>, <4 x i32>*@v4i32
89  ; MIPS32: ld.w  [[R1:\$w[0-9]+]], %lo(
90
91  ret void
92  ; MIPS32: .size const_v4i32
93}
94
95define void @const_v2i64() nounwind {
96  ; MIPS32: const_v2i64:
97
98  store volatile <2 x i64> <i64 0, i64 0>, <2 x i64>*@v2i64
99  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 0
100
101  store volatile <2 x i64> <i64 72340172838076673, i64 72340172838076673>, <2 x i64>*@v2i64
102  ; MIPS32: ldi.b [[R1:\$w[0-9]+]], 1
103
104  store volatile <2 x i64> <i64 281479271743489, i64 281479271743489>, <2 x i64>*@v2i64
105  ; MIPS32: ldi.h [[R1:\$w[0-9]+]], 1
106
107  store volatile <2 x i64> <i64 4294967297, i64 4294967297>, <2 x i64>*@v2i64
108  ; MIPS32: ldi.w [[R1:\$w[0-9]+]], 1
109
110  store volatile <2 x i64> <i64 1, i64 1>, <2 x i64>*@v2i64
111  ; MIPS32: ldi.d [[R1:\$w[0-9]+]], 1
112
113  store volatile <2 x i64> <i64 1, i64 31>, <2 x i64>*@v2i64
114  ; MIPS32: ld.w  [[R1:\$w[0-9]+]], %lo(
115
116  store volatile <2 x i64> <i64 3, i64 4>, <2 x i64>*@v2i64
117  ; MIPS32: ld.w  [[R1:\$w[0-9]+]], %lo(
118
119  ret void
120  ; MIPS32: .size const_v2i64
121}
122
123define void @nonconst_v16i8(i8 %a, i8 %b, i8 %c, i8 %d, i8 %e, i8 %f, i8 %g, i8 %h) nounwind {
124  ; MIPS32: nonconst_v16i8:
125
126  %1 = insertelement <16 x i8> undef, i8 %a, i32 0
127  %2 = insertelement <16 x i8> %1, i8 %b, i32 1
128  %3 = insertelement <16 x i8> %2, i8 %c, i32 2
129  %4 = insertelement <16 x i8> %3, i8 %d, i32 3
130  %5 = insertelement <16 x i8> %4, i8 %e, i32 4
131  %6 = insertelement <16 x i8> %5, i8 %f, i32 5
132  %7 = insertelement <16 x i8> %6, i8 %g, i32 6
133  %8 = insertelement <16 x i8> %7, i8 %h, i32 7
134  %9 = insertelement <16 x i8> %8, i8 %h, i32 8
135  %10 = insertelement <16 x i8> %9, i8 %h, i32 9
136  %11 = insertelement <16 x i8> %10, i8 %h, i32 10
137  %12 = insertelement <16 x i8> %11, i8 %h, i32 11
138  %13 = insertelement <16 x i8> %12, i8 %h, i32 12
139  %14 = insertelement <16 x i8> %13, i8 %h, i32 13
140  %15 = insertelement <16 x i8> %14, i8 %h, i32 14
141  %16 = insertelement <16 x i8> %15, i8 %h, i32 15
142  ; MIPS32-DAG: insert.b [[R1:\$w[0-9]+]][0], $4
143  ; MIPS32-DAG: insert.b [[R1]][1], $5
144  ; MIPS32-DAG: insert.b [[R1]][2], $6
145  ; MIPS32-DAG: insert.b [[R1]][3], $7
146  ; MIPS32-DAG: lbu [[R2:\$[0-9]+]], 19($sp)
147  ; MIPS32-DAG: insert.b [[R1]][4], [[R2]]
148  ; MIPS32-DAG: lbu [[R3:\$[0-9]+]], 23($sp)
149  ; MIPS32-DAG: insert.b [[R1]][5], [[R3]]
150  ; MIPS32-DAG: lbu [[R4:\$[0-9]+]], 27($sp)
151  ; MIPS32-DAG: insert.b [[R1]][6], [[R4]]
152  ; MIPS32-DAG: lbu [[R5:\$[0-9]+]], 31($sp)
153  ; MIPS32-DAG: insert.b [[R1]][7], [[R5]]
154  ; MIPS32-DAG: insert.b [[R1]][8], [[R5]]
155  ; MIPS32-DAG: insert.b [[R1]][9], [[R5]]
156  ; MIPS32-DAG: insert.b [[R1]][10], [[R5]]
157  ; MIPS32-DAG: insert.b [[R1]][11], [[R5]]
158  ; MIPS32-DAG: insert.b [[R1]][12], [[R5]]
159  ; MIPS32-DAG: insert.b [[R1]][13], [[R5]]
160  ; MIPS32-DAG: insert.b [[R1]][14], [[R5]]
161  ; MIPS32-DAG: insert.b [[R1]][15], [[R5]]
162
163  store volatile <16 x i8> %16, <16 x i8>*@v16i8
164
165  ret void
166  ; MIPS32: .size nonconst_v16i8
167}
168
169define void @nonconst_v8i16(i16 %a, i16 %b, i16 %c, i16 %d, i16 %e, i16 %f, i16 %g, i16 %h) nounwind {
170  ; MIPS32: nonconst_v8i16:
171
172  %1 = insertelement <8 x i16> undef, i16 %a, i32 0
173  %2 = insertelement <8 x i16> %1, i16 %b, i32 1
174  %3 = insertelement <8 x i16> %2, i16 %c, i32 2
175  %4 = insertelement <8 x i16> %3, i16 %d, i32 3
176  %5 = insertelement <8 x i16> %4, i16 %e, i32 4
177  %6 = insertelement <8 x i16> %5, i16 %f, i32 5
178  %7 = insertelement <8 x i16> %6, i16 %g, i32 6
179  %8 = insertelement <8 x i16> %7, i16 %h, i32 7
180  ; MIPS32-DAG: insert.h [[R1:\$w[0-9]+]][0], $4
181  ; MIPS32-DAG: insert.h [[R1]][1], $5
182  ; MIPS32-DAG: insert.h [[R1]][2], $6
183  ; MIPS32-DAG: insert.h [[R1]][3], $7
184  ; MIPS32-DAG: lhu [[R2:\$[0-9]+]], 18($sp)
185  ; MIPS32-DAG: insert.h [[R1]][4], [[R2]]
186  ; MIPS32-DAG: lhu [[R2:\$[0-9]+]], 22($sp)
187  ; MIPS32-DAG: insert.h [[R1]][5], [[R2]]
188  ; MIPS32-DAG: lhu [[R2:\$[0-9]+]], 26($sp)
189  ; MIPS32-DAG: insert.h [[R1]][6], [[R2]]
190  ; MIPS32-DAG: lhu [[R2:\$[0-9]+]], 30($sp)
191  ; MIPS32-DAG: insert.h [[R1]][7], [[R2]]
192
193  store volatile <8 x i16> %8, <8 x i16>*@v8i16
194
195  ret void
196  ; MIPS32: .size nonconst_v8i16
197}
198
199define void @nonconst_v4i32(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
200  ; MIPS32: nonconst_v4i32:
201
202  %1 = insertelement <4 x i32> undef, i32 %a, i32 0
203  %2 = insertelement <4 x i32> %1, i32 %b, i32 1
204  %3 = insertelement <4 x i32> %2, i32 %c, i32 2
205  %4 = insertelement <4 x i32> %3, i32 %d, i32 3
206  ; MIPS32: insert.w [[R1:\$w[0-9]+]][0], $4
207  ; MIPS32: insert.w [[R1]][1], $5
208  ; MIPS32: insert.w [[R1]][2], $6
209  ; MIPS32: insert.w [[R1]][3], $7
210
211  store volatile <4 x i32> %4, <4 x i32>*@v4i32
212
213  ret void
214  ; MIPS32: .size nonconst_v4i32
215}
216
217define void @nonconst_v2i64(i64 %a, i64 %b) nounwind {
218  ; MIPS32: nonconst_v2i64:
219
220  %1 = insertelement <2 x i64> undef, i64 %a, i32 0
221  %2 = insertelement <2 x i64> %1, i64 %b, i32 1
222  ; MIPS32: insert.w [[R1:\$w[0-9]+]][0], $4
223  ; MIPS32: insert.w [[R1]][1], $5
224  ; MIPS32: insert.w [[R1]][2], $6
225  ; MIPS32: insert.w [[R1]][3], $7
226
227  store volatile <2 x i64> %2, <2 x i64>*@v2i64
228
229  ret void
230  ; MIPS32: .size nonconst_v2i64
231}
232
233define i32 @extract_sext_v16i8() nounwind {
234  ; MIPS32: extract_sext_v16i8:
235
236  %1 = load <16 x i8>* @v16i8
237  ; MIPS32-DAG: ld.b [[R1:\$w[0-9]+]],
238
239  %2 = add <16 x i8> %1, %1
240  ; MIPS32-DAG: addv.b [[R2:\$w[0-9]+]], [[R1]], [[R1]]
241
242  %3 = extractelement <16 x i8> %2, i32 1
243  %4 = sext i8 %3 to i32
244  ; MIPS32-DAG: copy_s.b [[R3:\$[0-9]+]], [[R1]][1]
245  ; MIPS32-NOT: sll
246  ; MIPS32-NOT: sra
247
248  ret i32 %4
249  ; MIPS32: .size extract_sext_v16i8
250}
251
252define i32 @extract_sext_v8i16() nounwind {
253  ; MIPS32: extract_sext_v8i16:
254
255  %1 = load <8 x i16>* @v8i16
256  ; MIPS32-DAG: ld.h [[R1:\$w[0-9]+]],
257
258  %2 = add <8 x i16> %1, %1
259  ; MIPS32-DAG: addv.h [[R2:\$w[0-9]+]], [[R1]], [[R1]]
260
261  %3 = extractelement <8 x i16> %2, i32 1
262  %4 = sext i16 %3 to i32
263  ; MIPS32-DAG: copy_s.h [[R3:\$[0-9]+]], [[R1]][1]
264  ; MIPS32-NOT: sll
265  ; MIPS32-NOT: sra
266
267  ret i32 %4
268  ; MIPS32: .size extract_sext_v8i16
269}
270
271define i32 @extract_sext_v4i32() nounwind {
272  ; MIPS32: extract_sext_v4i32:
273
274  %1 = load <4 x i32>* @v4i32
275  ; MIPS32-DAG: ld.w [[R1:\$w[0-9]+]],
276
277  %2 = add <4 x i32> %1, %1
278  ; MIPS32-DAG: addv.w [[R2:\$w[0-9]+]], [[R1]], [[R1]]
279
280  %3 = extractelement <4 x i32> %2, i32 1
281  ; MIPS32-DAG: copy_s.w [[R3:\$[0-9]+]], [[R1]][1]
282
283  ret i32 %3
284  ; MIPS32: .size extract_sext_v4i32
285}
286
287define i64 @extract_sext_v2i64() nounwind {
288  ; MIPS32: extract_sext_v2i64:
289
290  %1 = load <2 x i64>* @v2i64
291  ; MIPS32-DAG: ld.d [[R1:\$w[0-9]+]],
292
293  %2 = add <2 x i64> %1, %1
294  ; MIPS32-DAG: addv.d [[R2:\$w[0-9]+]], [[R1]], [[R1]]
295
296  %3 = extractelement <2 x i64> %2, i32 1
297  ; MIPS32-DAG: copy_s.w [[R3:\$[0-9]+]], [[R1]][2]
298  ; MIPS32-DAG: copy_s.w [[R4:\$[0-9]+]], [[R1]][3]
299  ; MIPS32-NOT: sll
300  ; MIPS32-NOT: sra
301
302  ret i64 %3
303  ; MIPS32: .size extract_sext_v2i64
304}
305
306define i32 @extract_zext_v16i8() nounwind {
307  ; MIPS32: extract_zext_v16i8:
308
309  %1 = load <16 x i8>* @v16i8
310  ; MIPS32-DAG: ld.b [[R1:\$w[0-9]+]],
311
312  %2 = add <16 x i8> %1, %1
313  ; MIPS32-DAG: addv.b [[R2:\$w[0-9]+]], [[R1]], [[R1]]
314
315  %3 = extractelement <16 x i8> %2, i32 1
316  %4 = zext i8 %3 to i32
317  ; MIPS32-DAG: copy_u.b [[R3:\$[0-9]+]], [[R1]][1]
318  ; MIPS32-NOT: andi
319
320  ret i32 %4
321  ; MIPS32: .size extract_zext_v16i8
322}
323
324define i32 @extract_zext_v8i16() nounwind {
325  ; MIPS32: extract_zext_v8i16:
326
327  %1 = load <8 x i16>* @v8i16
328  ; MIPS32-DAG: ld.h [[R1:\$w[0-9]+]],
329
330  %2 = add <8 x i16> %1, %1
331  ; MIPS32-DAG: addv.h [[R2:\$w[0-9]+]], [[R1]], [[R1]]
332
333  %3 = extractelement <8 x i16> %2, i32 1
334  %4 = zext i16 %3 to i32
335  ; MIPS32-DAG: copy_u.h [[R3:\$[0-9]+]], [[R1]][1]
336  ; MIPS32-NOT: andi
337
338  ret i32 %4
339  ; MIPS32: .size extract_zext_v8i16
340}
341
342define i32 @extract_zext_v4i32() nounwind {
343  ; MIPS32: extract_zext_v4i32:
344
345  %1 = load <4 x i32>* @v4i32
346  ; MIPS32-DAG: ld.w [[R1:\$w[0-9]+]],
347
348  %2 = add <4 x i32> %1, %1
349  ; MIPS32-DAG: addv.w [[R2:\$w[0-9]+]], [[R1]], [[R1]]
350
351  %3 = extractelement <4 x i32> %2, i32 1
352  ; MIPS32-DAG: copy_{{[su]}}.w [[R3:\$[0-9]+]], [[R1]][1]
353
354  ret i32 %3
355  ; MIPS32: .size extract_zext_v4i32
356}
357
358define i64 @extract_zext_v2i64() nounwind {
359  ; MIPS32: extract_zext_v2i64:
360
361  %1 = load <2 x i64>* @v2i64
362  ; MIPS32-DAG: ld.d [[R1:\$w[0-9]+]],
363
364  %2 = add <2 x i64> %1, %1
365  ; MIPS32-DAG: addv.d [[R2:\$w[0-9]+]], [[R1]], [[R1]]
366
367  %3 = extractelement <2 x i64> %2, i32 1
368  ; MIPS32-DAG: copy_{{[su]}}.w [[R3:\$[0-9]+]], [[R1]][2]
369  ; MIPS32-DAG: copy_{{[su]}}.w [[R4:\$[0-9]+]], [[R1]][3]
370  ; MIPS32-NOT: andi
371
372  ret i64 %3
373  ; MIPS32: .size extract_zext_v2i64
374}
375
376define void @insert_v16i8(i32 %a) nounwind {
377  ; MIPS32: insert_v16i8:
378
379  %1 = load <16 x i8>* @v16i8
380  ; MIPS32-DAG: ld.b [[R1:\$w[0-9]+]],
381
382  %a2 = trunc i32 %a to i8
383  %a3 = sext i8 %a2 to i32
384  %a4 = trunc i32 %a3 to i8
385  ; MIPS32-NOT: andi
386  ; MIPS32-NOT: sra
387
388  %2 = insertelement <16 x i8> %1, i8 %a4, i32 1
389  ; MIPS32-DAG: insert.b [[R1]][1], $4
390
391  store <16 x i8> %2, <16 x i8>* @v16i8
392  ; MIPS32-DAG: st.b [[R1]]
393
394  ret void
395  ; MIPS32: .size insert_v16i8
396}
397
398define void @insert_v8i16(i32 %a) nounwind {
399  ; MIPS32: insert_v8i16:
400
401  %1 = load <8 x i16>* @v8i16
402  ; MIPS32-DAG: ld.h [[R1:\$w[0-9]+]],
403
404  %a2 = trunc i32 %a to i16
405  %a3 = sext i16 %a2 to i32
406  %a4 = trunc i32 %a3 to i16
407  ; MIPS32-NOT: andi
408  ; MIPS32-NOT: sra
409
410  %2 = insertelement <8 x i16> %1, i16 %a4, i32 1
411  ; MIPS32-DAG: insert.h [[R1]][1], $4
412
413  store <8 x i16> %2, <8 x i16>* @v8i16
414  ; MIPS32-DAG: st.h [[R1]]
415
416  ret void
417  ; MIPS32: .size insert_v8i16
418}
419
420define void @insert_v4i32(i32 %a) nounwind {
421  ; MIPS32: insert_v4i32:
422
423  %1 = load <4 x i32>* @v4i32
424  ; MIPS32-DAG: ld.w [[R1:\$w[0-9]+]],
425
426  ; MIPS32-NOT: andi
427  ; MIPS32-NOT: sra
428
429  %2 = insertelement <4 x i32> %1, i32 %a, i32 1
430  ; MIPS32-DAG: insert.w [[R1]][1], $4
431
432  store <4 x i32> %2, <4 x i32>* @v4i32
433  ; MIPS32-DAG: st.w [[R1]]
434
435  ret void
436  ; MIPS32: .size insert_v4i32
437}
438
439define void @insert_v2i64(i64 %a) nounwind {
440  ; MIPS32: insert_v2i64:
441
442  %1 = load <2 x i64>* @v2i64
443  ; MIPS32-DAG: ld.w [[R1:\$w[0-9]+]],
444
445  ; MIPS32-NOT: andi
446  ; MIPS32-NOT: sra
447
448  %2 = insertelement <2 x i64> %1, i64 %a, i32 1
449  ; MIPS32-DAG: insert.w [[R1]][2], $4
450  ; MIPS32-DAG: insert.w [[R1]][3], $5
451
452  store <2 x i64> %2, <2 x i64>* @v2i64
453  ; MIPS32-DAG: st.w [[R1]]
454
455  ret void
456  ; MIPS32: .size insert_v2i64
457}
458
459define void @truncstore() nounwind {
460  ; MIPS32: truncstore:
461
462  store volatile <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8>*@v4i8
463  ; TODO: What code should be emitted?
464
465  ret void
466  ; MIPS32: .size truncstore
467}
468