Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Mips / cconv / illegal-vectors.ll
blob5cb5972f6775368013a677089358460be8e653fd
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=mips64 < %s | FileCheck %s --check-prefix=MIPS64
3 ; RUN: llc -mtriple=mips < %s | FileCheck %s --check-prefix=MIPS32
5 define void @arg_v1i32(<1 x i32> %vec, ptr %p) {
6 ; MIPS64-LABEL: arg_v1i32:
7 ; MIPS64:       # %bb.0:
8 ; MIPS64-NEXT:    jr $ra
9 ; MIPS64-NEXT:    sw $4, 0($5)
11 ; MIPS32-LABEL: arg_v1i32:
12 ; MIPS32:       # %bb.0:
13 ; MIPS32-NEXT:    jr $ra
14 ; MIPS32-NEXT:    sw $4, 0($5)
15   store <1 x i32> %vec, ptr %p
16   ret void
19 define <1 x i32> @ret_v1i32(ptr %p) {
20 ; MIPS64-LABEL: ret_v1i32:
21 ; MIPS64:       # %bb.0:
22 ; MIPS64-NEXT:    lw $2, 0($4)
23 ; MIPS64-NEXT:    jr $ra
24 ; MIPS64-NEXT:    nop
26 ; MIPS32-LABEL: ret_v1i32:
27 ; MIPS32:       # %bb.0:
28 ; MIPS32-NEXT:    lw $2, 0($4)
29 ; MIPS32-NEXT:    jr $ra
30 ; MIPS32-NEXT:    nop
31   %v = load <1 x i32>, ptr %p
32   ret <1 x i32> %v
35 define void @call_v1i32(ptr %p) nounwind {
36 ; MIPS64-LABEL: call_v1i32:
37 ; MIPS64:       # %bb.0:
38 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
39 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
40 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
41 ; MIPS64-NEXT:    move $16, $4
42 ; MIPS64-NEXT:    lw $4, 0($4)
43 ; MIPS64-NEXT:    jal arg_v1i32
44 ; MIPS64-NEXT:    nop
45 ; MIPS64-NEXT:    jal ret_v1i32
46 ; MIPS64-NEXT:    nop
47 ; MIPS64-NEXT:    sw $2, 0($16)
48 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
49 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
50 ; MIPS64-NEXT:    jr $ra
51 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
53 ; MIPS32-LABEL: call_v1i32:
54 ; MIPS32:       # %bb.0:
55 ; MIPS32-NEXT:    addiu $sp, $sp, -24
56 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
57 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
58 ; MIPS32-NEXT:    move $16, $4
59 ; MIPS32-NEXT:    lw $4, 0($4)
60 ; MIPS32-NEXT:    jal arg_v1i32
61 ; MIPS32-NEXT:    nop
62 ; MIPS32-NEXT:    jal ret_v1i32
63 ; MIPS32-NEXT:    nop
64 ; MIPS32-NEXT:    sw $2, 0($16)
65 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
66 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
67 ; MIPS32-NEXT:    jr $ra
68 ; MIPS32-NEXT:    addiu $sp, $sp, 24
69   %v1 = load <1 x i32>, ptr %p
70   call void @arg_v1i32(<1 x i32> %v1)
71   %v2 = call <1 x i32> @ret_v1i32()
72   store <1 x i32> %v2, ptr %p
73   ret void
76 define void @arg_v2i32(<2 x i32> %vec, ptr %p) {
77 ; MIPS64-LABEL: arg_v2i32:
78 ; MIPS64:       # %bb.0:
79 ; MIPS64-NEXT:    jr $ra
80 ; MIPS64-NEXT:    sd $4, 0($5)
82 ; MIPS32-LABEL: arg_v2i32:
83 ; MIPS32:       # %bb.0:
84 ; MIPS32-NEXT:    sw $5, 4($6)
85 ; MIPS32-NEXT:    jr $ra
86 ; MIPS32-NEXT:    sw $4, 0($6)
87   store <2 x i32> %vec, ptr %p
88   ret void
91 define <2 x i32> @ret_v2i32(ptr %p) {
92 ; MIPS64-LABEL: ret_v2i32:
93 ; MIPS64:       # %bb.0:
94 ; MIPS64-NEXT:    ld $2, 0($4)
95 ; MIPS64-NEXT:    jr $ra
96 ; MIPS64-NEXT:    nop
98 ; MIPS32-LABEL: ret_v2i32:
99 ; MIPS32:       # %bb.0:
100 ; MIPS32-NEXT:    lw $2, 0($4)
101 ; MIPS32-NEXT:    lw $3, 4($4)
102 ; MIPS32-NEXT:    jr $ra
103 ; MIPS32-NEXT:    nop
104   %v = load <2 x i32>, ptr %p
105   ret <2 x i32> %v
108 define void @call_v2i32(ptr %p) nounwind {
109 ; MIPS64-LABEL: call_v2i32:
110 ; MIPS64:       # %bb.0:
111 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
112 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
113 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
114 ; MIPS64-NEXT:    move $16, $4
115 ; MIPS64-NEXT:    ld $4, 0($4)
116 ; MIPS64-NEXT:    jal arg_v2i32
117 ; MIPS64-NEXT:    nop
118 ; MIPS64-NEXT:    jal ret_v2i32
119 ; MIPS64-NEXT:    nop
120 ; MIPS64-NEXT:    sd $2, 0($16)
121 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
122 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
123 ; MIPS64-NEXT:    jr $ra
124 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
126 ; MIPS32-LABEL: call_v2i32:
127 ; MIPS32:       # %bb.0:
128 ; MIPS32-NEXT:    addiu $sp, $sp, -24
129 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
130 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
131 ; MIPS32-NEXT:    move $16, $4
132 ; MIPS32-NEXT:    lw $5, 4($4)
133 ; MIPS32-NEXT:    lw $4, 0($4)
134 ; MIPS32-NEXT:    jal arg_v2i32
135 ; MIPS32-NEXT:    nop
136 ; MIPS32-NEXT:    jal ret_v2i32
137 ; MIPS32-NEXT:    nop
138 ; MIPS32-NEXT:    sw $3, 4($16)
139 ; MIPS32-NEXT:    sw $2, 0($16)
140 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
141 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
142 ; MIPS32-NEXT:    jr $ra
143 ; MIPS32-NEXT:    addiu $sp, $sp, 24
144   %v1 = load <2 x i32>, ptr %p
145   call void @arg_v2i32(<2 x i32> %v1)
146   %v2 = call <2 x i32> @ret_v2i32()
147   store <2 x i32> %v2, ptr %p
148   ret void
151 define <3 x i32> @arg_v3i32(<3 x i32> %vec, ptr %p) {
152 ; MIPS64-LABEL: arg_v3i32:
153 ; MIPS64:       # %bb.0:
154 ; MIPS64-NEXT:    daddiu $1, $zero, 1
155 ; MIPS64-NEXT:    dsll $1, $1, 32
156 ; MIPS64-NEXT:    daddiu $2, $1, -1
157 ; MIPS64-NEXT:    sll $1, $6, 0
158 ; MIPS64-NEXT:    sw $1, 8($7)
159 ; MIPS64-NEXT:    and $2, $5, $2
160 ; MIPS64-NEXT:    dsll $3, $4, 32
161 ; MIPS64-NEXT:    or $2, $2, $3
162 ; MIPS64-NEXT:    sd $2, 0($7)
163 ; MIPS64-NEXT:    sll $2, $4, 0
164 ; MIPS64-NEXT:    sll $3, $5, 0
165 ; MIPS64-NEXT:    jr $ra
166 ; MIPS64-NEXT:    move $4, $1
168 ; MIPS32-LABEL: arg_v3i32:
169 ; MIPS32:       # %bb.0:
170 ; MIPS32-NEXT:    sw $6, 8($7)
171 ; MIPS32-NEXT:    sw $5, 4($7)
172 ; MIPS32-NEXT:    sw $4, 0($7)
173 ; MIPS32-NEXT:    move $2, $4
174 ; MIPS32-NEXT:    move $3, $5
175 ; MIPS32-NEXT:    jr $ra
176 ; MIPS32-NEXT:    move $4, $6
177   store <3 x i32> %vec, ptr %p
178   ret <3 x i32> %vec
181 define <3 x i32> @ret_v3i32(ptr %p) {
182 ; MIPS64-LABEL: ret_v3i32:
183 ; MIPS64:       # %bb.0:
184 ; MIPS64-NEXT:    lw $1, 8($4)
185 ; MIPS64-NEXT:    ld $2, 0($4)
186 ; MIPS64-NEXT:    sll $3, $2, 0
187 ; MIPS64-NEXT:    dsrl $2, $2, 32
188 ; MIPS64-NEXT:    sll $2, $2, 0
189 ; MIPS64-NEXT:    jr $ra
190 ; MIPS64-NEXT:    move $4, $1
192 ; MIPS32-LABEL: ret_v3i32:
193 ; MIPS32:       # %bb.0:
194 ; MIPS32-NEXT:    lw $2, 0($4)
195 ; MIPS32-NEXT:    lw $3, 4($4)
196 ; MIPS32-NEXT:    lw $4, 8($4)
197 ; MIPS32-NEXT:    jr $ra
198 ; MIPS32-NEXT:    nop
199   %v = load <3 x i32>, ptr %p
200   ret <3 x i32> %v
203 define void @call_v3i32(ptr %p) nounwind {
204 ; MIPS64-LABEL: call_v3i32:
205 ; MIPS64:       # %bb.0:
206 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
207 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
208 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
209 ; MIPS64-NEXT:    move $16, $4
210 ; MIPS64-NEXT:    lw $6, 8($4)
211 ; MIPS64-NEXT:    ld $5, 0($4)
212 ; MIPS64-NEXT:    jal arg_v3i32
213 ; MIPS64-NEXT:    dsrl $4, $5, 32
214 ; MIPS64-NEXT:    jal ret_v3i32
215 ; MIPS64-NEXT:    nop
216 ; MIPS64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
217 ; MIPS64-NEXT:    sw $4, 8($16)
218 ; MIPS64-NEXT:    dsll $1, $2, 32
219 ; MIPS64-NEXT:    dsll $2, $3, 32
220 ; MIPS64-NEXT:    dsrl $2, $2, 32
221 ; MIPS64-NEXT:    or $1, $2, $1
222 ; MIPS64-NEXT:    sd $1, 0($16)
223 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
224 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
225 ; MIPS64-NEXT:    jr $ra
226 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
228 ; MIPS32-LABEL: call_v3i32:
229 ; MIPS32:       # %bb.0:
230 ; MIPS32-NEXT:    addiu $sp, $sp, -24
231 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
232 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
233 ; MIPS32-NEXT:    move $16, $4
234 ; MIPS32-NEXT:    lw $6, 8($4)
235 ; MIPS32-NEXT:    lw $5, 4($4)
236 ; MIPS32-NEXT:    lw $4, 0($4)
237 ; MIPS32-NEXT:    jal arg_v3i32
238 ; MIPS32-NEXT:    nop
239 ; MIPS32-NEXT:    jal ret_v3i32
240 ; MIPS32-NEXT:    nop
241 ; MIPS32-NEXT:    sw $4, 8($16)
242 ; MIPS32-NEXT:    sw $3, 4($16)
243 ; MIPS32-NEXT:    sw $2, 0($16)
244 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
245 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
246 ; MIPS32-NEXT:    jr $ra
247 ; MIPS32-NEXT:    addiu $sp, $sp, 24
248   %v1 = load <3 x i32>, ptr %p
249   call void @arg_v3i32(<3 x i32> %v1)
250   %v2 = call <3 x i32> @ret_v3i32()
251   store <3 x i32> %v2, ptr %p
252   ret void
255 define void @arg_v4i32(<4 x i32> %vec, ptr %p) {
256 ; MIPS64-LABEL: arg_v4i32:
257 ; MIPS64:       # %bb.0:
258 ; MIPS64-NEXT:    sd $5, 8($6)
259 ; MIPS64-NEXT:    jr $ra
260 ; MIPS64-NEXT:    sd $4, 0($6)
262 ; MIPS32-LABEL: arg_v4i32:
263 ; MIPS32:       # %bb.0:
264 ; MIPS32-NEXT:    lw $1, 16($sp)
265 ; MIPS32-NEXT:    sw $7, 12($1)
266 ; MIPS32-NEXT:    sw $6, 8($1)
267 ; MIPS32-NEXT:    sw $5, 4($1)
268 ; MIPS32-NEXT:    jr $ra
269 ; MIPS32-NEXT:    sw $4, 0($1)
270   store <4 x i32> %vec, ptr %p
271   ret void
274 define <4 x i32> @ret_v4i32(ptr %p) {
275 ; MIPS64-LABEL: ret_v4i32:
276 ; MIPS64:       # %bb.0:
277 ; MIPS64-NEXT:    ld $2, 0($4)
278 ; MIPS64-NEXT:    ld $3, 8($4)
279 ; MIPS64-NEXT:    jr $ra
280 ; MIPS64-NEXT:    nop
282 ; MIPS32-LABEL: ret_v4i32:
283 ; MIPS32:       # %bb.0:
284 ; MIPS32-NEXT:    lw $2, 0($4)
285 ; MIPS32-NEXT:    lw $3, 4($4)
286 ; MIPS32-NEXT:    lw $1, 8($4)
287 ; MIPS32-NEXT:    lw $5, 12($4)
288 ; MIPS32-NEXT:    jr $ra
289 ; MIPS32-NEXT:    move $4, $1
290   %v = load <4 x i32>, ptr %p
291   ret <4 x i32> %v
294 define void @call_v4i32(ptr %p) nounwind {
295 ; MIPS64-LABEL: call_v4i32:
296 ; MIPS64:       # %bb.0:
297 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
298 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
299 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
300 ; MIPS64-NEXT:    move $16, $4
301 ; MIPS64-NEXT:    ld $5, 8($4)
302 ; MIPS64-NEXT:    ld $4, 0($4)
303 ; MIPS64-NEXT:    jal arg_v4i32
304 ; MIPS64-NEXT:    nop
305 ; MIPS64-NEXT:    jal ret_v4i32
306 ; MIPS64-NEXT:    nop
307 ; MIPS64-NEXT:    sd $3, 8($16)
308 ; MIPS64-NEXT:    sd $2, 0($16)
309 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
310 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
311 ; MIPS64-NEXT:    jr $ra
312 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
314 ; MIPS32-LABEL: call_v4i32:
315 ; MIPS32:       # %bb.0:
316 ; MIPS32-NEXT:    addiu $sp, $sp, -24
317 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
318 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
319 ; MIPS32-NEXT:    move $16, $4
320 ; MIPS32-NEXT:    lw $7, 12($4)
321 ; MIPS32-NEXT:    lw $6, 8($4)
322 ; MIPS32-NEXT:    lw $5, 4($4)
323 ; MIPS32-NEXT:    lw $4, 0($4)
324 ; MIPS32-NEXT:    jal arg_v4i32
325 ; MIPS32-NEXT:    nop
326 ; MIPS32-NEXT:    jal ret_v4i32
327 ; MIPS32-NEXT:    nop
328 ; MIPS32-NEXT:    sw $5, 12($16)
329 ; MIPS32-NEXT:    sw $4, 8($16)
330 ; MIPS32-NEXT:    sw $3, 4($16)
331 ; MIPS32-NEXT:    sw $2, 0($16)
332 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
333 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
334 ; MIPS32-NEXT:    jr $ra
335 ; MIPS32-NEXT:    addiu $sp, $sp, 24
336   %v1 = load <4 x i32>, ptr %p
337   call void @arg_v4i32(<4 x i32> %v1)
338   %v2 = call <4 x i32> @ret_v4i32()
339   store <4 x i32> %v2, ptr %p
340   ret void
343 define void @arg_v5i32(<5 x i32> %vec, ptr %p) {
344 ; MIPS64-LABEL: arg_v5i32:
345 ; MIPS64:       # %bb.0:
346 ; MIPS64-NEXT:    daddiu $1, $zero, 1
347 ; MIPS64-NEXT:    dsll $1, $1, 32
348 ; MIPS64-NEXT:    daddiu $1, $1, -1
349 ; MIPS64-NEXT:    and $2, $7, $1
350 ; MIPS64-NEXT:    dsll $3, $6, 32
351 ; MIPS64-NEXT:    or $2, $2, $3
352 ; MIPS64-NEXT:    sw $8, 16($9)
353 ; MIPS64-NEXT:    sd $2, 8($9)
354 ; MIPS64-NEXT:    and $1, $5, $1
355 ; MIPS64-NEXT:    dsll $2, $4, 32
356 ; MIPS64-NEXT:    or $1, $1, $2
357 ; MIPS64-NEXT:    jr $ra
358 ; MIPS64-NEXT:    sd $1, 0($9)
360 ; MIPS32-LABEL: arg_v5i32:
361 ; MIPS32:       # %bb.0:
362 ; MIPS32-NEXT:    lw $1, 20($sp)
363 ; MIPS32-NEXT:    lw $2, 16($sp)
364 ; MIPS32-NEXT:    sw $2, 16($1)
365 ; MIPS32-NEXT:    sw $7, 12($1)
366 ; MIPS32-NEXT:    sw $6, 8($1)
367 ; MIPS32-NEXT:    sw $5, 4($1)
368 ; MIPS32-NEXT:    jr $ra
369 ; MIPS32-NEXT:    sw $4, 0($1)
370   store <5 x i32> %vec, ptr %p
371   ret void
374 define <5 x i32> @ret_v5i32(ptr %p) {
375 ; MIPS64-LABEL: ret_v5i32:
376 ; MIPS64:       # %bb.0:
377 ; MIPS64-NEXT:    lw $1, 16($5)
378 ; MIPS64-NEXT:    sw $1, 16($4)
379 ; MIPS64-NEXT:    ld $1, 8($5)
380 ; MIPS64-NEXT:    sd $1, 8($4)
381 ; MIPS64-NEXT:    ld $1, 0($5)
382 ; MIPS64-NEXT:    jr $ra
383 ; MIPS64-NEXT:    sd $1, 0($4)
385 ; MIPS32-LABEL: ret_v5i32:
386 ; MIPS32:       # %bb.0:
387 ; MIPS32-NEXT:    lw $1, 12($5)
388 ; MIPS32-NEXT:    lw $2, 16($5)
389 ; MIPS32-NEXT:    sw $2, 16($4)
390 ; MIPS32-NEXT:    sw $1, 12($4)
391 ; MIPS32-NEXT:    lw $1, 8($5)
392 ; MIPS32-NEXT:    sw $1, 8($4)
393 ; MIPS32-NEXT:    lw $1, 4($5)
394 ; MIPS32-NEXT:    sw $1, 4($4)
395 ; MIPS32-NEXT:    lw $1, 0($5)
396 ; MIPS32-NEXT:    jr $ra
397 ; MIPS32-NEXT:    sw $1, 0($4)
398   %v = load <5 x i32>, ptr %p
399   ret <5 x i32> %v
402 define void @call_v5i32(ptr %p) nounwind {
403 ; MIPS64-LABEL: call_v5i32:
404 ; MIPS64:       # %bb.0:
405 ; MIPS64-NEXT:    daddiu $sp, $sp, -64
406 ; MIPS64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
407 ; MIPS64-NEXT:    sd $fp, 48($sp) # 8-byte Folded Spill
408 ; MIPS64-NEXT:    sd $16, 40($sp) # 8-byte Folded Spill
409 ; MIPS64-NEXT:    move $fp, $sp
410 ; MIPS64-NEXT:    daddiu $1, $zero, -32
411 ; MIPS64-NEXT:    and $sp, $sp, $1
412 ; MIPS64-NEXT:    move $16, $4
413 ; MIPS64-NEXT:    lw $8, 16($4)
414 ; MIPS64-NEXT:    ld $7, 8($4)
415 ; MIPS64-NEXT:    ld $5, 0($4)
416 ; MIPS64-NEXT:    dsrl $4, $5, 32
417 ; MIPS64-NEXT:    jal arg_v5i32
418 ; MIPS64-NEXT:    dsrl $6, $7, 32
419 ; MIPS64-NEXT:    jal ret_v5i32
420 ; MIPS64-NEXT:    daddiu $4, $sp, 0
421 ; MIPS64-NEXT:    lw $1, 16($sp)
422 ; MIPS64-NEXT:    ld $2, 0($sp)
423 ; MIPS64-NEXT:    sd $2, 0($16)
424 ; MIPS64-NEXT:    ld $2, 8($sp)
425 ; MIPS64-NEXT:    sd $2, 8($16)
426 ; MIPS64-NEXT:    sw $1, 16($16)
427 ; MIPS64-NEXT:    move $sp, $fp
428 ; MIPS64-NEXT:    ld $16, 40($sp) # 8-byte Folded Reload
429 ; MIPS64-NEXT:    ld $fp, 48($sp) # 8-byte Folded Reload
430 ; MIPS64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
431 ; MIPS64-NEXT:    jr $ra
432 ; MIPS64-NEXT:    daddiu $sp, $sp, 64
434 ; MIPS32-LABEL: call_v5i32:
435 ; MIPS32:       # %bb.0:
436 ; MIPS32-NEXT:    addiu $sp, $sp, -96
437 ; MIPS32-NEXT:    sw $ra, 92($sp) # 4-byte Folded Spill
438 ; MIPS32-NEXT:    sw $fp, 88($sp) # 4-byte Folded Spill
439 ; MIPS32-NEXT:    sw $16, 84($sp) # 4-byte Folded Spill
440 ; MIPS32-NEXT:    move $fp, $sp
441 ; MIPS32-NEXT:    addiu $1, $zero, -32
442 ; MIPS32-NEXT:    and $sp, $sp, $1
443 ; MIPS32-NEXT:    move $16, $4
444 ; MIPS32-NEXT:    lw $7, 12($4)
445 ; MIPS32-NEXT:    lw $6, 8($4)
446 ; MIPS32-NEXT:    lw $5, 4($4)
447 ; MIPS32-NEXT:    lw $4, 0($4)
448 ; MIPS32-NEXT:    lw $1, 16($16)
449 ; MIPS32-NEXT:    jal arg_v5i32
450 ; MIPS32-NEXT:    sw $1, 16($sp)
451 ; MIPS32-NEXT:    jal ret_v5i32
452 ; MIPS32-NEXT:    addiu $4, $sp, 32
453 ; MIPS32-NEXT:    lw $1, 36($sp)
454 ; MIPS32-NEXT:    lw $2, 32($sp)
455 ; MIPS32-NEXT:    sw $2, 0($16)
456 ; MIPS32-NEXT:    sw $1, 4($16)
457 ; MIPS32-NEXT:    lw $1, 40($sp)
458 ; MIPS32-NEXT:    sw $1, 8($16)
459 ; MIPS32-NEXT:    lw $1, 44($sp)
460 ; MIPS32-NEXT:    sw $1, 12($16)
461 ; MIPS32-NEXT:    lw $1, 48($sp)
462 ; MIPS32-NEXT:    sw $1, 16($16)
463 ; MIPS32-NEXT:    move $sp, $fp
464 ; MIPS32-NEXT:    lw $16, 84($sp) # 4-byte Folded Reload
465 ; MIPS32-NEXT:    lw $fp, 88($sp) # 4-byte Folded Reload
466 ; MIPS32-NEXT:    lw $ra, 92($sp) # 4-byte Folded Reload
467 ; MIPS32-NEXT:    jr $ra
468 ; MIPS32-NEXT:    addiu $sp, $sp, 96
469   %v1 = load <5 x i32>, ptr %p
470   call void @arg_v5i32(<5 x i32> %v1)
471   %v2 = call <5 x i32> @ret_v5i32()
472   store <5 x i32> %v2, ptr %p
473   ret void
476 define void @arg_v8i32(<8 x i32> %vec, ptr %p) {
477 ; MIPS64-LABEL: arg_v8i32:
478 ; MIPS64:       # %bb.0:
479 ; MIPS64-NEXT:    sd $7, 24($8)
480 ; MIPS64-NEXT:    sd $6, 16($8)
481 ; MIPS64-NEXT:    sd $5, 8($8)
482 ; MIPS64-NEXT:    jr $ra
483 ; MIPS64-NEXT:    sd $4, 0($8)
485 ; MIPS32-LABEL: arg_v8i32:
486 ; MIPS32:       # %bb.0:
487 ; MIPS32-NEXT:    lw $1, 16($sp)
488 ; MIPS32-NEXT:    lw $2, 20($sp)
489 ; MIPS32-NEXT:    lw $3, 24($sp)
490 ; MIPS32-NEXT:    lw $8, 32($sp)
491 ; MIPS32-NEXT:    lw $9, 28($sp)
492 ; MIPS32-NEXT:    sw $9, 28($8)
493 ; MIPS32-NEXT:    sw $3, 24($8)
494 ; MIPS32-NEXT:    sw $2, 20($8)
495 ; MIPS32-NEXT:    sw $1, 16($8)
496 ; MIPS32-NEXT:    sw $7, 12($8)
497 ; MIPS32-NEXT:    sw $6, 8($8)
498 ; MIPS32-NEXT:    sw $5, 4($8)
499 ; MIPS32-NEXT:    jr $ra
500 ; MIPS32-NEXT:    sw $4, 0($8)
501   store <8 x i32> %vec, ptr %p
502   ret void
505 define <8 x i32> @ret_v8i32(ptr %p) {
506 ; MIPS64-LABEL: ret_v8i32:
507 ; MIPS64:       # %bb.0:
508 ; MIPS64-NEXT:    ld $1, 24($5)
509 ; MIPS64-NEXT:    sd $1, 24($4)
510 ; MIPS64-NEXT:    ld $1, 16($5)
511 ; MIPS64-NEXT:    sd $1, 16($4)
512 ; MIPS64-NEXT:    ld $1, 8($5)
513 ; MIPS64-NEXT:    sd $1, 8($4)
514 ; MIPS64-NEXT:    ld $1, 0($5)
515 ; MIPS64-NEXT:    jr $ra
516 ; MIPS64-NEXT:    sd $1, 0($4)
518 ; MIPS32-LABEL: ret_v8i32:
519 ; MIPS32:       # %bb.0:
520 ; MIPS32-NEXT:    lw $1, 12($5)
521 ; MIPS32-NEXT:    lw $2, 16($5)
522 ; MIPS32-NEXT:    lw $3, 20($5)
523 ; MIPS32-NEXT:    lw $6, 24($5)
524 ; MIPS32-NEXT:    lw $7, 28($5)
525 ; MIPS32-NEXT:    sw $7, 28($4)
526 ; MIPS32-NEXT:    sw $6, 24($4)
527 ; MIPS32-NEXT:    sw $3, 20($4)
528 ; MIPS32-NEXT:    sw $2, 16($4)
529 ; MIPS32-NEXT:    sw $1, 12($4)
530 ; MIPS32-NEXT:    lw $1, 8($5)
531 ; MIPS32-NEXT:    sw $1, 8($4)
532 ; MIPS32-NEXT:    lw $1, 4($5)
533 ; MIPS32-NEXT:    sw $1, 4($4)
534 ; MIPS32-NEXT:    lw $1, 0($5)
535 ; MIPS32-NEXT:    jr $ra
536 ; MIPS32-NEXT:    sw $1, 0($4)
537   %v = load <8 x i32>, ptr %p
538   ret <8 x i32> %v
541 define void @call_v8i32(ptr %p) nounwind {
542 ; MIPS64-LABEL: call_v8i32:
543 ; MIPS64:       # %bb.0:
544 ; MIPS64-NEXT:    daddiu $sp, $sp, -64
545 ; MIPS64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
546 ; MIPS64-NEXT:    sd $fp, 48($sp) # 8-byte Folded Spill
547 ; MIPS64-NEXT:    sd $16, 40($sp) # 8-byte Folded Spill
548 ; MIPS64-NEXT:    move $fp, $sp
549 ; MIPS64-NEXT:    daddiu $1, $zero, -32
550 ; MIPS64-NEXT:    move $16, $4
551 ; MIPS64-NEXT:    ld $7, 24($4)
552 ; MIPS64-NEXT:    ld $6, 16($4)
553 ; MIPS64-NEXT:    ld $5, 8($4)
554 ; MIPS64-NEXT:    ld $4, 0($4)
555 ; MIPS64-NEXT:    jal arg_v8i32
556 ; MIPS64-NEXT:    and $sp, $sp, $1
557 ; MIPS64-NEXT:    jal ret_v8i32
558 ; MIPS64-NEXT:    daddiu $4, $sp, 0
559 ; MIPS64-NEXT:    ld $1, 0($sp)
560 ; MIPS64-NEXT:    lw $2, 16($sp)
561 ; MIPS64-NEXT:    lw $3, 20($sp)
562 ; MIPS64-NEXT:    lw $4, 24($sp)
563 ; MIPS64-NEXT:    lw $5, 28($sp)
564 ; MIPS64-NEXT:    sw $5, 28($16)
565 ; MIPS64-NEXT:    sw $4, 24($16)
566 ; MIPS64-NEXT:    sw $3, 20($16)
567 ; MIPS64-NEXT:    sw $2, 16($16)
568 ; MIPS64-NEXT:    lw $2, 12($sp)
569 ; MIPS64-NEXT:    sw $2, 12($16)
570 ; MIPS64-NEXT:    lw $2, 8($sp)
571 ; MIPS64-NEXT:    sw $2, 8($16)
572 ; MIPS64-NEXT:    sd $1, 0($16)
573 ; MIPS64-NEXT:    move $sp, $fp
574 ; MIPS64-NEXT:    ld $16, 40($sp) # 8-byte Folded Reload
575 ; MIPS64-NEXT:    ld $fp, 48($sp) # 8-byte Folded Reload
576 ; MIPS64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
577 ; MIPS64-NEXT:    jr $ra
578 ; MIPS64-NEXT:    daddiu $sp, $sp, 64
580 ; MIPS32-LABEL: call_v8i32:
581 ; MIPS32:       # %bb.0:
582 ; MIPS32-NEXT:    addiu $sp, $sp, -96
583 ; MIPS32-NEXT:    sw $ra, 92($sp) # 4-byte Folded Spill
584 ; MIPS32-NEXT:    sw $fp, 88($sp) # 4-byte Folded Spill
585 ; MIPS32-NEXT:    sw $16, 84($sp) # 4-byte Folded Spill
586 ; MIPS32-NEXT:    move $fp, $sp
587 ; MIPS32-NEXT:    addiu $1, $zero, -32
588 ; MIPS32-NEXT:    and $sp, $sp, $1
589 ; MIPS32-NEXT:    move $16, $4
590 ; MIPS32-NEXT:    lw $7, 12($4)
591 ; MIPS32-NEXT:    lw $6, 8($4)
592 ; MIPS32-NEXT:    lw $5, 4($4)
593 ; MIPS32-NEXT:    lw $4, 0($4)
594 ; MIPS32-NEXT:    lw $1, 16($16)
595 ; MIPS32-NEXT:    lw $2, 20($16)
596 ; MIPS32-NEXT:    lw $3, 24($16)
597 ; MIPS32-NEXT:    lw $8, 28($16)
598 ; MIPS32-NEXT:    sw $8, 28($sp)
599 ; MIPS32-NEXT:    sw $3, 24($sp)
600 ; MIPS32-NEXT:    sw $2, 20($sp)
601 ; MIPS32-NEXT:    jal arg_v8i32
602 ; MIPS32-NEXT:    sw $1, 16($sp)
603 ; MIPS32-NEXT:    jal ret_v8i32
604 ; MIPS32-NEXT:    addiu $4, $sp, 32
605 ; MIPS32-NEXT:    lw $1, 44($sp)
606 ; MIPS32-NEXT:    lw $2, 48($sp)
607 ; MIPS32-NEXT:    lw $3, 52($sp)
608 ; MIPS32-NEXT:    lw $4, 56($sp)
609 ; MIPS32-NEXT:    lw $5, 60($sp)
610 ; MIPS32-NEXT:    sw $5, 28($16)
611 ; MIPS32-NEXT:    sw $4, 24($16)
612 ; MIPS32-NEXT:    sw $3, 20($16)
613 ; MIPS32-NEXT:    sw $2, 16($16)
614 ; MIPS32-NEXT:    sw $1, 12($16)
615 ; MIPS32-NEXT:    lw $1, 40($sp)
616 ; MIPS32-NEXT:    sw $1, 8($16)
617 ; MIPS32-NEXT:    lw $1, 36($sp)
618 ; MIPS32-NEXT:    sw $1, 4($16)
619 ; MIPS32-NEXT:    lw $1, 32($sp)
620 ; MIPS32-NEXT:    sw $1, 0($16)
621 ; MIPS32-NEXT:    move $sp, $fp
622 ; MIPS32-NEXT:    lw $16, 84($sp) # 4-byte Folded Reload
623 ; MIPS32-NEXT:    lw $fp, 88($sp) # 4-byte Folded Reload
624 ; MIPS32-NEXT:    lw $ra, 92($sp) # 4-byte Folded Reload
625 ; MIPS32-NEXT:    jr $ra
626 ; MIPS32-NEXT:    addiu $sp, $sp, 96
627   %v1 = load <8 x i32>, ptr %p
628   call void @arg_v8i32(<8 x i32> %v1)
629   %v2 = call <8 x i32> @ret_v8i32()
630   store <8 x i32> %v2, ptr %p
631   ret void
634 define void @arg_v3i24(<3 x i24> %vec, ptr %p) {
635 ; MIPS64-LABEL: arg_v3i24:
636 ; MIPS64:       # %bb.0:
637 ; MIPS64-NEXT:    sll $1, $6, 0
638 ; MIPS64-NEXT:    srl $2, $1, 8
639 ; MIPS64-NEXT:    sll $3, $4, 0
640 ; MIPS64-NEXT:    sll $4, $5, 0
641 ; MIPS64-NEXT:    sb $1, 8($7)
642 ; MIPS64-NEXT:    sb $4, 5($7)
643 ; MIPS64-NEXT:    sb $3, 2($7)
644 ; MIPS64-NEXT:    sh $2, 6($7)
645 ; MIPS64-NEXT:    srl $1, $4, 8
646 ; MIPS64-NEXT:    sb $1, 4($7)
647 ; MIPS64-NEXT:    srl $1, $4, 16
648 ; MIPS64-NEXT:    sb $1, 3($7)
649 ; MIPS64-NEXT:    srl $1, $3, 8
650 ; MIPS64-NEXT:    jr $ra
651 ; MIPS64-NEXT:    sh $1, 0($7)
653 ; MIPS32-LABEL: arg_v3i24:
654 ; MIPS32:       # %bb.0:
655 ; MIPS32-NEXT:    srl $1, $6, 8
656 ; MIPS32-NEXT:    sb $6, 8($7)
657 ; MIPS32-NEXT:    sb $5, 5($7)
658 ; MIPS32-NEXT:    sb $4, 2($7)
659 ; MIPS32-NEXT:    sh $1, 6($7)
660 ; MIPS32-NEXT:    srl $1, $5, 8
661 ; MIPS32-NEXT:    sb $1, 4($7)
662 ; MIPS32-NEXT:    srl $1, $5, 16
663 ; MIPS32-NEXT:    sb $1, 3($7)
664 ; MIPS32-NEXT:    srl $1, $4, 8
665 ; MIPS32-NEXT:    jr $ra
666 ; MIPS32-NEXT:    sh $1, 0($7)
667   store <3 x i24> %vec, ptr %p
668   ret void
671 define <3 x i24> @ret_v3i24(ptr %p) {
672 ; MIPS64-LABEL: ret_v3i24:
673 ; MIPS64:       # %bb.0:
674 ; MIPS64-NEXT:    lbu $1, 8($4)
675 ; MIPS64-NEXT:    lh $2, 6($4)
676 ; MIPS64-NEXT:    sll $3, $2, 8
677 ; MIPS64-NEXT:    lbu $2, 2($4)
678 ; MIPS64-NEXT:    lhu $5, 0($4)
679 ; MIPS64-NEXT:    sll $5, $5, 8
680 ; MIPS64-NEXT:    or $2, $2, $5
681 ; MIPS64-NEXT:    or $1, $1, $3
682 ; MIPS64-NEXT:    lbu $3, 4($4)
683 ; MIPS64-NEXT:    sll $3, $3, 8
684 ; MIPS64-NEXT:    lb $5, 3($4)
685 ; MIPS64-NEXT:    sll $5, $5, 16
686 ; MIPS64-NEXT:    or $3, $5, $3
687 ; MIPS64-NEXT:    lbu $4, 5($4)
688 ; MIPS64-NEXT:    or $3, $4, $3
689 ; MIPS64-NEXT:    jr $ra
690 ; MIPS64-NEXT:    move $4, $1
692 ; MIPS32-LABEL: ret_v3i24:
693 ; MIPS32:       # %bb.0:
694 ; MIPS32-NEXT:    lbu $1, 8($4)
695 ; MIPS32-NEXT:    lh $2, 6($4)
696 ; MIPS32-NEXT:    sll $3, $2, 8
697 ; MIPS32-NEXT:    lbu $2, 2($4)
698 ; MIPS32-NEXT:    lhu $5, 0($4)
699 ; MIPS32-NEXT:    sll $5, $5, 8
700 ; MIPS32-NEXT:    or $2, $2, $5
701 ; MIPS32-NEXT:    or $1, $1, $3
702 ; MIPS32-NEXT:    lbu $3, 4($4)
703 ; MIPS32-NEXT:    sll $3, $3, 8
704 ; MIPS32-NEXT:    lb $5, 3($4)
705 ; MIPS32-NEXT:    sll $5, $5, 16
706 ; MIPS32-NEXT:    or $3, $5, $3
707 ; MIPS32-NEXT:    lbu $4, 5($4)
708 ; MIPS32-NEXT:    or $3, $4, $3
709 ; MIPS32-NEXT:    jr $ra
710 ; MIPS32-NEXT:    move $4, $1
711   %v = load <3 x i24>, ptr %p
712   ret <3 x i24> %v
715 define void @call_v3i24(ptr %p) nounwind {
716 ; MIPS64-LABEL: call_v3i24:
717 ; MIPS64:       # %bb.0:
718 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
719 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
720 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
721 ; MIPS64-NEXT:    move $16, $4
722 ; MIPS64-NEXT:    lbu $1, 4($4)
723 ; MIPS64-NEXT:    lbu $2, 8($4)
724 ; MIPS64-NEXT:    lh $3, 6($4)
725 ; MIPS64-NEXT:    dsll $3, $3, 8
726 ; MIPS64-NEXT:    lbu $4, 2($4)
727 ; MIPS64-NEXT:    lh $5, 0($16)
728 ; MIPS64-NEXT:    dsll $5, $5, 8
729 ; MIPS64-NEXT:    or $4, $4, $5
730 ; MIPS64-NEXT:    or $6, $2, $3
731 ; MIPS64-NEXT:    dsll $1, $1, 8
732 ; MIPS64-NEXT:    lb $2, 3($16)
733 ; MIPS64-NEXT:    dsll $2, $2, 16
734 ; MIPS64-NEXT:    or $1, $2, $1
735 ; MIPS64-NEXT:    lbu $2, 5($16)
736 ; MIPS64-NEXT:    jal arg_v3i24
737 ; MIPS64-NEXT:    or $5, $2, $1
738 ; MIPS64-NEXT:    jal ret_v3i24
739 ; MIPS64-NEXT:    nop
740 ; MIPS64-NEXT:    srl $1, $4, 8
741 ; MIPS64-NEXT:    sb $4, 8($16)
742 ; MIPS64-NEXT:    sb $3, 5($16)
743 ; MIPS64-NEXT:    sb $2, 2($16)
744 ; MIPS64-NEXT:    sh $1, 6($16)
745 ; MIPS64-NEXT:    srl $1, $3, 8
746 ; MIPS64-NEXT:    sb $1, 4($16)
747 ; MIPS64-NEXT:    srl $1, $3, 16
748 ; MIPS64-NEXT:    sb $1, 3($16)
749 ; MIPS64-NEXT:    srl $1, $2, 8
750 ; MIPS64-NEXT:    sh $1, 0($16)
751 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
752 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
753 ; MIPS64-NEXT:    jr $ra
754 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
756 ; MIPS32-LABEL: call_v3i24:
757 ; MIPS32:       # %bb.0:
758 ; MIPS32-NEXT:    addiu $sp, $sp, -24
759 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
760 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
761 ; MIPS32-NEXT:    move $16, $4
762 ; MIPS32-NEXT:    lbu $1, 4($4)
763 ; MIPS32-NEXT:    lbu $2, 8($4)
764 ; MIPS32-NEXT:    lh $3, 6($4)
765 ; MIPS32-NEXT:    sll $3, $3, 8
766 ; MIPS32-NEXT:    lbu $4, 2($4)
767 ; MIPS32-NEXT:    lhu $5, 0($16)
768 ; MIPS32-NEXT:    sll $5, $5, 8
769 ; MIPS32-NEXT:    or $4, $4, $5
770 ; MIPS32-NEXT:    or $6, $2, $3
771 ; MIPS32-NEXT:    sll $1, $1, 8
772 ; MIPS32-NEXT:    lb $2, 3($16)
773 ; MIPS32-NEXT:    sll $2, $2, 16
774 ; MIPS32-NEXT:    or $1, $2, $1
775 ; MIPS32-NEXT:    lbu $2, 5($16)
776 ; MIPS32-NEXT:    jal arg_v3i24
777 ; MIPS32-NEXT:    or $5, $2, $1
778 ; MIPS32-NEXT:    jal ret_v3i24
779 ; MIPS32-NEXT:    nop
780 ; MIPS32-NEXT:    srl $1, $4, 8
781 ; MIPS32-NEXT:    sb $4, 8($16)
782 ; MIPS32-NEXT:    sb $3, 5($16)
783 ; MIPS32-NEXT:    sb $2, 2($16)
784 ; MIPS32-NEXT:    sh $1, 6($16)
785 ; MIPS32-NEXT:    srl $1, $3, 8
786 ; MIPS32-NEXT:    sb $1, 4($16)
787 ; MIPS32-NEXT:    srl $1, $3, 16
788 ; MIPS32-NEXT:    sb $1, 3($16)
789 ; MIPS32-NEXT:    srl $1, $2, 8
790 ; MIPS32-NEXT:    sh $1, 0($16)
791 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
792 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
793 ; MIPS32-NEXT:    jr $ra
794 ; MIPS32-NEXT:    addiu $sp, $sp, 24
795   %v1 = load <3 x i24>, ptr %p
796   call void @arg_v3i24(<3 x i24> %v1)
797   %v2 = call <3 x i24> @ret_v3i24()
798   store <3 x i24> %v2, ptr %p
799   ret void
802 define void @arg_v4i24(<4 x i24> %vec, ptr %p) {
803 ; MIPS64-LABEL: arg_v4i24:
804 ; MIPS64:       # %bb.0:
805 ; MIPS64-NEXT:    sll $1, $7, 0
806 ; MIPS64-NEXT:    sll $2, $6, 0
807 ; MIPS64-NEXT:    srl $3, $2, 8
808 ; MIPS64-NEXT:    srl $6, $1, 16
809 ; MIPS64-NEXT:    srl $7, $1, 8
810 ; MIPS64-NEXT:    sll $4, $4, 0
811 ; MIPS64-NEXT:    sll $5, $5, 0
812 ; MIPS64-NEXT:    sb $1, 11($8)
813 ; MIPS64-NEXT:    sb $2, 8($8)
814 ; MIPS64-NEXT:    sb $5, 5($8)
815 ; MIPS64-NEXT:    sb $4, 2($8)
816 ; MIPS64-NEXT:    sb $7, 10($8)
817 ; MIPS64-NEXT:    sb $6, 9($8)
818 ; MIPS64-NEXT:    sh $3, 6($8)
819 ; MIPS64-NEXT:    srl $1, $5, 8
820 ; MIPS64-NEXT:    sb $1, 4($8)
821 ; MIPS64-NEXT:    srl $1, $5, 16
822 ; MIPS64-NEXT:    sb $1, 3($8)
823 ; MIPS64-NEXT:    srl $1, $4, 8
824 ; MIPS64-NEXT:    jr $ra
825 ; MIPS64-NEXT:    sh $1, 0($8)
827 ; MIPS32-LABEL: arg_v4i24:
828 ; MIPS32:       # %bb.0:
829 ; MIPS32-NEXT:    srl $1, $6, 8
830 ; MIPS32-NEXT:    srl $2, $7, 16
831 ; MIPS32-NEXT:    srl $3, $7, 8
832 ; MIPS32-NEXT:    lw $8, 16($sp)
833 ; MIPS32-NEXT:    sb $7, 11($8)
834 ; MIPS32-NEXT:    sb $6, 8($8)
835 ; MIPS32-NEXT:    sb $5, 5($8)
836 ; MIPS32-NEXT:    sb $4, 2($8)
837 ; MIPS32-NEXT:    sb $3, 10($8)
838 ; MIPS32-NEXT:    sb $2, 9($8)
839 ; MIPS32-NEXT:    sh $1, 6($8)
840 ; MIPS32-NEXT:    srl $1, $5, 8
841 ; MIPS32-NEXT:    sb $1, 4($8)
842 ; MIPS32-NEXT:    srl $1, $5, 16
843 ; MIPS32-NEXT:    sb $1, 3($8)
844 ; MIPS32-NEXT:    srl $1, $4, 8
845 ; MIPS32-NEXT:    jr $ra
846 ; MIPS32-NEXT:    sh $1, 0($8)
847   store <4 x i24> %vec, ptr %p
848   ret void
851 define <4 x i24> @ret_v4i24(ptr %p) {
852 ; MIPS64-LABEL: ret_v4i24:
853 ; MIPS64:       # %bb.0:
854 ; MIPS64-NEXT:    lbu $1, 4($4)
855 ; MIPS64-NEXT:    sll $1, $1, 8
856 ; MIPS64-NEXT:    lbu $2, 3($4)
857 ; MIPS64-NEXT:    sll $2, $2, 16
858 ; MIPS64-NEXT:    or $3, $2, $1
859 ; MIPS64-NEXT:    lbu $5, 5($4)
860 ; MIPS64-NEXT:    lbu $1, 8($4)
861 ; MIPS64-NEXT:    lhu $2, 6($4)
862 ; MIPS64-NEXT:    sll $6, $2, 8
863 ; MIPS64-NEXT:    lbu $2, 2($4)
864 ; MIPS64-NEXT:    lhu $7, 0($4)
865 ; MIPS64-NEXT:    sll $7, $7, 8
866 ; MIPS64-NEXT:    or $2, $2, $7
867 ; MIPS64-NEXT:    or $1, $1, $6
868 ; MIPS64-NEXT:    or $3, $5, $3
869 ; MIPS64-NEXT:    lbu $5, 10($4)
870 ; MIPS64-NEXT:    sll $5, $5, 8
871 ; MIPS64-NEXT:    lbu $6, 9($4)
872 ; MIPS64-NEXT:    sll $6, $6, 16
873 ; MIPS64-NEXT:    or $5, $6, $5
874 ; MIPS64-NEXT:    lbu $4, 11($4)
875 ; MIPS64-NEXT:    or $5, $4, $5
876 ; MIPS64-NEXT:    jr $ra
877 ; MIPS64-NEXT:    move $4, $1
879 ; MIPS32-LABEL: ret_v4i24:
880 ; MIPS32:       # %bb.0:
881 ; MIPS32-NEXT:    lbu $1, 4($4)
882 ; MIPS32-NEXT:    sll $1, $1, 8
883 ; MIPS32-NEXT:    lbu $2, 3($4)
884 ; MIPS32-NEXT:    sll $2, $2, 16
885 ; MIPS32-NEXT:    or $3, $2, $1
886 ; MIPS32-NEXT:    lbu $5, 5($4)
887 ; MIPS32-NEXT:    lbu $1, 8($4)
888 ; MIPS32-NEXT:    lhu $2, 6($4)
889 ; MIPS32-NEXT:    sll $6, $2, 8
890 ; MIPS32-NEXT:    lbu $2, 2($4)
891 ; MIPS32-NEXT:    lhu $7, 0($4)
892 ; MIPS32-NEXT:    sll $7, $7, 8
893 ; MIPS32-NEXT:    or $2, $2, $7
894 ; MIPS32-NEXT:    or $1, $1, $6
895 ; MIPS32-NEXT:    or $3, $5, $3
896 ; MIPS32-NEXT:    lbu $5, 10($4)
897 ; MIPS32-NEXT:    sll $5, $5, 8
898 ; MIPS32-NEXT:    lbu $6, 9($4)
899 ; MIPS32-NEXT:    sll $6, $6, 16
900 ; MIPS32-NEXT:    or $5, $6, $5
901 ; MIPS32-NEXT:    lbu $4, 11($4)
902 ; MIPS32-NEXT:    or $5, $4, $5
903 ; MIPS32-NEXT:    jr $ra
904 ; MIPS32-NEXT:    move $4, $1
905   %v = load <4 x i24>, ptr %p
906   ret <4 x i24> %v
909 define void @call_v4i24(ptr %p) nounwind {
910 ; MIPS64-LABEL: call_v4i24:
911 ; MIPS64:       # %bb.0:
912 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
913 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
914 ; MIPS64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
915 ; MIPS64-NEXT:    move $16, $4
916 ; MIPS64-NEXT:    lbu $1, 4($4)
917 ; MIPS64-NEXT:    dsll $1, $1, 8
918 ; MIPS64-NEXT:    lb $2, 3($4)
919 ; MIPS64-NEXT:    dsll $2, $2, 16
920 ; MIPS64-NEXT:    or $1, $2, $1
921 ; MIPS64-NEXT:    lbu $2, 10($4)
922 ; MIPS64-NEXT:    lbu $3, 5($4)
923 ; MIPS64-NEXT:    lbu $5, 8($4)
924 ; MIPS64-NEXT:    lh $4, 6($4)
925 ; MIPS64-NEXT:    dsll $6, $4, 8
926 ; MIPS64-NEXT:    lbu $4, 2($16)
927 ; MIPS64-NEXT:    lh $7, 0($16)
928 ; MIPS64-NEXT:    dsll $7, $7, 8
929 ; MIPS64-NEXT:    or $4, $4, $7
930 ; MIPS64-NEXT:    or $6, $5, $6
931 ; MIPS64-NEXT:    or $5, $3, $1
932 ; MIPS64-NEXT:    dsll $1, $2, 8
933 ; MIPS64-NEXT:    lb $2, 9($16)
934 ; MIPS64-NEXT:    dsll $2, $2, 16
935 ; MIPS64-NEXT:    or $1, $2, $1
936 ; MIPS64-NEXT:    lbu $2, 11($16)
937 ; MIPS64-NEXT:    jal arg_v4i24
938 ; MIPS64-NEXT:    or $7, $2, $1
939 ; MIPS64-NEXT:    jal ret_v4i24
940 ; MIPS64-NEXT:    nop
941 ; MIPS64-NEXT:    srl $1, $4, 8
942 ; MIPS64-NEXT:    srl $6, $5, 16
943 ; MIPS64-NEXT:    srl $7, $5, 8
944 ; MIPS64-NEXT:    sb $5, 11($16)
945 ; MIPS64-NEXT:    sb $4, 8($16)
946 ; MIPS64-NEXT:    sb $3, 5($16)
947 ; MIPS64-NEXT:    sb $2, 2($16)
948 ; MIPS64-NEXT:    sb $7, 10($16)
949 ; MIPS64-NEXT:    sb $6, 9($16)
950 ; MIPS64-NEXT:    sh $1, 6($16)
951 ; MIPS64-NEXT:    srl $1, $3, 8
952 ; MIPS64-NEXT:    sb $1, 4($16)
953 ; MIPS64-NEXT:    srl $1, $3, 16
954 ; MIPS64-NEXT:    sb $1, 3($16)
955 ; MIPS64-NEXT:    srl $1, $2, 8
956 ; MIPS64-NEXT:    sh $1, 0($16)
957 ; MIPS64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
958 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
959 ; MIPS64-NEXT:    jr $ra
960 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
962 ; MIPS32-LABEL: call_v4i24:
963 ; MIPS32:       # %bb.0:
964 ; MIPS32-NEXT:    addiu $sp, $sp, -24
965 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
966 ; MIPS32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
967 ; MIPS32-NEXT:    move $16, $4
968 ; MIPS32-NEXT:    lbu $1, 4($4)
969 ; MIPS32-NEXT:    sll $1, $1, 8
970 ; MIPS32-NEXT:    lbu $2, 3($4)
971 ; MIPS32-NEXT:    sll $2, $2, 16
972 ; MIPS32-NEXT:    or $1, $2, $1
973 ; MIPS32-NEXT:    lbu $2, 10($4)
974 ; MIPS32-NEXT:    lbu $3, 5($4)
975 ; MIPS32-NEXT:    lbu $5, 8($4)
976 ; MIPS32-NEXT:    lhu $4, 6($4)
977 ; MIPS32-NEXT:    sll $6, $4, 8
978 ; MIPS32-NEXT:    lbu $4, 2($16)
979 ; MIPS32-NEXT:    lhu $7, 0($16)
980 ; MIPS32-NEXT:    sll $7, $7, 8
981 ; MIPS32-NEXT:    or $4, $4, $7
982 ; MIPS32-NEXT:    or $6, $5, $6
983 ; MIPS32-NEXT:    or $5, $3, $1
984 ; MIPS32-NEXT:    sll $1, $2, 8
985 ; MIPS32-NEXT:    lbu $2, 9($16)
986 ; MIPS32-NEXT:    sll $2, $2, 16
987 ; MIPS32-NEXT:    or $1, $2, $1
988 ; MIPS32-NEXT:    lbu $2, 11($16)
989 ; MIPS32-NEXT:    jal arg_v4i24
990 ; MIPS32-NEXT:    or $7, $2, $1
991 ; MIPS32-NEXT:    jal ret_v4i24
992 ; MIPS32-NEXT:    nop
993 ; MIPS32-NEXT:    srl $1, $4, 8
994 ; MIPS32-NEXT:    srl $6, $5, 16
995 ; MIPS32-NEXT:    srl $7, $5, 8
996 ; MIPS32-NEXT:    sb $5, 11($16)
997 ; MIPS32-NEXT:    sb $4, 8($16)
998 ; MIPS32-NEXT:    sb $3, 5($16)
999 ; MIPS32-NEXT:    sb $2, 2($16)
1000 ; MIPS32-NEXT:    sb $7, 10($16)
1001 ; MIPS32-NEXT:    sb $6, 9($16)
1002 ; MIPS32-NEXT:    sh $1, 6($16)
1003 ; MIPS32-NEXT:    srl $1, $3, 8
1004 ; MIPS32-NEXT:    sb $1, 4($16)
1005 ; MIPS32-NEXT:    srl $1, $3, 16
1006 ; MIPS32-NEXT:    sb $1, 3($16)
1007 ; MIPS32-NEXT:    srl $1, $2, 8
1008 ; MIPS32-NEXT:    sh $1, 0($16)
1009 ; MIPS32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
1010 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
1011 ; MIPS32-NEXT:    jr $ra
1012 ; MIPS32-NEXT:    addiu $sp, $sp, 24
1013   %v1 = load <4 x i24>, ptr %p
1014   call void @arg_v4i24(<4 x i24> %v1)
1015   %v2 = call <4 x i24> @ret_v4i24()
1016   store <4 x i24> %v2, ptr %p
1017   ret void
1020 define void @arg_v4i18(<4 x i18> %vec, ptr %p) {
1021 ; MIPS64-LABEL: arg_v4i18:
1022 ; MIPS64:       # %bb.0:
1023 ; MIPS64-NEXT:    lui $1, 3
1024 ; MIPS64-NEXT:    ori $2, $1, 65535
1025 ; MIPS64-NEXT:    and $3, $5, $2
1026 ; MIPS64-NEXT:    dsll $3, $3, 36
1027 ; MIPS64-NEXT:    dsll $5, $4, 54
1028 ; MIPS64-NEXT:    or $3, $5, $3
1029 ; MIPS64-NEXT:    and $2, $6, $2
1030 ; MIPS64-NEXT:    dsll $2, $2, 18
1031 ; MIPS64-NEXT:    or $2, $3, $2
1032 ; MIPS64-NEXT:    ori $1, $1, 65280
1033 ; MIPS64-NEXT:    and $1, $7, $1
1034 ; MIPS64-NEXT:    sb $7, 8($8)
1035 ; MIPS64-NEXT:    or $1, $2, $1
1036 ; MIPS64-NEXT:    daddiu $2, $zero, 255
1037 ; MIPS64-NEXT:    dsrl $1, $1, 8
1038 ; MIPS64-NEXT:    dsll $2, $2, 56
1039 ; MIPS64-NEXT:    dsll $3, $4, 46
1040 ; MIPS64-NEXT:    and $2, $3, $2
1041 ; MIPS64-NEXT:    or $1, $2, $1
1042 ; MIPS64-NEXT:    jr $ra
1043 ; MIPS64-NEXT:    sd $1, 0($8)
1045 ; MIPS32-LABEL: arg_v4i18:
1046 ; MIPS32:       # %bb.0:
1047 ; MIPS32-NEXT:    sll $1, $4, 14
1048 ; MIPS32-NEXT:    lui $2, 63
1049 ; MIPS32-NEXT:    lui $3, 65280
1050 ; MIPS32-NEXT:    and $1, $1, $3
1051 ; MIPS32-NEXT:    ori $2, $2, 65280
1052 ; MIPS32-NEXT:    sll $3, $5, 4
1053 ; MIPS32-NEXT:    and $2, $3, $2
1054 ; MIPS32-NEXT:    sll $4, $4, 22
1055 ; MIPS32-NEXT:    or $2, $4, $2
1056 ; MIPS32-NEXT:    srl $2, $2, 8
1057 ; MIPS32-NEXT:    lui $4, 3
1058 ; MIPS32-NEXT:    or $1, $1, $2
1059 ; MIPS32-NEXT:    ori $2, $4, 65280
1060 ; MIPS32-NEXT:    and $2, $7, $2
1061 ; MIPS32-NEXT:    sll $5, $6, 18
1062 ; MIPS32-NEXT:    or $2, $5, $2
1063 ; MIPS32-NEXT:    lw $5, 16($sp)
1064 ; MIPS32-NEXT:    sb $7, 8($5)
1065 ; MIPS32-NEXT:    sw $1, 0($5)
1066 ; MIPS32-NEXT:    srl $1, $2, 8
1067 ; MIPS32-NEXT:    ori $2, $4, 49152
1068 ; MIPS32-NEXT:    and $2, $6, $2
1069 ; MIPS32-NEXT:    srl $2, $2, 14
1070 ; MIPS32-NEXT:    or $2, $3, $2
1071 ; MIPS32-NEXT:    sll $2, $2, 24
1072 ; MIPS32-NEXT:    or $1, $1, $2
1073 ; MIPS32-NEXT:    jr $ra
1074 ; MIPS32-NEXT:    sw $1, 4($5)
1075   store <4 x i18> %vec, ptr %p
1076   ret void
1079 define <4 x i18> @ret_v4i18(ptr %p) {
1080 ; MIPS64-LABEL: ret_v4i18:
1081 ; MIPS64:       # %bb.0:
1082 ; MIPS64-NEXT:    lbu $1, 8($4)
1083 ; MIPS64-NEXT:    ld $2, 0($4)
1084 ; MIPS64-NEXT:    dsll $6, $2, 8
1085 ; MIPS64-NEXT:    or $1, $1, $6
1086 ; MIPS64-NEXT:    sll $3, $2, 0
1087 ; MIPS64-NEXT:    sll $1, $1, 0
1088 ; MIPS64-NEXT:    srl $4, $3, 10
1089 ; MIPS64-NEXT:    lui $3, 3
1090 ; MIPS64-NEXT:    ori $5, $3, 65535
1091 ; MIPS64-NEXT:    dsrl $3, $2, 28
1092 ; MIPS64-NEXT:    sll $3, $3, 0
1093 ; MIPS64-NEXT:    lui $7, 3
1094 ; MIPS64-NEXT:    and $3, $3, $5
1095 ; MIPS64-NEXT:    and $4, $4, $5
1096 ; MIPS64-NEXT:    and $5, $1, $5
1097 ; MIPS64-NEXT:    ori $1, $7, 64512
1098 ; MIPS64-NEXT:    dsrl $2, $2, 46
1099 ; MIPS64-NEXT:    and $1, $2, $1
1100 ; MIPS64-NEXT:    dsrl $2, $6, 54
1101 ; MIPS64-NEXT:    or $1, $2, $1
1102 ; MIPS64-NEXT:    jr $ra
1103 ; MIPS64-NEXT:    sll $2, $1, 0
1105 ; MIPS32-LABEL: ret_v4i18:
1106 ; MIPS32:       # %bb.0:
1107 ; MIPS32-NEXT:    lbu $1, 8($4)
1108 ; MIPS32-NEXT:    lw $2, 4($4)
1109 ; MIPS32-NEXT:    sll $6, $2, 8
1110 ; MIPS32-NEXT:    lui $3, 3
1111 ; MIPS32-NEXT:    or $1, $1, $6
1112 ; MIPS32-NEXT:    ori $5, $3, 64512
1113 ; MIPS32-NEXT:    lw $4, 0($4)
1114 ; MIPS32-NEXT:    srl $7, $4, 14
1115 ; MIPS32-NEXT:    and $5, $7, $5
1116 ; MIPS32-NEXT:    srl $7, $2, 24
1117 ; MIPS32-NEXT:    ori $8, $3, 65535
1118 ; MIPS32-NEXT:    sll $3, $4, 8
1119 ; MIPS32-NEXT:    srl $2, $3, 22
1120 ; MIPS32-NEXT:    or $2, $2, $5
1121 ; MIPS32-NEXT:    and $5, $1, $8
1122 ; MIPS32-NEXT:    or $1, $3, $7
1123 ; MIPS32-NEXT:    srl $1, $1, 4
1124 ; MIPS32-NEXT:    and $3, $1, $8
1125 ; MIPS32-NEXT:    sll $1, $7, 14
1126 ; MIPS32-NEXT:    srl $4, $6, 18
1127 ; MIPS32-NEXT:    or $1, $4, $1
1128 ; MIPS32-NEXT:    jr $ra
1129 ; MIPS32-NEXT:    and $4, $1, $8
1130   %v = load <4 x i18>, ptr %p
1131   ret <4 x i18> %v
1134 define void @call_v4i18(ptr %p) nounwind {
1135 ; MIPS64-LABEL: call_v4i18:
1136 ; MIPS64:       # %bb.0:
1137 ; MIPS64-NEXT:    daddiu $sp, $sp, -48
1138 ; MIPS64-NEXT:    sd $ra, 40($sp) # 8-byte Folded Spill
1139 ; MIPS64-NEXT:    sd $19, 32($sp) # 8-byte Folded Spill
1140 ; MIPS64-NEXT:    sd $18, 24($sp) # 8-byte Folded Spill
1141 ; MIPS64-NEXT:    sd $17, 16($sp) # 8-byte Folded Spill
1142 ; MIPS64-NEXT:    sd $16, 8($sp) # 8-byte Folded Spill
1143 ; MIPS64-NEXT:    move $16, $4
1144 ; MIPS64-NEXT:    lui $17, 3
1145 ; MIPS64-NEXT:    ori $1, $17, 64512
1146 ; MIPS64-NEXT:    ld $2, 0($4)
1147 ; MIPS64-NEXT:    dsrl $3, $2, 46
1148 ; MIPS64-NEXT:    dsrl $4, $2, 10
1149 ; MIPS64-NEXT:    ori $18, $17, 65535
1150 ; MIPS64-NEXT:    dsrl $5, $2, 28
1151 ; MIPS64-NEXT:    and $5, $5, $18
1152 ; MIPS64-NEXT:    and $6, $4, $18
1153 ; MIPS64-NEXT:    and $1, $3, $1
1154 ; MIPS64-NEXT:    dsll $2, $2, 8
1155 ; MIPS64-NEXT:    dsrl $3, $2, 54
1156 ; MIPS64-NEXT:    or $4, $3, $1
1157 ; MIPS64-NEXT:    lbu $1, 8($16)
1158 ; MIPS64-NEXT:    or $1, $1, $2
1159 ; MIPS64-NEXT:    jal arg_v4i18
1160 ; MIPS64-NEXT:    and $7, $1, $18
1161 ; MIPS64-NEXT:    daddiu $1, $zero, 255
1162 ; MIPS64-NEXT:    dsll $19, $1, 56
1163 ; MIPS64-NEXT:    jal ret_v4i18
1164 ; MIPS64-NEXT:    ori $17, $17, 65280
1165 ; MIPS64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
1166 ; MIPS64-NEXT:    # kill: def $v1 killed $v1 def $v1_64
1167 ; MIPS64-NEXT:    # kill: def $a0 killed $a0 def $a0_64
1168 ; MIPS64-NEXT:    # kill: def $a1 killed $a1 def $a1_64
1169 ; MIPS64-NEXT:    dsll $1, $2, 54
1170 ; MIPS64-NEXT:    and $3, $3, $18
1171 ; MIPS64-NEXT:    dsll $3, $3, 36
1172 ; MIPS64-NEXT:    or $1, $1, $3
1173 ; MIPS64-NEXT:    and $3, $4, $18
1174 ; MIPS64-NEXT:    dsll $3, $3, 18
1175 ; MIPS64-NEXT:    sb $5, 8($16)
1176 ; MIPS64-NEXT:    or $1, $1, $3
1177 ; MIPS64-NEXT:    and $3, $5, $17
1178 ; MIPS64-NEXT:    or $1, $1, $3
1179 ; MIPS64-NEXT:    dsrl $1, $1, 8
1180 ; MIPS64-NEXT:    dsll $2, $2, 46
1181 ; MIPS64-NEXT:    and $2, $2, $19
1182 ; MIPS64-NEXT:    or $1, $2, $1
1183 ; MIPS64-NEXT:    sd $1, 0($16)
1184 ; MIPS64-NEXT:    ld $16, 8($sp) # 8-byte Folded Reload
1185 ; MIPS64-NEXT:    ld $17, 16($sp) # 8-byte Folded Reload
1186 ; MIPS64-NEXT:    ld $18, 24($sp) # 8-byte Folded Reload
1187 ; MIPS64-NEXT:    ld $19, 32($sp) # 8-byte Folded Reload
1188 ; MIPS64-NEXT:    ld $ra, 40($sp) # 8-byte Folded Reload
1189 ; MIPS64-NEXT:    jr $ra
1190 ; MIPS64-NEXT:    daddiu $sp, $sp, 48
1192 ; MIPS32-LABEL: call_v4i18:
1193 ; MIPS32:       # %bb.0:
1194 ; MIPS32-NEXT:    addiu $sp, $sp, -40
1195 ; MIPS32-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
1196 ; MIPS32-NEXT:    sw $19, 32($sp) # 4-byte Folded Spill
1197 ; MIPS32-NEXT:    sw $18, 28($sp) # 4-byte Folded Spill
1198 ; MIPS32-NEXT:    sw $17, 24($sp) # 4-byte Folded Spill
1199 ; MIPS32-NEXT:    sw $16, 20($sp) # 4-byte Folded Spill
1200 ; MIPS32-NEXT:    move $16, $4
1201 ; MIPS32-NEXT:    lw $1, 4($4)
1202 ; MIPS32-NEXT:    srl $2, $1, 24
1203 ; MIPS32-NEXT:    lw $3, 0($4)
1204 ; MIPS32-NEXT:    sll $4, $3, 8
1205 ; MIPS32-NEXT:    or $5, $4, $2
1206 ; MIPS32-NEXT:    lbu $6, 8($16)
1207 ; MIPS32-NEXT:    sll $1, $1, 8
1208 ; MIPS32-NEXT:    srl $5, $5, 4
1209 ; MIPS32-NEXT:    or $6, $6, $1
1210 ; MIPS32-NEXT:    lui $17, 3
1211 ; MIPS32-NEXT:    ori $7, $17, 64512
1212 ; MIPS32-NEXT:    srl $3, $3, 14
1213 ; MIPS32-NEXT:    and $3, $3, $7
1214 ; MIPS32-NEXT:    ori $8, $17, 65535
1215 ; MIPS32-NEXT:    srl $4, $4, 22
1216 ; MIPS32-NEXT:    or $4, $4, $3
1217 ; MIPS32-NEXT:    and $7, $6, $8
1218 ; MIPS32-NEXT:    and $5, $5, $8
1219 ; MIPS32-NEXT:    sll $2, $2, 14
1220 ; MIPS32-NEXT:    srl $1, $1, 18
1221 ; MIPS32-NEXT:    or $1, $1, $2
1222 ; MIPS32-NEXT:    jal arg_v4i18
1223 ; MIPS32-NEXT:    and $6, $1, $8
1224 ; MIPS32-NEXT:    ori $18, $17, 49152
1225 ; MIPS32-NEXT:    ori $17, $17, 65280
1226 ; MIPS32-NEXT:    lui $1, 63
1227 ; MIPS32-NEXT:    jal ret_v4i18
1228 ; MIPS32-NEXT:    ori $19, $1, 65280
1229 ; MIPS32-NEXT:    lui $1, 65280
1230 ; MIPS32-NEXT:    and $6, $5, $17
1231 ; MIPS32-NEXT:    sll $7, $4, 18
1232 ; MIPS32-NEXT:    or $6, $7, $6
1233 ; MIPS32-NEXT:    srl $6, $6, 8
1234 ; MIPS32-NEXT:    and $4, $4, $18
1235 ; MIPS32-NEXT:    srl $4, $4, 14
1236 ; MIPS32-NEXT:    sll $3, $3, 4
1237 ; MIPS32-NEXT:    or $4, $3, $4
1238 ; MIPS32-NEXT:    sll $4, $4, 24
1239 ; MIPS32-NEXT:    or $4, $6, $4
1240 ; MIPS32-NEXT:    sll $6, $2, 14
1241 ; MIPS32-NEXT:    sb $5, 8($16)
1242 ; MIPS32-NEXT:    sw $4, 4($16)
1243 ; MIPS32-NEXT:    and $1, $6, $1
1244 ; MIPS32-NEXT:    and $3, $3, $19
1245 ; MIPS32-NEXT:    sll $2, $2, 22
1246 ; MIPS32-NEXT:    or $2, $2, $3
1247 ; MIPS32-NEXT:    srl $2, $2, 8
1248 ; MIPS32-NEXT:    or $1, $1, $2
1249 ; MIPS32-NEXT:    sw $1, 0($16)
1250 ; MIPS32-NEXT:    lw $16, 20($sp) # 4-byte Folded Reload
1251 ; MIPS32-NEXT:    lw $17, 24($sp) # 4-byte Folded Reload
1252 ; MIPS32-NEXT:    lw $18, 28($sp) # 4-byte Folded Reload
1253 ; MIPS32-NEXT:    lw $19, 32($sp) # 4-byte Folded Reload
1254 ; MIPS32-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
1255 ; MIPS32-NEXT:    jr $ra
1256 ; MIPS32-NEXT:    addiu $sp, $sp, 40
1257   %v1 = load <4 x i18>, ptr %p
1258   call void @arg_v4i18(<4 x i18> %v1)
1259   %v2 = call <4 x i18> @ret_v4i18()
1260   store <4 x i18> %v2, ptr %p
1261   ret void
1264 define void @arg_v7i18(<7 x i18> %vec, ptr %p) {
1265 ; MIPS64-LABEL: arg_v7i18:
1266 ; MIPS64:       # %bb.0:
1267 ; MIPS64-NEXT:    lui $1, 3
1268 ; MIPS64-NEXT:    ori $2, $1, 65535
1269 ; MIPS64-NEXT:    and $3, $8, $2
1270 ; MIPS64-NEXT:    dsll $3, $3, 36
1271 ; MIPS64-NEXT:    dsll $8, $7, 54
1272 ; MIPS64-NEXT:    or $3, $8, $3
1273 ; MIPS64-NEXT:    and $8, $9, $2
1274 ; MIPS64-NEXT:    dsll $8, $8, 18
1275 ; MIPS64-NEXT:    or $3, $3, $8
1276 ; MIPS64-NEXT:    and $5, $5, $2
1277 ; MIPS64-NEXT:    and $8, $10, $2
1278 ; MIPS64-NEXT:    or $3, $3, $8
1279 ; MIPS64-NEXT:    dsll $5, $5, 26
1280 ; MIPS64-NEXT:    dsll $4, $4, 44
1281 ; MIPS64-NEXT:    or $4, $4, $5
1282 ; MIPS64-NEXT:    and $2, $6, $2
1283 ; MIPS64-NEXT:    dsll $2, $2, 8
1284 ; MIPS64-NEXT:    sd $3, 8($11)
1285 ; MIPS64-NEXT:    or $2, $4, $2
1286 ; MIPS64-NEXT:    ori $1, $1, 64512
1287 ; MIPS64-NEXT:    and $1, $7, $1
1288 ; MIPS64-NEXT:    dsrl $1, $1, 10
1289 ; MIPS64-NEXT:    or $1, $2, $1
1290 ; MIPS64-NEXT:    daddiu $2, $zero, 1
1291 ; MIPS64-NEXT:    dsll $2, $2, 62
1292 ; MIPS64-NEXT:    daddiu $2, $2, -1
1293 ; MIPS64-NEXT:    and $1, $1, $2
1294 ; MIPS64-NEXT:    jr $ra
1295 ; MIPS64-NEXT:    sd $1, 0($11)
1297 ; MIPS32-LABEL: arg_v7i18:
1298 ; MIPS32:       # %bb.0:
1299 ; MIPS32-NEXT:    lui $1, 3
1300 ; MIPS32-NEXT:    ori $2, $1, 65535
1301 ; MIPS32-NEXT:    and $3, $6, $2
1302 ; MIPS32-NEXT:    sll $3, $3, 8
1303 ; MIPS32-NEXT:    ori $6, $1, 65472
1304 ; MIPS32-NEXT:    and $6, $5, $6
1305 ; MIPS32-NEXT:    srl $6, $6, 6
1306 ; MIPS32-NEXT:    sll $5, $5, 26
1307 ; MIPS32-NEXT:    sll $4, $4, 12
1308 ; MIPS32-NEXT:    or $4, $4, $6
1309 ; MIPS32-NEXT:    or $3, $5, $3
1310 ; MIPS32-NEXT:    ori $5, $1, 64512
1311 ; MIPS32-NEXT:    and $5, $7, $5
1312 ; MIPS32-NEXT:    srl $5, $5, 10
1313 ; MIPS32-NEXT:    lui $6, 16383
1314 ; MIPS32-NEXT:    ori $6, $6, 65535
1315 ; MIPS32-NEXT:    lw $8, 24($sp)
1316 ; MIPS32-NEXT:    lw $9, 16($sp)
1317 ; MIPS32-NEXT:    or $3, $3, $5
1318 ; MIPS32-NEXT:    and $5, $9, $2
1319 ; MIPS32-NEXT:    and $4, $4, $6
1320 ; MIPS32-NEXT:    and $2, $8, $2
1321 ; MIPS32-NEXT:    lw $6, 20($sp)
1322 ; MIPS32-NEXT:    sll $8, $6, 18
1323 ; MIPS32-NEXT:    or $2, $8, $2
1324 ; MIPS32-NEXT:    lw $8, 28($sp)
1325 ; MIPS32-NEXT:    sw $2, 12($8)
1326 ; MIPS32-NEXT:    sw $4, 0($8)
1327 ; MIPS32-NEXT:    sw $3, 4($8)
1328 ; MIPS32-NEXT:    sll $2, $5, 4
1329 ; MIPS32-NEXT:    sll $3, $7, 22
1330 ; MIPS32-NEXT:    or $2, $3, $2
1331 ; MIPS32-NEXT:    ori $1, $1, 49152
1332 ; MIPS32-NEXT:    and $1, $6, $1
1333 ; MIPS32-NEXT:    srl $1, $1, 14
1334 ; MIPS32-NEXT:    or $1, $2, $1
1335 ; MIPS32-NEXT:    jr $ra
1336 ; MIPS32-NEXT:    sw $1, 8($8)
1337   store <7 x i18> %vec, ptr %p
1338   ret void
1341 define <7 x i18> @ret_v7i18(ptr %p) {
1342 ; MIPS64-LABEL: ret_v7i18:
1343 ; MIPS64:       # %bb.0:
1344 ; MIPS64-NEXT:    ld $1, 0($5)
1345 ; MIPS64-NEXT:    sd $1, 0($4)
1346 ; MIPS64-NEXT:    ld $1, 8($5)
1347 ; MIPS64-NEXT:    jr $ra
1348 ; MIPS64-NEXT:    sd $1, 8($4)
1350 ; MIPS32-LABEL: ret_v7i18:
1351 ; MIPS32:       # %bb.0:
1352 ; MIPS32-NEXT:    lw $1, 0($5)
1353 ; MIPS32-NEXT:    sw $1, 0($4)
1354 ; MIPS32-NEXT:    lw $1, 4($5)
1355 ; MIPS32-NEXT:    sw $1, 4($4)
1356 ; MIPS32-NEXT:    lw $1, 12($5)
1357 ; MIPS32-NEXT:    sw $1, 12($4)
1358 ; MIPS32-NEXT:    lw $1, 8($5)
1359 ; MIPS32-NEXT:    jr $ra
1360 ; MIPS32-NEXT:    sw $1, 8($4)
1361   %v = load <7 x i18>, ptr %p
1362   ret <7 x i18> %v
1365 define void @call_v7i18(ptr %p) nounwind {
1366 ; MIPS64-LABEL: call_v7i18:
1367 ; MIPS64:       # %bb.0:
1368 ; MIPS64-NEXT:    daddiu $sp, $sp, -32
1369 ; MIPS64-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
1370 ; MIPS64-NEXT:    sd $16, 16($sp) # 8-byte Folded Spill
1371 ; MIPS64-NEXT:    move $16, $4
1372 ; MIPS64-NEXT:    ld $1, 0($4)
1373 ; MIPS64-NEXT:    ld $2, 8($4)
1374 ; MIPS64-NEXT:    dsrl $3, $2, 18
1375 ; MIPS64-NEXT:    dsrl $4, $2, 36
1376 ; MIPS64-NEXT:    dsrl $6, $1, 8
1377 ; MIPS64-NEXT:    dsrl $5, $1, 26
1378 ; MIPS64-NEXT:    lui $7, 3
1379 ; MIPS64-NEXT:    ori $7, $7, 65535
1380 ; MIPS64-NEXT:    and $10, $2, $7
1381 ; MIPS64-NEXT:    and $5, $5, $7
1382 ; MIPS64-NEXT:    and $6, $6, $7
1383 ; MIPS64-NEXT:    and $8, $4, $7
1384 ; MIPS64-NEXT:    and $9, $3, $7
1385 ; MIPS64-NEXT:    dsll $3, $1, 10
1386 ; MIPS64-NEXT:    dsrl $2, $2, 54
1387 ; MIPS64-NEXT:    or $2, $2, $3
1388 ; MIPS64-NEXT:    and $7, $2, $7
1389 ; MIPS64-NEXT:    jal arg_v7i18
1390 ; MIPS64-NEXT:    dsrl $4, $1, 44
1391 ; MIPS64-NEXT:    jal ret_v7i18
1392 ; MIPS64-NEXT:    daddiu $4, $sp, 0
1393 ; MIPS64-NEXT:    ld $1, 0($sp)
1394 ; MIPS64-NEXT:    sd $1, 0($16)
1395 ; MIPS64-NEXT:    ld $1, 8($sp)
1396 ; MIPS64-NEXT:    sd $1, 8($16)
1397 ; MIPS64-NEXT:    ld $16, 16($sp) # 8-byte Folded Reload
1398 ; MIPS64-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
1399 ; MIPS64-NEXT:    jr $ra
1400 ; MIPS64-NEXT:    daddiu $sp, $sp, 32
1402 ; MIPS32-LABEL: call_v7i18:
1403 ; MIPS32:       # %bb.0:
1404 ; MIPS32-NEXT:    addiu $sp, $sp, -64
1405 ; MIPS32-NEXT:    sw $ra, 60($sp) # 4-byte Folded Spill
1406 ; MIPS32-NEXT:    sw $fp, 56($sp) # 4-byte Folded Spill
1407 ; MIPS32-NEXT:    sw $16, 52($sp) # 4-byte Folded Spill
1408 ; MIPS32-NEXT:    move $fp, $sp
1409 ; MIPS32-NEXT:    addiu $1, $zero, -16
1410 ; MIPS32-NEXT:    and $sp, $sp, $1
1411 ; MIPS32-NEXT:    move $16, $4
1412 ; MIPS32-NEXT:    lw $1, 8($4)
1413 ; MIPS32-NEXT:    sll $2, $1, 14
1414 ; MIPS32-NEXT:    lw $3, 12($4)
1415 ; MIPS32-NEXT:    srl $4, $3, 18
1416 ; MIPS32-NEXT:    or $2, $4, $2
1417 ; MIPS32-NEXT:    srl $4, $1, 4
1418 ; MIPS32-NEXT:    lui $5, 3
1419 ; MIPS32-NEXT:    ori $7, $5, 65535
1420 ; MIPS32-NEXT:    and $2, $2, $7
1421 ; MIPS32-NEXT:    and $4, $4, $7
1422 ; MIPS32-NEXT:    and $3, $3, $7
1423 ; MIPS32-NEXT:    lw $8, 4($16)
1424 ; MIPS32-NEXT:    lw $9, 0($16)
1425 ; MIPS32-NEXT:    sll $5, $9, 6
1426 ; MIPS32-NEXT:    srl $6, $8, 26
1427 ; MIPS32-NEXT:    sw $3, 24($sp)
1428 ; MIPS32-NEXT:    sw $4, 16($sp)
1429 ; MIPS32-NEXT:    sw $2, 20($sp)
1430 ; MIPS32-NEXT:    or $2, $6, $5
1431 ; MIPS32-NEXT:    srl $3, $8, 8
1432 ; MIPS32-NEXT:    and $6, $3, $7
1433 ; MIPS32-NEXT:    and $5, $2, $7
1434 ; MIPS32-NEXT:    sll $2, $8, 10
1435 ; MIPS32-NEXT:    srl $1, $1, 22
1436 ; MIPS32-NEXT:    or $1, $1, $2
1437 ; MIPS32-NEXT:    and $7, $1, $7
1438 ; MIPS32-NEXT:    jal arg_v7i18
1439 ; MIPS32-NEXT:    srl $4, $9, 12
1440 ; MIPS32-NEXT:    jal ret_v7i18
1441 ; MIPS32-NEXT:    addiu $4, $sp, 32
1442 ; MIPS32-NEXT:    lw $1, 32($sp)
1443 ; MIPS32-NEXT:    sw $1, 0($16)
1444 ; MIPS32-NEXT:    lw $1, 36($sp)
1445 ; MIPS32-NEXT:    sw $1, 4($16)
1446 ; MIPS32-NEXT:    lw $1, 40($sp)
1447 ; MIPS32-NEXT:    sw $1, 8($16)
1448 ; MIPS32-NEXT:    lw $1, 44($sp)
1449 ; MIPS32-NEXT:    sw $1, 12($16)
1450 ; MIPS32-NEXT:    move $sp, $fp
1451 ; MIPS32-NEXT:    lw $16, 52($sp) # 4-byte Folded Reload
1452 ; MIPS32-NEXT:    lw $fp, 56($sp) # 4-byte Folded Reload
1453 ; MIPS32-NEXT:    lw $ra, 60($sp) # 4-byte Folded Reload
1454 ; MIPS32-NEXT:    jr $ra
1455 ; MIPS32-NEXT:    addiu $sp, $sp, 64
1456   %v1 = load <7 x i18>, ptr %p
1457   call void @arg_v7i18(<7 x i18> %v1)
1458   %v2 = call <7 x i18> @ret_v7i18()
1459   store <7 x i18> %v2, ptr %p
1460   ret void
1463 define void @arg_v2i128(<2 x i128> %vec, ptr %p) {
1464 ; MIPS64-LABEL: arg_v2i128:
1465 ; MIPS64:       # %bb.0:
1466 ; MIPS64-NEXT:    sd $7, 24($8)
1467 ; MIPS64-NEXT:    sd $6, 16($8)
1468 ; MIPS64-NEXT:    sd $5, 8($8)
1469 ; MIPS64-NEXT:    jr $ra
1470 ; MIPS64-NEXT:    sd $4, 0($8)
1472 ; MIPS32-LABEL: arg_v2i128:
1473 ; MIPS32:       # %bb.0:
1474 ; MIPS32-NEXT:    lw $1, 16($sp)
1475 ; MIPS32-NEXT:    lw $2, 20($sp)
1476 ; MIPS32-NEXT:    lw $3, 24($sp)
1477 ; MIPS32-NEXT:    lw $8, 32($sp)
1478 ; MIPS32-NEXT:    lw $9, 28($sp)
1479 ; MIPS32-NEXT:    sw $9, 28($8)
1480 ; MIPS32-NEXT:    sw $3, 24($8)
1481 ; MIPS32-NEXT:    sw $2, 20($8)
1482 ; MIPS32-NEXT:    sw $1, 16($8)
1483 ; MIPS32-NEXT:    sw $7, 12($8)
1484 ; MIPS32-NEXT:    sw $6, 8($8)
1485 ; MIPS32-NEXT:    sw $5, 4($8)
1486 ; MIPS32-NEXT:    jr $ra
1487 ; MIPS32-NEXT:    sw $4, 0($8)
1488   store <2 x i128> %vec, ptr %p
1489   ret void
1492 define <2 x i128> @ret_v2i128(ptr %p) {
1493 ; MIPS64-LABEL: ret_v2i128:
1494 ; MIPS64:       # %bb.0:
1495 ; MIPS64-NEXT:    ld $1, 24($5)
1496 ; MIPS64-NEXT:    sd $1, 24($4)
1497 ; MIPS64-NEXT:    ld $1, 16($5)
1498 ; MIPS64-NEXT:    sd $1, 16($4)
1499 ; MIPS64-NEXT:    ld $1, 8($5)
1500 ; MIPS64-NEXT:    sd $1, 8($4)
1501 ; MIPS64-NEXT:    ld $1, 0($5)
1502 ; MIPS64-NEXT:    jr $ra
1503 ; MIPS64-NEXT:    sd $1, 0($4)
1505 ; MIPS32-LABEL: ret_v2i128:
1506 ; MIPS32:       # %bb.0:
1507 ; MIPS32-NEXT:    lw $1, 12($5)
1508 ; MIPS32-NEXT:    lw $2, 16($5)
1509 ; MIPS32-NEXT:    lw $3, 20($5)
1510 ; MIPS32-NEXT:    lw $6, 24($5)
1511 ; MIPS32-NEXT:    lw $7, 28($5)
1512 ; MIPS32-NEXT:    sw $7, 28($4)
1513 ; MIPS32-NEXT:    sw $6, 24($4)
1514 ; MIPS32-NEXT:    sw $3, 20($4)
1515 ; MIPS32-NEXT:    sw $2, 16($4)
1516 ; MIPS32-NEXT:    sw $1, 12($4)
1517 ; MIPS32-NEXT:    lw $1, 8($5)
1518 ; MIPS32-NEXT:    sw $1, 8($4)
1519 ; MIPS32-NEXT:    lw $1, 4($5)
1520 ; MIPS32-NEXT:    sw $1, 4($4)
1521 ; MIPS32-NEXT:    lw $1, 0($5)
1522 ; MIPS32-NEXT:    jr $ra
1523 ; MIPS32-NEXT:    sw $1, 0($4)
1524   %v = load <2 x i128>, ptr %p
1525   ret <2 x i128> %v
1528 define void @call_v2i128(ptr %p) nounwind {
1529 ; MIPS64-LABEL: call_v2i128:
1530 ; MIPS64:       # %bb.0:
1531 ; MIPS64-NEXT:    daddiu $sp, $sp, -64
1532 ; MIPS64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
1533 ; MIPS64-NEXT:    sd $fp, 48($sp) # 8-byte Folded Spill
1534 ; MIPS64-NEXT:    sd $16, 40($sp) # 8-byte Folded Spill
1535 ; MIPS64-NEXT:    move $fp, $sp
1536 ; MIPS64-NEXT:    daddiu $1, $zero, -32
1537 ; MIPS64-NEXT:    move $16, $4
1538 ; MIPS64-NEXT:    ld $7, 24($4)
1539 ; MIPS64-NEXT:    ld $6, 16($4)
1540 ; MIPS64-NEXT:    ld $5, 8($4)
1541 ; MIPS64-NEXT:    ld $4, 0($4)
1542 ; MIPS64-NEXT:    jal arg_v2i128
1543 ; MIPS64-NEXT:    and $sp, $sp, $1
1544 ; MIPS64-NEXT:    jal ret_v2i128
1545 ; MIPS64-NEXT:    daddiu $4, $sp, 0
1546 ; MIPS64-NEXT:    ld $1, 16($sp)
1547 ; MIPS64-NEXT:    sd $1, 16($16)
1548 ; MIPS64-NEXT:    ld $1, 24($sp)
1549 ; MIPS64-NEXT:    sd $1, 24($16)
1550 ; MIPS64-NEXT:    ld $1, 0($sp)
1551 ; MIPS64-NEXT:    sd $1, 0($16)
1552 ; MIPS64-NEXT:    ld $1, 8($sp)
1553 ; MIPS64-NEXT:    sd $1, 8($16)
1554 ; MIPS64-NEXT:    move $sp, $fp
1555 ; MIPS64-NEXT:    ld $16, 40($sp) # 8-byte Folded Reload
1556 ; MIPS64-NEXT:    ld $fp, 48($sp) # 8-byte Folded Reload
1557 ; MIPS64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
1558 ; MIPS64-NEXT:    jr $ra
1559 ; MIPS64-NEXT:    daddiu $sp, $sp, 64
1561 ; MIPS32-LABEL: call_v2i128:
1562 ; MIPS32:       # %bb.0:
1563 ; MIPS32-NEXT:    addiu $sp, $sp, -96
1564 ; MIPS32-NEXT:    sw $ra, 92($sp) # 4-byte Folded Spill
1565 ; MIPS32-NEXT:    sw $fp, 88($sp) # 4-byte Folded Spill
1566 ; MIPS32-NEXT:    sw $16, 84($sp) # 4-byte Folded Spill
1567 ; MIPS32-NEXT:    move $fp, $sp
1568 ; MIPS32-NEXT:    addiu $1, $zero, -32
1569 ; MIPS32-NEXT:    and $sp, $sp, $1
1570 ; MIPS32-NEXT:    move $16, $4
1571 ; MIPS32-NEXT:    lw $7, 12($4)
1572 ; MIPS32-NEXT:    lw $6, 8($4)
1573 ; MIPS32-NEXT:    lw $5, 4($4)
1574 ; MIPS32-NEXT:    lw $4, 0($4)
1575 ; MIPS32-NEXT:    lw $1, 16($16)
1576 ; MIPS32-NEXT:    lw $2, 20($16)
1577 ; MIPS32-NEXT:    lw $3, 24($16)
1578 ; MIPS32-NEXT:    lw $8, 28($16)
1579 ; MIPS32-NEXT:    sw $8, 28($sp)
1580 ; MIPS32-NEXT:    sw $3, 24($sp)
1581 ; MIPS32-NEXT:    sw $2, 20($sp)
1582 ; MIPS32-NEXT:    jal arg_v2i128
1583 ; MIPS32-NEXT:    sw $1, 16($sp)
1584 ; MIPS32-NEXT:    jal ret_v2i128
1585 ; MIPS32-NEXT:    addiu $4, $sp, 32
1586 ; MIPS32-NEXT:    lw $1, 40($sp)
1587 ; MIPS32-NEXT:    lw $2, 52($sp)
1588 ; MIPS32-NEXT:    lw $3, 48($sp)
1589 ; MIPS32-NEXT:    lw $4, 60($sp)
1590 ; MIPS32-NEXT:    lw $5, 56($sp)
1591 ; MIPS32-NEXT:    sw $5, 24($16)
1592 ; MIPS32-NEXT:    sw $4, 28($16)
1593 ; MIPS32-NEXT:    sw $3, 16($16)
1594 ; MIPS32-NEXT:    sw $2, 20($16)
1595 ; MIPS32-NEXT:    sw $1, 8($16)
1596 ; MIPS32-NEXT:    lw $1, 44($sp)
1597 ; MIPS32-NEXT:    sw $1, 12($16)
1598 ; MIPS32-NEXT:    lw $1, 32($sp)
1599 ; MIPS32-NEXT:    sw $1, 0($16)
1600 ; MIPS32-NEXT:    lw $1, 36($sp)
1601 ; MIPS32-NEXT:    sw $1, 4($16)
1602 ; MIPS32-NEXT:    move $sp, $fp
1603 ; MIPS32-NEXT:    lw $16, 84($sp) # 4-byte Folded Reload
1604 ; MIPS32-NEXT:    lw $fp, 88($sp) # 4-byte Folded Reload
1605 ; MIPS32-NEXT:    lw $ra, 92($sp) # 4-byte Folded Reload
1606 ; MIPS32-NEXT:    jr $ra
1607 ; MIPS32-NEXT:    addiu $sp, $sp, 96
1608   %v1 = load <2 x i128>, ptr %p
1609   call void @arg_v2i128(<2 x i128> %v1)
1610   %v2 = call <2 x i128> @ret_v2i128()
1611   store <2 x i128> %v2, ptr %p
1612   ret void
1615 define void @arg_v3i128(<3 x i128> %vec, ptr %p) {
1616 ; MIPS64-LABEL: arg_v3i128:
1617 ; MIPS64:       # %bb.0:
1618 ; MIPS64-NEXT:    sd $9, 40($10)
1619 ; MIPS64-NEXT:    sd $8, 32($10)
1620 ; MIPS64-NEXT:    sd $7, 24($10)
1621 ; MIPS64-NEXT:    sd $6, 16($10)
1622 ; MIPS64-NEXT:    sd $5, 8($10)
1623 ; MIPS64-NEXT:    jr $ra
1624 ; MIPS64-NEXT:    sd $4, 0($10)
1626 ; MIPS32-LABEL: arg_v3i128:
1627 ; MIPS32:       # %bb.0:
1628 ; MIPS32-NEXT:    lw $1, 16($sp)
1629 ; MIPS32-NEXT:    lw $2, 20($sp)
1630 ; MIPS32-NEXT:    lw $3, 24($sp)
1631 ; MIPS32-NEXT:    lw $8, 28($sp)
1632 ; MIPS32-NEXT:    lw $9, 32($sp)
1633 ; MIPS32-NEXT:    lw $10, 36($sp)
1634 ; MIPS32-NEXT:    lw $11, 40($sp)
1635 ; MIPS32-NEXT:    lw $12, 48($sp)
1636 ; MIPS32-NEXT:    lw $13, 44($sp)
1637 ; MIPS32-NEXT:    sw $13, 44($12)
1638 ; MIPS32-NEXT:    sw $11, 40($12)
1639 ; MIPS32-NEXT:    sw $10, 36($12)
1640 ; MIPS32-NEXT:    sw $9, 32($12)
1641 ; MIPS32-NEXT:    sw $8, 28($12)
1642 ; MIPS32-NEXT:    sw $3, 24($12)
1643 ; MIPS32-NEXT:    sw $2, 20($12)
1644 ; MIPS32-NEXT:    sw $1, 16($12)
1645 ; MIPS32-NEXT:    sw $7, 12($12)
1646 ; MIPS32-NEXT:    sw $6, 8($12)
1647 ; MIPS32-NEXT:    sw $5, 4($12)
1648 ; MIPS32-NEXT:    jr $ra
1649 ; MIPS32-NEXT:    sw $4, 0($12)
1650   store <3 x i128> %vec, ptr %p
1651   ret void
1654 define <3 x i128> @ret_v3i128(ptr %p) {
1655 ; MIPS64-LABEL: ret_v3i128:
1656 ; MIPS64:       # %bb.0:
1657 ; MIPS64-NEXT:    ld $1, 24($5)
1658 ; MIPS64-NEXT:    ld $2, 32($5)
1659 ; MIPS64-NEXT:    ld $3, 40($5)
1660 ; MIPS64-NEXT:    sd $3, 40($4)
1661 ; MIPS64-NEXT:    sd $2, 32($4)
1662 ; MIPS64-NEXT:    sd $1, 24($4)
1663 ; MIPS64-NEXT:    ld $1, 16($5)
1664 ; MIPS64-NEXT:    sd $1, 16($4)
1665 ; MIPS64-NEXT:    ld $1, 8($5)
1666 ; MIPS64-NEXT:    sd $1, 8($4)
1667 ; MIPS64-NEXT:    ld $1, 0($5)
1668 ; MIPS64-NEXT:    jr $ra
1669 ; MIPS64-NEXT:    sd $1, 0($4)
1671 ; MIPS32-LABEL: ret_v3i128:
1672 ; MIPS32:       # %bb.0:
1673 ; MIPS32-NEXT:    lw $1, 28($5)
1674 ; MIPS32-NEXT:    lw $2, 32($5)
1675 ; MIPS32-NEXT:    lw $3, 36($5)
1676 ; MIPS32-NEXT:    lw $6, 40($5)
1677 ; MIPS32-NEXT:    lw $7, 12($5)
1678 ; MIPS32-NEXT:    lw $8, 16($5)
1679 ; MIPS32-NEXT:    lw $9, 20($5)
1680 ; MIPS32-NEXT:    lw $10, 24($5)
1681 ; MIPS32-NEXT:    lw $11, 44($5)
1682 ; MIPS32-NEXT:    sw $11, 44($4)
1683 ; MIPS32-NEXT:    sw $6, 40($4)
1684 ; MIPS32-NEXT:    sw $3, 36($4)
1685 ; MIPS32-NEXT:    sw $2, 32($4)
1686 ; MIPS32-NEXT:    sw $1, 28($4)
1687 ; MIPS32-NEXT:    sw $10, 24($4)
1688 ; MIPS32-NEXT:    sw $9, 20($4)
1689 ; MIPS32-NEXT:    sw $8, 16($4)
1690 ; MIPS32-NEXT:    sw $7, 12($4)
1691 ; MIPS32-NEXT:    lw $1, 8($5)
1692 ; MIPS32-NEXT:    sw $1, 8($4)
1693 ; MIPS32-NEXT:    lw $1, 4($5)
1694 ; MIPS32-NEXT:    sw $1, 4($4)
1695 ; MIPS32-NEXT:    lw $1, 0($5)
1696 ; MIPS32-NEXT:    jr $ra
1697 ; MIPS32-NEXT:    sw $1, 0($4)
1698   %v = load <3 x i128>, ptr %p
1699   ret <3 x i128> %v
1702 define void @call_v3i128(ptr %p) nounwind {
1703 ; MIPS64-LABEL: call_v3i128:
1704 ; MIPS64:       # %bb.0:
1705 ; MIPS64-NEXT:    daddiu $sp, $sp, -128
1706 ; MIPS64-NEXT:    sd $ra, 120($sp) # 8-byte Folded Spill
1707 ; MIPS64-NEXT:    sd $fp, 112($sp) # 8-byte Folded Spill
1708 ; MIPS64-NEXT:    sd $16, 104($sp) # 8-byte Folded Spill
1709 ; MIPS64-NEXT:    move $fp, $sp
1710 ; MIPS64-NEXT:    daddiu $1, $zero, -64
1711 ; MIPS64-NEXT:    move $16, $4
1712 ; MIPS64-NEXT:    ld $9, 40($4)
1713 ; MIPS64-NEXT:    ld $8, 32($4)
1714 ; MIPS64-NEXT:    ld $7, 24($4)
1715 ; MIPS64-NEXT:    ld $6, 16($4)
1716 ; MIPS64-NEXT:    ld $5, 8($4)
1717 ; MIPS64-NEXT:    ld $4, 0($4)
1718 ; MIPS64-NEXT:    jal arg_v3i128
1719 ; MIPS64-NEXT:    and $sp, $sp, $1
1720 ; MIPS64-NEXT:    jal ret_v3i128
1721 ; MIPS64-NEXT:    daddiu $4, $sp, 0
1722 ; MIPS64-NEXT:    ld $1, 16($sp)
1723 ; MIPS64-NEXT:    ld $2, 40($sp)
1724 ; MIPS64-NEXT:    ld $3, 32($sp)
1725 ; MIPS64-NEXT:    sd $3, 32($16)
1726 ; MIPS64-NEXT:    sd $2, 40($16)
1727 ; MIPS64-NEXT:    sd $1, 16($16)
1728 ; MIPS64-NEXT:    ld $1, 24($sp)
1729 ; MIPS64-NEXT:    sd $1, 24($16)
1730 ; MIPS64-NEXT:    ld $1, 0($sp)
1731 ; MIPS64-NEXT:    sd $1, 0($16)
1732 ; MIPS64-NEXT:    ld $1, 8($sp)
1733 ; MIPS64-NEXT:    sd $1, 8($16)
1734 ; MIPS64-NEXT:    move $sp, $fp
1735 ; MIPS64-NEXT:    ld $16, 104($sp) # 8-byte Folded Reload
1736 ; MIPS64-NEXT:    ld $fp, 112($sp) # 8-byte Folded Reload
1737 ; MIPS64-NEXT:    ld $ra, 120($sp) # 8-byte Folded Reload
1738 ; MIPS64-NEXT:    jr $ra
1739 ; MIPS64-NEXT:    daddiu $sp, $sp, 128
1741 ; MIPS32-LABEL: call_v3i128:
1742 ; MIPS32:       # %bb.0:
1743 ; MIPS32-NEXT:    addiu $sp, $sp, -192
1744 ; MIPS32-NEXT:    sw $ra, 188($sp) # 4-byte Folded Spill
1745 ; MIPS32-NEXT:    sw $fp, 184($sp) # 4-byte Folded Spill
1746 ; MIPS32-NEXT:    sw $16, 180($sp) # 4-byte Folded Spill
1747 ; MIPS32-NEXT:    move $fp, $sp
1748 ; MIPS32-NEXT:    addiu $1, $zero, -64
1749 ; MIPS32-NEXT:    and $sp, $sp, $1
1750 ; MIPS32-NEXT:    move $16, $4
1751 ; MIPS32-NEXT:    lw $7, 12($4)
1752 ; MIPS32-NEXT:    lw $6, 8($4)
1753 ; MIPS32-NEXT:    lw $5, 4($4)
1754 ; MIPS32-NEXT:    lw $4, 0($4)
1755 ; MIPS32-NEXT:    lw $1, 16($16)
1756 ; MIPS32-NEXT:    lw $2, 20($16)
1757 ; MIPS32-NEXT:    lw $3, 24($16)
1758 ; MIPS32-NEXT:    lw $8, 28($16)
1759 ; MIPS32-NEXT:    lw $9, 32($16)
1760 ; MIPS32-NEXT:    lw $10, 36($16)
1761 ; MIPS32-NEXT:    lw $11, 40($16)
1762 ; MIPS32-NEXT:    lw $12, 44($16)
1763 ; MIPS32-NEXT:    sw $12, 44($sp)
1764 ; MIPS32-NEXT:    sw $11, 40($sp)
1765 ; MIPS32-NEXT:    sw $10, 36($sp)
1766 ; MIPS32-NEXT:    sw $9, 32($sp)
1767 ; MIPS32-NEXT:    sw $8, 28($sp)
1768 ; MIPS32-NEXT:    sw $3, 24($sp)
1769 ; MIPS32-NEXT:    sw $2, 20($sp)
1770 ; MIPS32-NEXT:    jal arg_v3i128
1771 ; MIPS32-NEXT:    sw $1, 16($sp)
1772 ; MIPS32-NEXT:    jal ret_v3i128
1773 ; MIPS32-NEXT:    addiu $4, $sp, 64
1774 ; MIPS32-NEXT:    lw $1, 88($sp)
1775 ; MIPS32-NEXT:    lw $2, 100($sp)
1776 ; MIPS32-NEXT:    lw $3, 96($sp)
1777 ; MIPS32-NEXT:    lw $4, 108($sp)
1778 ; MIPS32-NEXT:    lw $5, 64($sp)
1779 ; MIPS32-NEXT:    lw $6, 84($sp)
1780 ; MIPS32-NEXT:    lw $7, 80($sp)
1781 ; MIPS32-NEXT:    lw $8, 92($sp)
1782 ; MIPS32-NEXT:    lw $9, 104($sp)
1783 ; MIPS32-NEXT:    sw $9, 40($16)
1784 ; MIPS32-NEXT:    sw $4, 44($16)
1785 ; MIPS32-NEXT:    sw $3, 32($16)
1786 ; MIPS32-NEXT:    sw $2, 36($16)
1787 ; MIPS32-NEXT:    sw $1, 24($16)
1788 ; MIPS32-NEXT:    sw $8, 28($16)
1789 ; MIPS32-NEXT:    sw $7, 16($16)
1790 ; MIPS32-NEXT:    sw $6, 20($16)
1791 ; MIPS32-NEXT:    sw $5, 0($16)
1792 ; MIPS32-NEXT:    lw $1, 68($sp)
1793 ; MIPS32-NEXT:    sw $1, 4($16)
1794 ; MIPS32-NEXT:    lw $1, 72($sp)
1795 ; MIPS32-NEXT:    sw $1, 8($16)
1796 ; MIPS32-NEXT:    lw $1, 76($sp)
1797 ; MIPS32-NEXT:    sw $1, 12($16)
1798 ; MIPS32-NEXT:    move $sp, $fp
1799 ; MIPS32-NEXT:    lw $16, 180($sp) # 4-byte Folded Reload
1800 ; MIPS32-NEXT:    lw $fp, 184($sp) # 4-byte Folded Reload
1801 ; MIPS32-NEXT:    lw $ra, 188($sp) # 4-byte Folded Reload
1802 ; MIPS32-NEXT:    jr $ra
1803 ; MIPS32-NEXT:    addiu $sp, $sp, 192
1804   %v1 = load <3 x i128>, ptr %p
1805   call void @arg_v3i128(<3 x i128> %v1)
1806   %v2 = call <3 x i128> @ret_v3i128()
1807   store <3 x i128> %v2, ptr %p
1808   ret void