Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / Mips / cconv / vector.ll
blob5c7c3f424c380fa381a8e0f99af0b5ee1b0c7ea1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32,MIPS32EB
3 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -relocation-model=pic -mcpu=mips64 -disable-mips-delay-filler -mips-jalr-reloc=false | FileCheck %s --check-prefixes=ALL,MIPS64,MIPS64EB
4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32R5,MIPS32R5EB
5 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -relocation-model=pic -mcpu=mips64r5 -mattr=+fp64,+msa -disable-mips-delay-filler -mips-jalr-reloc=false | FileCheck %s --check-prefixes=ALL,MIPS64R5,MIPS64R5EB
6 ; RUN: llc < %s -mtriple=mipsel-unknown-linux-gnu -mcpu=mips32 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32,MIPS32EL
7 ; RUN: llc < %s -mtriple=mips64el-unknown-linux-gnu -relocation-model=pic -mcpu=mips64 -disable-mips-delay-filler -mips-jalr-reloc=false | FileCheck %s --check-prefixes=ALL,MIPS64,MIPS64EL
8 ; RUN: llc < %s -mtriple=mipsel-unknown-linux-gnu -mcpu=mips32r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32R5,MIPS32R5EL
9 ; RUN: llc < %s -mtriple=mips64el-unknown-linux-gnu -relocation-model=pic -mcpu=mips64r5 -mattr=+fp64,+msa -disable-mips-delay-filler -mips-jalr-reloc=false | FileCheck %s --check-prefixes=ALL,MIPS64R5,MIPS64R5EL
11 ; Test that vector types are passed through the integer register set whether or
12 ; not MSA is enabled. This is a ABI requirement for MIPS. For GCC compatibility
13 ; we need to handle any power of 2 number of elements. We will test this
14 ; exhaustively for combinations up to MSA register (128 bits) size.
16 ; First set of tests are for argument passing.
18 define <2 x i8> @i8_2(<2 x i8> %a, <2 x i8> %b) {
19 ; MIPS32EB-LABEL: i8_2:
20 ; MIPS32EB:       # %bb.0:
21 ; MIPS32EB-NEXT:    srl $1, $5, 24
22 ; MIPS32EB-NEXT:    srl $2, $4, 24
23 ; MIPS32EB-NEXT:    addu $1, $2, $1
24 ; MIPS32EB-NEXT:    sll $1, $1, 8
25 ; MIPS32EB-NEXT:    srl $2, $5, 16
26 ; MIPS32EB-NEXT:    srl $3, $4, 16
27 ; MIPS32EB-NEXT:    addu $2, $3, $2
28 ; MIPS32EB-NEXT:    andi $2, $2, 255
29 ; MIPS32EB-NEXT:    or $2, $2, $1
30 ; MIPS32EB-NEXT:    jr $ra
31 ; MIPS32EB-NEXT:    nop
33 ; MIPS64EB-LABEL: i8_2:
34 ; MIPS64EB:       # %bb.0:
35 ; MIPS64EB-NEXT:    dsrl $1, $5, 56
36 ; MIPS64EB-NEXT:    sll $1, $1, 0
37 ; MIPS64EB-NEXT:    dsrl $2, $4, 56
38 ; MIPS64EB-NEXT:    sll $2, $2, 0
39 ; MIPS64EB-NEXT:    addu $1, $2, $1
40 ; MIPS64EB-NEXT:    dsrl $2, $5, 48
41 ; MIPS64EB-NEXT:    sll $1, $1, 8
42 ; MIPS64EB-NEXT:    sll $2, $2, 0
43 ; MIPS64EB-NEXT:    dsrl $3, $4, 48
44 ; MIPS64EB-NEXT:    sll $3, $3, 0
45 ; MIPS64EB-NEXT:    addu $2, $3, $2
46 ; MIPS64EB-NEXT:    andi $2, $2, 255
47 ; MIPS64EB-NEXT:    or $2, $2, $1
48 ; MIPS64EB-NEXT:    jr $ra
49 ; MIPS64EB-NEXT:    nop
51 ; MIPS32R5EB-LABEL: i8_2:
52 ; MIPS32R5EB:       # %bb.0:
53 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -48
54 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 48
55 ; MIPS32R5EB-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
56 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
57 ; MIPS32R5EB-NEXT:    move $fp, $sp
58 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
59 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
60 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
61 ; MIPS32R5EB-NEXT:    sw $5, 36($sp)
62 ; MIPS32R5EB-NEXT:    sw $4, 40($sp)
63 ; MIPS32R5EB-NEXT:    lbu $1, 37($sp)
64 ; MIPS32R5EB-NEXT:    sw $1, 28($sp)
65 ; MIPS32R5EB-NEXT:    lbu $1, 36($sp)
66 ; MIPS32R5EB-NEXT:    sw $1, 20($sp)
67 ; MIPS32R5EB-NEXT:    lbu $1, 41($sp)
68 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
69 ; MIPS32R5EB-NEXT:    lbu $1, 40($sp)
70 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
71 ; MIPS32R5EB-NEXT:    ld.d $w0, 16($sp)
72 ; MIPS32R5EB-NEXT:    ld.d $w1, 0($sp)
73 ; MIPS32R5EB-NEXT:    addv.d $w0, $w1, $w0
74 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
75 ; MIPS32R5EB-NEXT:    copy_s.w $1, $w0[1]
76 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[3]
77 ; MIPS32R5EB-NEXT:    sb $2, 33($sp)
78 ; MIPS32R5EB-NEXT:    sb $1, 32($sp)
79 ; MIPS32R5EB-NEXT:    lhu $2, 32($sp)
80 ; MIPS32R5EB-NEXT:    move $sp, $fp
81 ; MIPS32R5EB-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
82 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 48
83 ; MIPS32R5EB-NEXT:    jr $ra
84 ; MIPS32R5EB-NEXT:    nop
86 ; MIPS64R5EB-LABEL: i8_2:
87 ; MIPS64R5EB:       # %bb.0:
88 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -96
89 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 96
90 ; MIPS64R5EB-NEXT:    sd $4, 88($sp)
91 ; MIPS64R5EB-NEXT:    lbu $1, 89($sp)
92 ; MIPS64R5EB-NEXT:    sh $1, 2($sp)
93 ; MIPS64R5EB-NEXT:    lbu $1, 88($sp)
94 ; MIPS64R5EB-NEXT:    sh $1, 0($sp)
95 ; MIPS64R5EB-NEXT:    ld.h $w0, 0($sp)
96 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w0[0]
97 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w0[1]
98 ; MIPS64R5EB-NEXT:    sd $5, 80($sp)
99 ; MIPS64R5EB-NEXT:    lbu $3, 81($sp)
100 ; MIPS64R5EB-NEXT:    sh $3, 18($sp)
101 ; MIPS64R5EB-NEXT:    lbu $3, 80($sp)
102 ; MIPS64R5EB-NEXT:    sh $3, 16($sp)
103 ; MIPS64R5EB-NEXT:    ld.h $w0, 16($sp)
104 ; MIPS64R5EB-NEXT:    copy_s.h $3, $w0[0]
105 ; MIPS64R5EB-NEXT:    copy_s.h $4, $w0[1]
106 ; MIPS64R5EB-NEXT:    sw $4, 60($sp)
107 ; MIPS64R5EB-NEXT:    sw $3, 52($sp)
108 ; MIPS64R5EB-NEXT:    sw $2, 44($sp)
109 ; MIPS64R5EB-NEXT:    sw $1, 36($sp)
110 ; MIPS64R5EB-NEXT:    ld.d $w0, 48($sp)
111 ; MIPS64R5EB-NEXT:    ld.d $w1, 32($sp)
112 ; MIPS64R5EB-NEXT:    addv.d $w0, $w1, $w0
113 ; MIPS64R5EB-NEXT:    copy_s.d $1, $w0[0]
114 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[1]
115 ; MIPS64R5EB-NEXT:    sb $2, 77($sp)
116 ; MIPS64R5EB-NEXT:    sb $1, 76($sp)
117 ; MIPS64R5EB-NEXT:    lh $2, 76($sp)
118 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 96
119 ; MIPS64R5EB-NEXT:    jr $ra
120 ; MIPS64R5EB-NEXT:    nop
122 ; MIPS32EL-LABEL: i8_2:
123 ; MIPS32EL:       # %bb.0:
124 ; MIPS32EL-NEXT:    addu $1, $4, $5
125 ; MIPS32EL-NEXT:    andi $1, $1, 255
126 ; MIPS32EL-NEXT:    andi $2, $5, 65280
127 ; MIPS32EL-NEXT:    srl $2, $2, 8
128 ; MIPS32EL-NEXT:    andi $3, $4, 65280
129 ; MIPS32EL-NEXT:    srl $3, $3, 8
130 ; MIPS32EL-NEXT:    addu $2, $3, $2
131 ; MIPS32EL-NEXT:    sll $2, $2, 8
132 ; MIPS32EL-NEXT:    or $2, $1, $2
133 ; MIPS32EL-NEXT:    jr $ra
134 ; MIPS32EL-NEXT:    nop
136 ; MIPS64EL-LABEL: i8_2:
137 ; MIPS64EL:       # %bb.0:
138 ; MIPS64EL-NEXT:    sll $1, $5, 0
139 ; MIPS64EL-NEXT:    sll $2, $4, 0
140 ; MIPS64EL-NEXT:    addu $3, $2, $1
141 ; MIPS64EL-NEXT:    andi $3, $3, 255
142 ; MIPS64EL-NEXT:    andi $1, $1, 65280
143 ; MIPS64EL-NEXT:    srl $1, $1, 8
144 ; MIPS64EL-NEXT:    andi $2, $2, 65280
145 ; MIPS64EL-NEXT:    srl $2, $2, 8
146 ; MIPS64EL-NEXT:    addu $1, $2, $1
147 ; MIPS64EL-NEXT:    sll $1, $1, 8
148 ; MIPS64EL-NEXT:    or $2, $3, $1
149 ; MIPS64EL-NEXT:    jr $ra
150 ; MIPS64EL-NEXT:    nop
152 ; MIPS32R5EL-LABEL: i8_2:
153 ; MIPS32R5EL:       # %bb.0:
154 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -48
155 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 48
156 ; MIPS32R5EL-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
157 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
158 ; MIPS32R5EL-NEXT:    move $fp, $sp
159 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
160 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
161 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
162 ; MIPS32R5EL-NEXT:    sw $5, 36($sp)
163 ; MIPS32R5EL-NEXT:    sw $4, 40($sp)
164 ; MIPS32R5EL-NEXT:    lbu $1, 37($sp)
165 ; MIPS32R5EL-NEXT:    sw $1, 24($sp)
166 ; MIPS32R5EL-NEXT:    lbu $1, 36($sp)
167 ; MIPS32R5EL-NEXT:    sw $1, 16($sp)
168 ; MIPS32R5EL-NEXT:    lbu $1, 41($sp)
169 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
170 ; MIPS32R5EL-NEXT:    lbu $1, 40($sp)
171 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
172 ; MIPS32R5EL-NEXT:    ld.d $w0, 16($sp)
173 ; MIPS32R5EL-NEXT:    ld.d $w1, 0($sp)
174 ; MIPS32R5EL-NEXT:    addv.d $w0, $w1, $w0
175 ; MIPS32R5EL-NEXT:    copy_s.w $1, $w0[0]
176 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[2]
177 ; MIPS32R5EL-NEXT:    sb $2, 33($sp)
178 ; MIPS32R5EL-NEXT:    sb $1, 32($sp)
179 ; MIPS32R5EL-NEXT:    lhu $2, 32($sp)
180 ; MIPS32R5EL-NEXT:    move $sp, $fp
181 ; MIPS32R5EL-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
182 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 48
183 ; MIPS32R5EL-NEXT:    jr $ra
184 ; MIPS32R5EL-NEXT:    nop
186 ; MIPS64R5EL-LABEL: i8_2:
187 ; MIPS64R5EL:       # %bb.0:
188 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -96
189 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 96
190 ; MIPS64R5EL-NEXT:    sd $4, 88($sp)
191 ; MIPS64R5EL-NEXT:    lbu $1, 89($sp)
192 ; MIPS64R5EL-NEXT:    sh $1, 2($sp)
193 ; MIPS64R5EL-NEXT:    lbu $1, 88($sp)
194 ; MIPS64R5EL-NEXT:    sh $1, 0($sp)
195 ; MIPS64R5EL-NEXT:    ld.h $w0, 0($sp)
196 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w0[0]
197 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w0[1]
198 ; MIPS64R5EL-NEXT:    sd $5, 80($sp)
199 ; MIPS64R5EL-NEXT:    lbu $3, 81($sp)
200 ; MIPS64R5EL-NEXT:    sh $3, 18($sp)
201 ; MIPS64R5EL-NEXT:    lbu $3, 80($sp)
202 ; MIPS64R5EL-NEXT:    sh $3, 16($sp)
203 ; MIPS64R5EL-NEXT:    ld.h $w0, 16($sp)
204 ; MIPS64R5EL-NEXT:    copy_s.h $3, $w0[0]
205 ; MIPS64R5EL-NEXT:    copy_s.h $4, $w0[1]
206 ; MIPS64R5EL-NEXT:    sw $4, 56($sp)
207 ; MIPS64R5EL-NEXT:    sw $3, 48($sp)
208 ; MIPS64R5EL-NEXT:    sw $2, 40($sp)
209 ; MIPS64R5EL-NEXT:    sw $1, 32($sp)
210 ; MIPS64R5EL-NEXT:    ld.d $w0, 48($sp)
211 ; MIPS64R5EL-NEXT:    ld.d $w1, 32($sp)
212 ; MIPS64R5EL-NEXT:    addv.d $w0, $w1, $w0
213 ; MIPS64R5EL-NEXT:    copy_s.d $1, $w0[0]
214 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[1]
215 ; MIPS64R5EL-NEXT:    sb $2, 77($sp)
216 ; MIPS64R5EL-NEXT:    sb $1, 76($sp)
217 ; MIPS64R5EL-NEXT:    lh $2, 76($sp)
218 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 96
219 ; MIPS64R5EL-NEXT:    jr $ra
220 ; MIPS64R5EL-NEXT:    nop
221   %1 = add <2 x i8> %a, %b
222   ret <2 x i8> %1
225 ; Test that vector spilled to the outgoing argument area have the expected
226 ; offset from $sp.
228 define <2 x i8> @i8x2_7(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g) {
229 ; MIPS32EB-LABEL: i8x2_7:
230 ; MIPS32EB:       # %bb.0: # %entry
231 ; MIPS32EB-NEXT:    srl $1, $5, 24
232 ; MIPS32EB-NEXT:    srl $2, $4, 24
233 ; MIPS32EB-NEXT:    addu $1, $2, $1
234 ; MIPS32EB-NEXT:    srl $2, $6, 24
235 ; MIPS32EB-NEXT:    addu $1, $1, $2
236 ; MIPS32EB-NEXT:    srl $2, $7, 24
237 ; MIPS32EB-NEXT:    addu $1, $1, $2
238 ; MIPS32EB-NEXT:    srl $2, $5, 16
239 ; MIPS32EB-NEXT:    srl $3, $4, 16
240 ; MIPS32EB-NEXT:    addu $2, $3, $2
241 ; MIPS32EB-NEXT:    srl $3, $6, 16
242 ; MIPS32EB-NEXT:    lbu $4, 16($sp)
243 ; MIPS32EB-NEXT:    addu $2, $2, $3
244 ; MIPS32EB-NEXT:    addu $1, $1, $4
245 ; MIPS32EB-NEXT:    lbu $3, 20($sp)
246 ; MIPS32EB-NEXT:    addu $1, $1, $3
247 ; MIPS32EB-NEXT:    lbu $3, 24($sp)
248 ; MIPS32EB-NEXT:    addu $1, $1, $3
249 ; MIPS32EB-NEXT:    srl $3, $7, 16
250 ; MIPS32EB-NEXT:    sll $1, $1, 8
251 ; MIPS32EB-NEXT:    addu $2, $2, $3
252 ; MIPS32EB-NEXT:    lbu $3, 17($sp)
253 ; MIPS32EB-NEXT:    addu $2, $2, $3
254 ; MIPS32EB-NEXT:    lbu $3, 21($sp)
255 ; MIPS32EB-NEXT:    addu $2, $2, $3
256 ; MIPS32EB-NEXT:    lbu $3, 25($sp)
257 ; MIPS32EB-NEXT:    addu $2, $2, $3
258 ; MIPS32EB-NEXT:    andi $2, $2, 255
259 ; MIPS32EB-NEXT:    or $2, $2, $1
260 ; MIPS32EB-NEXT:    jr $ra
261 ; MIPS32EB-NEXT:    nop
263 ; MIPS64EB-LABEL: i8x2_7:
264 ; MIPS64EB:       # %bb.0: # %entry
265 ; MIPS64EB-NEXT:    dsrl $1, $5, 56
266 ; MIPS64EB-NEXT:    dsrl $2, $6, 56
267 ; MIPS64EB-NEXT:    sll $1, $1, 0
268 ; MIPS64EB-NEXT:    dsrl $3, $4, 56
269 ; MIPS64EB-NEXT:    sll $3, $3, 0
270 ; MIPS64EB-NEXT:    addu $1, $3, $1
271 ; MIPS64EB-NEXT:    dsrl $3, $6, 48
272 ; MIPS64EB-NEXT:    sll $2, $2, 0
273 ; MIPS64EB-NEXT:    dsrl $5, $5, 48
274 ; MIPS64EB-NEXT:    sll $5, $5, 0
275 ; MIPS64EB-NEXT:    dsrl $4, $4, 48
276 ; MIPS64EB-NEXT:    sll $4, $4, 0
277 ; MIPS64EB-NEXT:    addu $4, $4, $5
278 ; MIPS64EB-NEXT:    addu $1, $1, $2
279 ; MIPS64EB-NEXT:    dsrl $2, $8, 48
280 ; MIPS64EB-NEXT:    dsrl $5, $8, 56
281 ; MIPS64EB-NEXT:    sll $3, $3, 0
282 ; MIPS64EB-NEXT:    dsrl $6, $7, 56
283 ; MIPS64EB-NEXT:    sll $6, $6, 0
284 ; MIPS64EB-NEXT:    addu $1, $1, $6
285 ; MIPS64EB-NEXT:    addu $3, $4, $3
286 ; MIPS64EB-NEXT:    sll $4, $5, 0
287 ; MIPS64EB-NEXT:    dsrl $5, $7, 48
288 ; MIPS64EB-NEXT:    sll $5, $5, 0
289 ; MIPS64EB-NEXT:    addu $3, $3, $5
290 ; MIPS64EB-NEXT:    dsrl $5, $10, 48
291 ; MIPS64EB-NEXT:    sll $2, $2, 0
292 ; MIPS64EB-NEXT:    dsrl $6, $10, 56
293 ; MIPS64EB-NEXT:    addu $1, $1, $4
294 ; MIPS64EB-NEXT:    dsrl $4, $9, 56
295 ; MIPS64EB-NEXT:    sll $4, $4, 0
296 ; MIPS64EB-NEXT:    addu $1, $1, $4
297 ; MIPS64EB-NEXT:    sll $4, $6, 0
298 ; MIPS64EB-NEXT:    addu $1, $1, $4
299 ; MIPS64EB-NEXT:    sll $1, $1, 8
300 ; MIPS64EB-NEXT:    addu $2, $3, $2
301 ; MIPS64EB-NEXT:    dsrl $3, $9, 48
302 ; MIPS64EB-NEXT:    sll $3, $3, 0
303 ; MIPS64EB-NEXT:    addu $2, $2, $3
304 ; MIPS64EB-NEXT:    sll $3, $5, 0
305 ; MIPS64EB-NEXT:    addu $2, $2, $3
306 ; MIPS64EB-NEXT:    andi $2, $2, 255
307 ; MIPS64EB-NEXT:    or $2, $2, $1
308 ; MIPS64EB-NEXT:    jr $ra
309 ; MIPS64EB-NEXT:    nop
311 ; MIPS32R5EB-LABEL: i8x2_7:
312 ; MIPS32R5EB:       # %bb.0: # %entry
313 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -144
314 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 144
315 ; MIPS32R5EB-NEXT:    sw $fp, 140($sp) # 4-byte Folded Spill
316 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
317 ; MIPS32R5EB-NEXT:    move $fp, $sp
318 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
319 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
320 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
321 ; MIPS32R5EB-NEXT:    sw $5, 132($sp)
322 ; MIPS32R5EB-NEXT:    sw $4, 136($sp)
323 ; MIPS32R5EB-NEXT:    lbu $1, 133($sp)
324 ; MIPS32R5EB-NEXT:    sw $1, 76($sp)
325 ; MIPS32R5EB-NEXT:    lbu $1, 132($sp)
326 ; MIPS32R5EB-NEXT:    sw $1, 68($sp)
327 ; MIPS32R5EB-NEXT:    lbu $1, 137($sp)
328 ; MIPS32R5EB-NEXT:    sw $1, 60($sp)
329 ; MIPS32R5EB-NEXT:    lbu $1, 136($sp)
330 ; MIPS32R5EB-NEXT:    sw $1, 52($sp)
331 ; MIPS32R5EB-NEXT:    ld.d $w0, 64($sp)
332 ; MIPS32R5EB-NEXT:    ld.d $w1, 48($sp)
333 ; MIPS32R5EB-NEXT:    addv.d $w0, $w1, $w0
334 ; MIPS32R5EB-NEXT:    sw $6, 128($sp)
335 ; MIPS32R5EB-NEXT:    lbu $1, 129($sp)
336 ; MIPS32R5EB-NEXT:    sw $1, 92($sp)
337 ; MIPS32R5EB-NEXT:    lbu $1, 128($sp)
338 ; MIPS32R5EB-NEXT:    sw $1, 84($sp)
339 ; MIPS32R5EB-NEXT:    ld.d $w1, 80($sp)
340 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
341 ; MIPS32R5EB-NEXT:    sw $7, 124($sp)
342 ; MIPS32R5EB-NEXT:    lbu $1, 125($sp)
343 ; MIPS32R5EB-NEXT:    sw $1, 108($sp)
344 ; MIPS32R5EB-NEXT:    lbu $1, 124($sp)
345 ; MIPS32R5EB-NEXT:    sw $1, 100($sp)
346 ; MIPS32R5EB-NEXT:    ld.d $w1, 96($sp)
347 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
348 ; MIPS32R5EB-NEXT:    lbu $1, 161($fp)
349 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
350 ; MIPS32R5EB-NEXT:    lbu $1, 160($fp)
351 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
352 ; MIPS32R5EB-NEXT:    ld.d $w1, 0($sp)
353 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
354 ; MIPS32R5EB-NEXT:    lbu $1, 165($fp)
355 ; MIPS32R5EB-NEXT:    sw $1, 28($sp)
356 ; MIPS32R5EB-NEXT:    lbu $1, 164($fp)
357 ; MIPS32R5EB-NEXT:    sw $1, 20($sp)
358 ; MIPS32R5EB-NEXT:    ld.d $w1, 16($sp)
359 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
360 ; MIPS32R5EB-NEXT:    lbu $1, 169($fp)
361 ; MIPS32R5EB-NEXT:    sw $1, 44($sp)
362 ; MIPS32R5EB-NEXT:    lbu $1, 168($fp)
363 ; MIPS32R5EB-NEXT:    sw $1, 36($sp)
364 ; MIPS32R5EB-NEXT:    ld.d $w1, 32($sp)
365 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
366 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
367 ; MIPS32R5EB-NEXT:    copy_s.w $1, $w0[1]
368 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[3]
369 ; MIPS32R5EB-NEXT:    sb $2, 121($sp)
370 ; MIPS32R5EB-NEXT:    sb $1, 120($sp)
371 ; MIPS32R5EB-NEXT:    lhu $2, 120($sp)
372 ; MIPS32R5EB-NEXT:    move $sp, $fp
373 ; MIPS32R5EB-NEXT:    lw $fp, 140($sp) # 4-byte Folded Reload
374 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 144
375 ; MIPS32R5EB-NEXT:    jr $ra
376 ; MIPS32R5EB-NEXT:    nop
378 ; MIPS64R5EB-LABEL: i8x2_7:
379 ; MIPS64R5EB:       # %bb.0: # %entry
380 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -288
381 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 288
382 ; MIPS64R5EB-NEXT:    sd $4, 280($sp)
383 ; MIPS64R5EB-NEXT:    lbu $1, 281($sp)
384 ; MIPS64R5EB-NEXT:    sh $1, 2($sp)
385 ; MIPS64R5EB-NEXT:    lbu $1, 280($sp)
386 ; MIPS64R5EB-NEXT:    sh $1, 0($sp)
387 ; MIPS64R5EB-NEXT:    ld.h $w0, 0($sp)
388 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w0[0]
389 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w0[1]
390 ; MIPS64R5EB-NEXT:    sd $5, 272($sp)
391 ; MIPS64R5EB-NEXT:    lbu $3, 273($sp)
392 ; MIPS64R5EB-NEXT:    sh $3, 18($sp)
393 ; MIPS64R5EB-NEXT:    lbu $3, 272($sp)
394 ; MIPS64R5EB-NEXT:    sh $3, 16($sp)
395 ; MIPS64R5EB-NEXT:    ld.h $w0, 16($sp)
396 ; MIPS64R5EB-NEXT:    copy_s.h $3, $w0[0]
397 ; MIPS64R5EB-NEXT:    copy_s.h $4, $w0[1]
398 ; MIPS64R5EB-NEXT:    sw $4, 140($sp)
399 ; MIPS64R5EB-NEXT:    sw $3, 132($sp)
400 ; MIPS64R5EB-NEXT:    sw $2, 124($sp)
401 ; MIPS64R5EB-NEXT:    sw $1, 116($sp)
402 ; MIPS64R5EB-NEXT:    ld.d $w0, 128($sp)
403 ; MIPS64R5EB-NEXT:    ld.d $w1, 112($sp)
404 ; MIPS64R5EB-NEXT:    addv.d $w0, $w1, $w0
405 ; MIPS64R5EB-NEXT:    sd $6, 264($sp)
406 ; MIPS64R5EB-NEXT:    lbu $1, 265($sp)
407 ; MIPS64R5EB-NEXT:    sh $1, 34($sp)
408 ; MIPS64R5EB-NEXT:    lbu $1, 264($sp)
409 ; MIPS64R5EB-NEXT:    sh $1, 32($sp)
410 ; MIPS64R5EB-NEXT:    ld.h $w1, 32($sp)
411 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w1[0]
412 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w1[1]
413 ; MIPS64R5EB-NEXT:    sw $2, 156($sp)
414 ; MIPS64R5EB-NEXT:    sw $1, 148($sp)
415 ; MIPS64R5EB-NEXT:    ld.d $w1, 144($sp)
416 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
417 ; MIPS64R5EB-NEXT:    sd $7, 256($sp)
418 ; MIPS64R5EB-NEXT:    lbu $1, 257($sp)
419 ; MIPS64R5EB-NEXT:    sh $1, 50($sp)
420 ; MIPS64R5EB-NEXT:    lbu $1, 256($sp)
421 ; MIPS64R5EB-NEXT:    sh $1, 48($sp)
422 ; MIPS64R5EB-NEXT:    ld.h $w1, 48($sp)
423 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w1[0]
424 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w1[1]
425 ; MIPS64R5EB-NEXT:    sw $2, 172($sp)
426 ; MIPS64R5EB-NEXT:    sw $1, 164($sp)
427 ; MIPS64R5EB-NEXT:    ld.d $w1, 160($sp)
428 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
429 ; MIPS64R5EB-NEXT:    sd $8, 248($sp)
430 ; MIPS64R5EB-NEXT:    lbu $1, 249($sp)
431 ; MIPS64R5EB-NEXT:    sh $1, 66($sp)
432 ; MIPS64R5EB-NEXT:    lbu $1, 248($sp)
433 ; MIPS64R5EB-NEXT:    sh $1, 64($sp)
434 ; MIPS64R5EB-NEXT:    ld.h $w1, 64($sp)
435 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w1[0]
436 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w1[1]
437 ; MIPS64R5EB-NEXT:    sw $2, 188($sp)
438 ; MIPS64R5EB-NEXT:    sw $1, 180($sp)
439 ; MIPS64R5EB-NEXT:    ld.d $w1, 176($sp)
440 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
441 ; MIPS64R5EB-NEXT:    sd $10, 232($sp)
442 ; MIPS64R5EB-NEXT:    lbu $1, 233($sp)
443 ; MIPS64R5EB-NEXT:    sh $1, 98($sp)
444 ; MIPS64R5EB-NEXT:    lbu $1, 232($sp)
445 ; MIPS64R5EB-NEXT:    sh $1, 96($sp)
446 ; MIPS64R5EB-NEXT:    ld.h $w1, 96($sp)
447 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w1[0]
448 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w1[1]
449 ; MIPS64R5EB-NEXT:    sd $9, 240($sp)
450 ; MIPS64R5EB-NEXT:    lbu $3, 241($sp)
451 ; MIPS64R5EB-NEXT:    sh $3, 82($sp)
452 ; MIPS64R5EB-NEXT:    lbu $3, 240($sp)
453 ; MIPS64R5EB-NEXT:    sh $3, 80($sp)
454 ; MIPS64R5EB-NEXT:    ld.h $w1, 80($sp)
455 ; MIPS64R5EB-NEXT:    copy_s.h $3, $w1[0]
456 ; MIPS64R5EB-NEXT:    copy_s.h $4, $w1[1]
457 ; MIPS64R5EB-NEXT:    sw $4, 204($sp)
458 ; MIPS64R5EB-NEXT:    sw $3, 196($sp)
459 ; MIPS64R5EB-NEXT:    ld.d $w1, 192($sp)
460 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
461 ; MIPS64R5EB-NEXT:    sw $2, 220($sp)
462 ; MIPS64R5EB-NEXT:    sw $1, 212($sp)
463 ; MIPS64R5EB-NEXT:    ld.d $w1, 208($sp)
464 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
465 ; MIPS64R5EB-NEXT:    copy_s.d $1, $w0[0]
466 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[1]
467 ; MIPS64R5EB-NEXT:    sb $2, 229($sp)
468 ; MIPS64R5EB-NEXT:    sb $1, 228($sp)
469 ; MIPS64R5EB-NEXT:    lh $2, 228($sp)
470 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 288
471 ; MIPS64R5EB-NEXT:    jr $ra
472 ; MIPS64R5EB-NEXT:    nop
474 ; MIPS32EL-LABEL: i8x2_7:
475 ; MIPS32EL:       # %bb.0: # %entry
476 ; MIPS32EL-NEXT:    addu $1, $4, $5
477 ; MIPS32EL-NEXT:    addu $1, $1, $6
478 ; MIPS32EL-NEXT:    addu $1, $1, $7
479 ; MIPS32EL-NEXT:    andi $2, $5, 65280
480 ; MIPS32EL-NEXT:    lbu $3, 16($sp)
481 ; MIPS32EL-NEXT:    addu $1, $1, $3
482 ; MIPS32EL-NEXT:    srl $2, $2, 8
483 ; MIPS32EL-NEXT:    andi $3, $4, 65280
484 ; MIPS32EL-NEXT:    srl $3, $3, 8
485 ; MIPS32EL-NEXT:    addu $2, $3, $2
486 ; MIPS32EL-NEXT:    andi $3, $6, 65280
487 ; MIPS32EL-NEXT:    srl $3, $3, 8
488 ; MIPS32EL-NEXT:    lbu $4, 20($sp)
489 ; MIPS32EL-NEXT:    addu $2, $2, $3
490 ; MIPS32EL-NEXT:    addu $1, $1, $4
491 ; MIPS32EL-NEXT:    lbu $3, 24($sp)
492 ; MIPS32EL-NEXT:    addu $1, $1, $3
493 ; MIPS32EL-NEXT:    andi $3, $7, 65280
494 ; MIPS32EL-NEXT:    srl $3, $3, 8
495 ; MIPS32EL-NEXT:    lbu $4, 25($sp)
496 ; MIPS32EL-NEXT:    andi $1, $1, 255
497 ; MIPS32EL-NEXT:    addu $2, $2, $3
498 ; MIPS32EL-NEXT:    lbu $3, 17($sp)
499 ; MIPS32EL-NEXT:    addu $2, $2, $3
500 ; MIPS32EL-NEXT:    lbu $3, 21($sp)
501 ; MIPS32EL-NEXT:    addu $2, $2, $3
502 ; MIPS32EL-NEXT:    addu $2, $2, $4
503 ; MIPS32EL-NEXT:    sll $2, $2, 8
504 ; MIPS32EL-NEXT:    or $2, $1, $2
505 ; MIPS32EL-NEXT:    jr $ra
506 ; MIPS32EL-NEXT:    nop
508 ; MIPS64EL-LABEL: i8x2_7:
509 ; MIPS64EL:       # %bb.0: # %entry
510 ; MIPS64EL-NEXT:    sll $1, $5, 0
511 ; MIPS64EL-NEXT:    sll $2, $4, 0
512 ; MIPS64EL-NEXT:    addu $3, $2, $1
513 ; MIPS64EL-NEXT:    sll $4, $6, 0
514 ; MIPS64EL-NEXT:    andi $1, $1, 65280
515 ; MIPS64EL-NEXT:    srl $1, $1, 8
516 ; MIPS64EL-NEXT:    andi $2, $2, 65280
517 ; MIPS64EL-NEXT:    srl $2, $2, 8
518 ; MIPS64EL-NEXT:    addu $1, $2, $1
519 ; MIPS64EL-NEXT:    addu $2, $3, $4
520 ; MIPS64EL-NEXT:    sll $3, $7, 0
521 ; MIPS64EL-NEXT:    andi $5, $3, 65280
522 ; MIPS64EL-NEXT:    andi $4, $4, 65280
523 ; MIPS64EL-NEXT:    srl $4, $4, 8
524 ; MIPS64EL-NEXT:    addu $2, $2, $3
525 ; MIPS64EL-NEXT:    addu $1, $1, $4
526 ; MIPS64EL-NEXT:    srl $3, $5, 8
527 ; MIPS64EL-NEXT:    sll $4, $8, 0
528 ; MIPS64EL-NEXT:    andi $5, $4, 65280
529 ; MIPS64EL-NEXT:    srl $5, $5, 8
530 ; MIPS64EL-NEXT:    addu $1, $1, $3
531 ; MIPS64EL-NEXT:    addu $2, $2, $4
532 ; MIPS64EL-NEXT:    sll $3, $9, 0
533 ; MIPS64EL-NEXT:    addu $2, $2, $3
534 ; MIPS64EL-NEXT:    sll $4, $10, 0
535 ; MIPS64EL-NEXT:    addu $2, $2, $4
536 ; MIPS64EL-NEXT:    andi $2, $2, 255
537 ; MIPS64EL-NEXT:    addu $1, $1, $5
538 ; MIPS64EL-NEXT:    andi $3, $3, 65280
539 ; MIPS64EL-NEXT:    srl $3, $3, 8
540 ; MIPS64EL-NEXT:    addu $1, $1, $3
541 ; MIPS64EL-NEXT:    andi $3, $4, 65280
542 ; MIPS64EL-NEXT:    srl $3, $3, 8
543 ; MIPS64EL-NEXT:    addu $1, $1, $3
544 ; MIPS64EL-NEXT:    sll $1, $1, 8
545 ; MIPS64EL-NEXT:    or $2, $2, $1
546 ; MIPS64EL-NEXT:    jr $ra
547 ; MIPS64EL-NEXT:    nop
549 ; MIPS32R5EL-LABEL: i8x2_7:
550 ; MIPS32R5EL:       # %bb.0: # %entry
551 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -144
552 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 144
553 ; MIPS32R5EL-NEXT:    sw $fp, 140($sp) # 4-byte Folded Spill
554 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
555 ; MIPS32R5EL-NEXT:    move $fp, $sp
556 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
557 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
558 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
559 ; MIPS32R5EL-NEXT:    sw $5, 132($sp)
560 ; MIPS32R5EL-NEXT:    sw $4, 136($sp)
561 ; MIPS32R5EL-NEXT:    lbu $1, 133($sp)
562 ; MIPS32R5EL-NEXT:    sw $1, 72($sp)
563 ; MIPS32R5EL-NEXT:    lbu $1, 132($sp)
564 ; MIPS32R5EL-NEXT:    sw $1, 64($sp)
565 ; MIPS32R5EL-NEXT:    lbu $1, 137($sp)
566 ; MIPS32R5EL-NEXT:    sw $1, 56($sp)
567 ; MIPS32R5EL-NEXT:    lbu $1, 136($sp)
568 ; MIPS32R5EL-NEXT:    sw $1, 48($sp)
569 ; MIPS32R5EL-NEXT:    ld.d $w0, 64($sp)
570 ; MIPS32R5EL-NEXT:    ld.d $w1, 48($sp)
571 ; MIPS32R5EL-NEXT:    addv.d $w0, $w1, $w0
572 ; MIPS32R5EL-NEXT:    sw $6, 128($sp)
573 ; MIPS32R5EL-NEXT:    lbu $1, 129($sp)
574 ; MIPS32R5EL-NEXT:    sw $1, 88($sp)
575 ; MIPS32R5EL-NEXT:    lbu $1, 128($sp)
576 ; MIPS32R5EL-NEXT:    sw $1, 80($sp)
577 ; MIPS32R5EL-NEXT:    ld.d $w1, 80($sp)
578 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
579 ; MIPS32R5EL-NEXT:    sw $7, 124($sp)
580 ; MIPS32R5EL-NEXT:    lbu $1, 125($sp)
581 ; MIPS32R5EL-NEXT:    sw $1, 104($sp)
582 ; MIPS32R5EL-NEXT:    lbu $1, 124($sp)
583 ; MIPS32R5EL-NEXT:    sw $1, 96($sp)
584 ; MIPS32R5EL-NEXT:    ld.d $w1, 96($sp)
585 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
586 ; MIPS32R5EL-NEXT:    lbu $1, 161($fp)
587 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
588 ; MIPS32R5EL-NEXT:    lbu $1, 160($fp)
589 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
590 ; MIPS32R5EL-NEXT:    ld.d $w1, 0($sp)
591 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
592 ; MIPS32R5EL-NEXT:    lbu $1, 165($fp)
593 ; MIPS32R5EL-NEXT:    sw $1, 24($sp)
594 ; MIPS32R5EL-NEXT:    lbu $1, 164($fp)
595 ; MIPS32R5EL-NEXT:    sw $1, 16($sp)
596 ; MIPS32R5EL-NEXT:    ld.d $w1, 16($sp)
597 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
598 ; MIPS32R5EL-NEXT:    lbu $1, 169($fp)
599 ; MIPS32R5EL-NEXT:    sw $1, 40($sp)
600 ; MIPS32R5EL-NEXT:    lbu $1, 168($fp)
601 ; MIPS32R5EL-NEXT:    sw $1, 32($sp)
602 ; MIPS32R5EL-NEXT:    ld.d $w1, 32($sp)
603 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
604 ; MIPS32R5EL-NEXT:    copy_s.w $1, $w0[0]
605 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[2]
606 ; MIPS32R5EL-NEXT:    sb $2, 121($sp)
607 ; MIPS32R5EL-NEXT:    sb $1, 120($sp)
608 ; MIPS32R5EL-NEXT:    lhu $2, 120($sp)
609 ; MIPS32R5EL-NEXT:    move $sp, $fp
610 ; MIPS32R5EL-NEXT:    lw $fp, 140($sp) # 4-byte Folded Reload
611 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 144
612 ; MIPS32R5EL-NEXT:    jr $ra
613 ; MIPS32R5EL-NEXT:    nop
615 ; MIPS64R5EL-LABEL: i8x2_7:
616 ; MIPS64R5EL:       # %bb.0: # %entry
617 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -288
618 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 288
619 ; MIPS64R5EL-NEXT:    sd $4, 280($sp)
620 ; MIPS64R5EL-NEXT:    lbu $1, 281($sp)
621 ; MIPS64R5EL-NEXT:    sh $1, 2($sp)
622 ; MIPS64R5EL-NEXT:    lbu $1, 280($sp)
623 ; MIPS64R5EL-NEXT:    sh $1, 0($sp)
624 ; MIPS64R5EL-NEXT:    ld.h $w0, 0($sp)
625 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w0[0]
626 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w0[1]
627 ; MIPS64R5EL-NEXT:    sd $5, 272($sp)
628 ; MIPS64R5EL-NEXT:    lbu $3, 273($sp)
629 ; MIPS64R5EL-NEXT:    sh $3, 18($sp)
630 ; MIPS64R5EL-NEXT:    lbu $3, 272($sp)
631 ; MIPS64R5EL-NEXT:    sh $3, 16($sp)
632 ; MIPS64R5EL-NEXT:    ld.h $w0, 16($sp)
633 ; MIPS64R5EL-NEXT:    copy_s.h $3, $w0[0]
634 ; MIPS64R5EL-NEXT:    copy_s.h $4, $w0[1]
635 ; MIPS64R5EL-NEXT:    sw $4, 136($sp)
636 ; MIPS64R5EL-NEXT:    sw $3, 128($sp)
637 ; MIPS64R5EL-NEXT:    sw $2, 120($sp)
638 ; MIPS64R5EL-NEXT:    sw $1, 112($sp)
639 ; MIPS64R5EL-NEXT:    ld.d $w0, 128($sp)
640 ; MIPS64R5EL-NEXT:    ld.d $w1, 112($sp)
641 ; MIPS64R5EL-NEXT:    addv.d $w0, $w1, $w0
642 ; MIPS64R5EL-NEXT:    sd $6, 264($sp)
643 ; MIPS64R5EL-NEXT:    lbu $1, 265($sp)
644 ; MIPS64R5EL-NEXT:    sh $1, 34($sp)
645 ; MIPS64R5EL-NEXT:    lbu $1, 264($sp)
646 ; MIPS64R5EL-NEXT:    sh $1, 32($sp)
647 ; MIPS64R5EL-NEXT:    ld.h $w1, 32($sp)
648 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w1[0]
649 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w1[1]
650 ; MIPS64R5EL-NEXT:    sw $2, 152($sp)
651 ; MIPS64R5EL-NEXT:    sw $1, 144($sp)
652 ; MIPS64R5EL-NEXT:    ld.d $w1, 144($sp)
653 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
654 ; MIPS64R5EL-NEXT:    sd $7, 256($sp)
655 ; MIPS64R5EL-NEXT:    lbu $1, 257($sp)
656 ; MIPS64R5EL-NEXT:    sh $1, 50($sp)
657 ; MIPS64R5EL-NEXT:    lbu $1, 256($sp)
658 ; MIPS64R5EL-NEXT:    sh $1, 48($sp)
659 ; MIPS64R5EL-NEXT:    ld.h $w1, 48($sp)
660 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w1[0]
661 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w1[1]
662 ; MIPS64R5EL-NEXT:    sw $2, 168($sp)
663 ; MIPS64R5EL-NEXT:    sw $1, 160($sp)
664 ; MIPS64R5EL-NEXT:    ld.d $w1, 160($sp)
665 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
666 ; MIPS64R5EL-NEXT:    sd $8, 248($sp)
667 ; MIPS64R5EL-NEXT:    lbu $1, 249($sp)
668 ; MIPS64R5EL-NEXT:    sh $1, 66($sp)
669 ; MIPS64R5EL-NEXT:    lbu $1, 248($sp)
670 ; MIPS64R5EL-NEXT:    sh $1, 64($sp)
671 ; MIPS64R5EL-NEXT:    ld.h $w1, 64($sp)
672 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w1[0]
673 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w1[1]
674 ; MIPS64R5EL-NEXT:    sw $2, 184($sp)
675 ; MIPS64R5EL-NEXT:    sw $1, 176($sp)
676 ; MIPS64R5EL-NEXT:    ld.d $w1, 176($sp)
677 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
678 ; MIPS64R5EL-NEXT:    sd $10, 232($sp)
679 ; MIPS64R5EL-NEXT:    lbu $1, 233($sp)
680 ; MIPS64R5EL-NEXT:    sh $1, 98($sp)
681 ; MIPS64R5EL-NEXT:    lbu $1, 232($sp)
682 ; MIPS64R5EL-NEXT:    sh $1, 96($sp)
683 ; MIPS64R5EL-NEXT:    ld.h $w1, 96($sp)
684 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w1[0]
685 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w1[1]
686 ; MIPS64R5EL-NEXT:    sd $9, 240($sp)
687 ; MIPS64R5EL-NEXT:    lbu $3, 241($sp)
688 ; MIPS64R5EL-NEXT:    sh $3, 82($sp)
689 ; MIPS64R5EL-NEXT:    lbu $3, 240($sp)
690 ; MIPS64R5EL-NEXT:    sh $3, 80($sp)
691 ; MIPS64R5EL-NEXT:    ld.h $w1, 80($sp)
692 ; MIPS64R5EL-NEXT:    copy_s.h $3, $w1[0]
693 ; MIPS64R5EL-NEXT:    copy_s.h $4, $w1[1]
694 ; MIPS64R5EL-NEXT:    sw $4, 200($sp)
695 ; MIPS64R5EL-NEXT:    sw $3, 192($sp)
696 ; MIPS64R5EL-NEXT:    ld.d $w1, 192($sp)
697 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
698 ; MIPS64R5EL-NEXT:    sw $2, 216($sp)
699 ; MIPS64R5EL-NEXT:    sw $1, 208($sp)
700 ; MIPS64R5EL-NEXT:    ld.d $w1, 208($sp)
701 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
702 ; MIPS64R5EL-NEXT:    copy_s.d $1, $w0[0]
703 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[1]
704 ; MIPS64R5EL-NEXT:    sb $2, 229($sp)
705 ; MIPS64R5EL-NEXT:    sb $1, 228($sp)
706 ; MIPS64R5EL-NEXT:    lh $2, 228($sp)
707 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 288
708 ; MIPS64R5EL-NEXT:    jr $ra
709 ; MIPS64R5EL-NEXT:    nop
710 entry:
711   %0 = add <2 x i8> %a, %b
712   %1 = add <2 x i8> %0, %c
713   %2 = add <2 x i8> %1, %d
714   %3 = add <2 x i8> %2, %e
715   %4 = add <2 x i8> %3, %f
716   %5 = add <2 x i8> %4, %g
717   ret <2 x i8> %5
720 define <4 x i8> @i8_4(<4 x i8> %a, <4 x i8> %b) {
721 ; MIPS32-LABEL: i8_4:
722 ; MIPS32:       # %bb.0:
723 ; MIPS32-NEXT:    srl $1, $5, 24
724 ; MIPS32-NEXT:    srl $2, $4, 24
725 ; MIPS32-NEXT:    addu $1, $2, $1
726 ; MIPS32-NEXT:    sll $1, $1, 8
727 ; MIPS32-NEXT:    srl $2, $5, 16
728 ; MIPS32-NEXT:    srl $3, $4, 16
729 ; MIPS32-NEXT:    addu $2, $3, $2
730 ; MIPS32-NEXT:    andi $2, $2, 255
731 ; MIPS32-NEXT:    or $1, $2, $1
732 ; MIPS32-NEXT:    addu $2, $4, $5
733 ; MIPS32-NEXT:    sll $1, $1, 16
734 ; MIPS32-NEXT:    andi $2, $2, 255
735 ; MIPS32-NEXT:    srl $3, $5, 8
736 ; MIPS32-NEXT:    srl $4, $4, 8
737 ; MIPS32-NEXT:    addu $3, $4, $3
738 ; MIPS32-NEXT:    sll $3, $3, 8
739 ; MIPS32-NEXT:    or $2, $2, $3
740 ; MIPS32-NEXT:    andi $2, $2, 65535
741 ; MIPS32-NEXT:    or $2, $2, $1
742 ; MIPS32-NEXT:    jr $ra
743 ; MIPS32-NEXT:    nop
745 ; MIPS64-LABEL: i8_4:
746 ; MIPS64:       # %bb.0:
747 ; MIPS64-NEXT:    sll $1, $5, 0
748 ; MIPS64-NEXT:    srl $2, $1, 24
749 ; MIPS64-NEXT:    sll $3, $4, 0
750 ; MIPS64-NEXT:    srl $4, $3, 24
751 ; MIPS64-NEXT:    addu $2, $4, $2
752 ; MIPS64-NEXT:    sll $2, $2, 8
753 ; MIPS64-NEXT:    srl $4, $1, 16
754 ; MIPS64-NEXT:    srl $5, $3, 16
755 ; MIPS64-NEXT:    addu $4, $5, $4
756 ; MIPS64-NEXT:    andi $4, $4, 255
757 ; MIPS64-NEXT:    or $2, $4, $2
758 ; MIPS64-NEXT:    addu $4, $3, $1
759 ; MIPS64-NEXT:    sll $2, $2, 16
760 ; MIPS64-NEXT:    andi $4, $4, 255
761 ; MIPS64-NEXT:    srl $1, $1, 8
762 ; MIPS64-NEXT:    srl $3, $3, 8
763 ; MIPS64-NEXT:    addu $1, $3, $1
764 ; MIPS64-NEXT:    sll $1, $1, 8
765 ; MIPS64-NEXT:    or $1, $4, $1
766 ; MIPS64-NEXT:    andi $1, $1, 65535
767 ; MIPS64-NEXT:    or $2, $1, $2
768 ; MIPS64-NEXT:    jr $ra
769 ; MIPS64-NEXT:    nop
771 ; MIPS32R5-LABEL: i8_4:
772 ; MIPS32R5:       # %bb.0:
773 ; MIPS32R5-NEXT:    addiu $sp, $sp, -16
774 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 16
775 ; MIPS32R5-NEXT:    sw $5, 8($sp)
776 ; MIPS32R5-NEXT:    sw $4, 12($sp)
777 ; MIPS32R5-NEXT:    ldi.b $w0, 0
778 ; MIPS32R5-NEXT:    lbu $1, 9($sp)
779 ; MIPS32R5-NEXT:    lbu $2, 8($sp)
780 ; MIPS32R5-NEXT:    move.v $w1, $w0
781 ; MIPS32R5-NEXT:    insert.w $w1[0], $2
782 ; MIPS32R5-NEXT:    insert.w $w1[1], $1
783 ; MIPS32R5-NEXT:    lbu $1, 10($sp)
784 ; MIPS32R5-NEXT:    insert.w $w1[2], $1
785 ; MIPS32R5-NEXT:    lbu $1, 12($sp)
786 ; MIPS32R5-NEXT:    lbu $2, 11($sp)
787 ; MIPS32R5-NEXT:    insert.w $w1[3], $2
788 ; MIPS32R5-NEXT:    insert.w $w0[0], $1
789 ; MIPS32R5-NEXT:    lbu $1, 13($sp)
790 ; MIPS32R5-NEXT:    insert.w $w0[1], $1
791 ; MIPS32R5-NEXT:    lbu $1, 14($sp)
792 ; MIPS32R5-NEXT:    insert.w $w0[2], $1
793 ; MIPS32R5-NEXT:    lbu $1, 15($sp)
794 ; MIPS32R5-NEXT:    insert.w $w0[3], $1
795 ; MIPS32R5-NEXT:    addv.w $w0, $w0, $w1
796 ; MIPS32R5-NEXT:    copy_s.w $1, $w0[0]
797 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[1]
798 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[2]
799 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[3]
800 ; MIPS32R5-NEXT:    sb $4, 7($sp)
801 ; MIPS32R5-NEXT:    sb $3, 6($sp)
802 ; MIPS32R5-NEXT:    sb $2, 5($sp)
803 ; MIPS32R5-NEXT:    sb $1, 4($sp)
804 ; MIPS32R5-NEXT:    lw $2, 4($sp)
805 ; MIPS32R5-NEXT:    addiu $sp, $sp, 16
806 ; MIPS32R5-NEXT:    jr $ra
807 ; MIPS32R5-NEXT:    nop
809 ; MIPS64R5-LABEL: i8_4:
810 ; MIPS64R5:       # %bb.0:
811 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
812 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
813 ; MIPS64R5-NEXT:    sll $1, $5, 0
814 ; MIPS64R5-NEXT:    sw $1, 8($sp)
815 ; MIPS64R5-NEXT:    sll $1, $4, 0
816 ; MIPS64R5-NEXT:    sw $1, 12($sp)
817 ; MIPS64R5-NEXT:    ldi.b $w0, 0
818 ; MIPS64R5-NEXT:    lbu $1, 9($sp)
819 ; MIPS64R5-NEXT:    lbu $2, 8($sp)
820 ; MIPS64R5-NEXT:    move.v $w1, $w0
821 ; MIPS64R5-NEXT:    insert.w $w1[0], $2
822 ; MIPS64R5-NEXT:    insert.w $w1[1], $1
823 ; MIPS64R5-NEXT:    lbu $1, 10($sp)
824 ; MIPS64R5-NEXT:    insert.w $w1[2], $1
825 ; MIPS64R5-NEXT:    lbu $1, 12($sp)
826 ; MIPS64R5-NEXT:    lbu $2, 11($sp)
827 ; MIPS64R5-NEXT:    insert.w $w1[3], $2
828 ; MIPS64R5-NEXT:    insert.w $w0[0], $1
829 ; MIPS64R5-NEXT:    lbu $1, 13($sp)
830 ; MIPS64R5-NEXT:    insert.w $w0[1], $1
831 ; MIPS64R5-NEXT:    lbu $1, 14($sp)
832 ; MIPS64R5-NEXT:    insert.w $w0[2], $1
833 ; MIPS64R5-NEXT:    lbu $1, 15($sp)
834 ; MIPS64R5-NEXT:    insert.w $w0[3], $1
835 ; MIPS64R5-NEXT:    addv.w $w0, $w0, $w1
836 ; MIPS64R5-NEXT:    copy_s.w $1, $w0[0]
837 ; MIPS64R5-NEXT:    copy_s.w $2, $w0[1]
838 ; MIPS64R5-NEXT:    copy_s.w $3, $w0[2]
839 ; MIPS64R5-NEXT:    copy_s.w $4, $w0[3]
840 ; MIPS64R5-NEXT:    sb $4, 7($sp)
841 ; MIPS64R5-NEXT:    sb $3, 6($sp)
842 ; MIPS64R5-NEXT:    sb $2, 5($sp)
843 ; MIPS64R5-NEXT:    sb $1, 4($sp)
844 ; MIPS64R5-NEXT:    lw $2, 4($sp)
845 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
846 ; MIPS64R5-NEXT:    jr $ra
847 ; MIPS64R5-NEXT:    nop
848   %1 = add <4 x i8> %a, %b
849   ret <4 x i8> %1
852 define <8 x i8> @i8_8(<8 x i8> %a, <8 x i8> %b) {
853 ; MIPS32-LABEL: i8_8:
854 ; MIPS32:       # %bb.0:
855 ; MIPS32-NEXT:    srl $1, $6, 24
856 ; MIPS32-NEXT:    srl $2, $4, 24
857 ; MIPS32-NEXT:    addu $1, $2, $1
858 ; MIPS32-NEXT:    sll $1, $1, 8
859 ; MIPS32-NEXT:    srl $2, $6, 16
860 ; MIPS32-NEXT:    srl $3, $4, 16
861 ; MIPS32-NEXT:    addu $2, $3, $2
862 ; MIPS32-NEXT:    andi $2, $2, 255
863 ; MIPS32-NEXT:    srl $3, $7, 24
864 ; MIPS32-NEXT:    srl $8, $5, 24
865 ; MIPS32-NEXT:    or $1, $2, $1
866 ; MIPS32-NEXT:    addu $2, $8, $3
867 ; MIPS32-NEXT:    addu $3, $4, $6
868 ; MIPS32-NEXT:    sll $2, $2, 8
869 ; MIPS32-NEXT:    srl $8, $7, 16
870 ; MIPS32-NEXT:    srl $9, $5, 16
871 ; MIPS32-NEXT:    addu $8, $9, $8
872 ; MIPS32-NEXT:    andi $8, $8, 255
873 ; MIPS32-NEXT:    or $8, $8, $2
874 ; MIPS32-NEXT:    sll $1, $1, 16
875 ; MIPS32-NEXT:    andi $2, $3, 255
876 ; MIPS32-NEXT:    srl $3, $6, 8
877 ; MIPS32-NEXT:    srl $4, $4, 8
878 ; MIPS32-NEXT:    addu $3, $4, $3
879 ; MIPS32-NEXT:    sll $3, $3, 8
880 ; MIPS32-NEXT:    or $2, $2, $3
881 ; MIPS32-NEXT:    andi $2, $2, 65535
882 ; MIPS32-NEXT:    addu $3, $5, $7
883 ; MIPS32-NEXT:    or $2, $2, $1
884 ; MIPS32-NEXT:    sll $1, $8, 16
885 ; MIPS32-NEXT:    andi $3, $3, 255
886 ; MIPS32-NEXT:    srl $4, $7, 8
887 ; MIPS32-NEXT:    srl $5, $5, 8
888 ; MIPS32-NEXT:    addu $4, $5, $4
889 ; MIPS32-NEXT:    sll $4, $4, 8
890 ; MIPS32-NEXT:    or $3, $3, $4
891 ; MIPS32-NEXT:    andi $3, $3, 65535
892 ; MIPS32-NEXT:    or $3, $3, $1
893 ; MIPS32-NEXT:    jr $ra
894 ; MIPS32-NEXT:    nop
896 ; MIPS64-LABEL: i8_8:
897 ; MIPS64:       # %bb.0:
898 ; MIPS64-NEXT:    dsrl $1, $5, 56
899 ; MIPS64-NEXT:    sll $1, $1, 0
900 ; MIPS64-NEXT:    dsrl $2, $4, 56
901 ; MIPS64-NEXT:    sll $2, $2, 0
902 ; MIPS64-NEXT:    addu $1, $2, $1
903 ; MIPS64-NEXT:    dsrl $2, $5, 48
904 ; MIPS64-NEXT:    sll $1, $1, 8
905 ; MIPS64-NEXT:    sll $2, $2, 0
906 ; MIPS64-NEXT:    dsrl $3, $4, 48
907 ; MIPS64-NEXT:    sll $3, $3, 0
908 ; MIPS64-NEXT:    addu $2, $3, $2
909 ; MIPS64-NEXT:    andi $2, $2, 255
910 ; MIPS64-NEXT:    dsrl $3, $5, 40
911 ; MIPS64-NEXT:    or $1, $2, $1
912 ; MIPS64-NEXT:    sll $2, $5, 0
913 ; MIPS64-NEXT:    sll $3, $3, 0
914 ; MIPS64-NEXT:    dsrl $6, $4, 40
915 ; MIPS64-NEXT:    sll $6, $6, 0
916 ; MIPS64-NEXT:    addu $3, $6, $3
917 ; MIPS64-NEXT:    dsrl $5, $5, 32
918 ; MIPS64-NEXT:    srl $6, $2, 24
919 ; MIPS64-NEXT:    sll $7, $4, 0
920 ; MIPS64-NEXT:    srl $8, $7, 24
921 ; MIPS64-NEXT:    addu $6, $8, $6
922 ; MIPS64-NEXT:    sll $1, $1, 16
923 ; MIPS64-NEXT:    sll $3, $3, 8
924 ; MIPS64-NEXT:    sll $5, $5, 0
925 ; MIPS64-NEXT:    dsrl $4, $4, 32
926 ; MIPS64-NEXT:    sll $4, $4, 0
927 ; MIPS64-NEXT:    addu $4, $4, $5
928 ; MIPS64-NEXT:    andi $4, $4, 255
929 ; MIPS64-NEXT:    or $3, $4, $3
930 ; MIPS64-NEXT:    andi $3, $3, 65535
931 ; MIPS64-NEXT:    or $1, $3, $1
932 ; MIPS64-NEXT:    sll $3, $6, 8
933 ; MIPS64-NEXT:    srl $4, $2, 16
934 ; MIPS64-NEXT:    srl $5, $7, 16
935 ; MIPS64-NEXT:    addu $4, $5, $4
936 ; MIPS64-NEXT:    andi $4, $4, 255
937 ; MIPS64-NEXT:    or $3, $4, $3
938 ; MIPS64-NEXT:    addu $4, $7, $2
939 ; MIPS64-NEXT:    dsll $1, $1, 32
940 ; MIPS64-NEXT:    sll $3, $3, 16
941 ; MIPS64-NEXT:    andi $4, $4, 255
942 ; MIPS64-NEXT:    srl $2, $2, 8
943 ; MIPS64-NEXT:    srl $5, $7, 8
944 ; MIPS64-NEXT:    addu $2, $5, $2
945 ; MIPS64-NEXT:    sll $2, $2, 8
946 ; MIPS64-NEXT:    or $2, $4, $2
947 ; MIPS64-NEXT:    andi $2, $2, 65535
948 ; MIPS64-NEXT:    or $2, $2, $3
949 ; MIPS64-NEXT:    dsll $2, $2, 32
950 ; MIPS64-NEXT:    dsrl $2, $2, 32
951 ; MIPS64-NEXT:    or $2, $2, $1
952 ; MIPS64-NEXT:    jr $ra
953 ; MIPS64-NEXT:    nop
955 ; MIPS32R5EB-LABEL: i8_8:
956 ; MIPS32R5EB:       # %bb.0:
957 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -48
958 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 48
959 ; MIPS32R5EB-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
960 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
961 ; MIPS32R5EB-NEXT:    move $fp, $sp
962 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
963 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
964 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
965 ; MIPS32R5EB-NEXT:    sw $6, 24($sp)
966 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
967 ; MIPS32R5EB-NEXT:    lbu $1, 25($sp)
968 ; MIPS32R5EB-NEXT:    lbu $2, 24($sp)
969 ; MIPS32R5EB-NEXT:    sw $7, 28($sp)
970 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
971 ; MIPS32R5EB-NEXT:    insert.h $w1[0], $2
972 ; MIPS32R5EB-NEXT:    insert.h $w1[1], $1
973 ; MIPS32R5EB-NEXT:    lbu $1, 26($sp)
974 ; MIPS32R5EB-NEXT:    sw $4, 32($sp)
975 ; MIPS32R5EB-NEXT:    insert.h $w1[2], $1
976 ; MIPS32R5EB-NEXT:    lbu $1, 27($sp)
977 ; MIPS32R5EB-NEXT:    insert.h $w1[3], $1
978 ; MIPS32R5EB-NEXT:    lbu $1, 28($sp)
979 ; MIPS32R5EB-NEXT:    sw $5, 36($sp)
980 ; MIPS32R5EB-NEXT:    insert.h $w1[4], $1
981 ; MIPS32R5EB-NEXT:    lbu $1, 32($sp)
982 ; MIPS32R5EB-NEXT:    insert.h $w0[0], $1
983 ; MIPS32R5EB-NEXT:    lbu $1, 33($sp)
984 ; MIPS32R5EB-NEXT:    insert.h $w0[1], $1
985 ; MIPS32R5EB-NEXT:    lbu $1, 29($sp)
986 ; MIPS32R5EB-NEXT:    lbu $2, 34($sp)
987 ; MIPS32R5EB-NEXT:    insert.h $w0[2], $2
988 ; MIPS32R5EB-NEXT:    insert.h $w1[5], $1
989 ; MIPS32R5EB-NEXT:    lbu $1, 35($sp)
990 ; MIPS32R5EB-NEXT:    lbu $2, 31($sp)
991 ; MIPS32R5EB-NEXT:    lbu $3, 30($sp)
992 ; MIPS32R5EB-NEXT:    lbu $4, 39($sp)
993 ; MIPS32R5EB-NEXT:    insert.h $w1[6], $3
994 ; MIPS32R5EB-NEXT:    insert.h $w1[7], $2
995 ; MIPS32R5EB-NEXT:    insert.h $w0[3], $1
996 ; MIPS32R5EB-NEXT:    lbu $1, 36($sp)
997 ; MIPS32R5EB-NEXT:    insert.h $w0[4], $1
998 ; MIPS32R5EB-NEXT:    lbu $1, 37($sp)
999 ; MIPS32R5EB-NEXT:    insert.h $w0[5], $1
1000 ; MIPS32R5EB-NEXT:    lbu $1, 38($sp)
1001 ; MIPS32R5EB-NEXT:    insert.h $w0[6], $1
1002 ; MIPS32R5EB-NEXT:    insert.h $w0[7], $4
1003 ; MIPS32R5EB-NEXT:    addv.h $w0, $w0, $w1
1004 ; MIPS32R5EB-NEXT:    copy_s.h $1, $w0[0]
1005 ; MIPS32R5EB-NEXT:    copy_s.h $2, $w0[1]
1006 ; MIPS32R5EB-NEXT:    copy_s.h $3, $w0[2]
1007 ; MIPS32R5EB-NEXT:    copy_s.h $4, $w0[3]
1008 ; MIPS32R5EB-NEXT:    copy_s.h $5, $w0[4]
1009 ; MIPS32R5EB-NEXT:    copy_s.h $6, $w0[5]
1010 ; MIPS32R5EB-NEXT:    copy_s.h $7, $w0[6]
1011 ; MIPS32R5EB-NEXT:    copy_s.h $8, $w0[7]
1012 ; MIPS32R5EB-NEXT:    sb $8, 23($sp)
1013 ; MIPS32R5EB-NEXT:    sb $7, 22($sp)
1014 ; MIPS32R5EB-NEXT:    sb $6, 21($sp)
1015 ; MIPS32R5EB-NEXT:    sb $5, 20($sp)
1016 ; MIPS32R5EB-NEXT:    sb $4, 19($sp)
1017 ; MIPS32R5EB-NEXT:    sb $3, 18($sp)
1018 ; MIPS32R5EB-NEXT:    sb $2, 17($sp)
1019 ; MIPS32R5EB-NEXT:    sb $1, 16($sp)
1020 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
1021 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
1022 ; MIPS32R5EB-NEXT:    lw $1, 16($sp)
1023 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
1024 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($sp)
1025 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
1026 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
1027 ; MIPS32R5EB-NEXT:    move $sp, $fp
1028 ; MIPS32R5EB-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1029 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 48
1030 ; MIPS32R5EB-NEXT:    jr $ra
1031 ; MIPS32R5EB-NEXT:    nop
1033 ; MIPS64R5-LABEL: i8_8:
1034 ; MIPS64R5:       # %bb.0:
1035 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -32
1036 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 32
1037 ; MIPS64R5-NEXT:    sd $5, 16($sp)
1038 ; MIPS64R5-NEXT:    ldi.b $w0, 0
1039 ; MIPS64R5-NEXT:    lbu $1, 17($sp)
1040 ; MIPS64R5-NEXT:    lbu $2, 16($sp)
1041 ; MIPS64R5-NEXT:    sd $4, 24($sp)
1042 ; MIPS64R5-NEXT:    move.v $w1, $w0
1043 ; MIPS64R5-NEXT:    insert.h $w1[0], $2
1044 ; MIPS64R5-NEXT:    insert.h $w1[1], $1
1045 ; MIPS64R5-NEXT:    lbu $1, 18($sp)
1046 ; MIPS64R5-NEXT:    insert.h $w1[2], $1
1047 ; MIPS64R5-NEXT:    lbu $1, 19($sp)
1048 ; MIPS64R5-NEXT:    insert.h $w1[3], $1
1049 ; MIPS64R5-NEXT:    lbu $1, 20($sp)
1050 ; MIPS64R5-NEXT:    insert.h $w1[4], $1
1051 ; MIPS64R5-NEXT:    lbu $1, 24($sp)
1052 ; MIPS64R5-NEXT:    insert.h $w0[0], $1
1053 ; MIPS64R5-NEXT:    lbu $1, 25($sp)
1054 ; MIPS64R5-NEXT:    insert.h $w0[1], $1
1055 ; MIPS64R5-NEXT:    lbu $1, 21($sp)
1056 ; MIPS64R5-NEXT:    lbu $2, 26($sp)
1057 ; MIPS64R5-NEXT:    insert.h $w0[2], $2
1058 ; MIPS64R5-NEXT:    insert.h $w1[5], $1
1059 ; MIPS64R5-NEXT:    lbu $1, 27($sp)
1060 ; MIPS64R5-NEXT:    lbu $2, 23($sp)
1061 ; MIPS64R5-NEXT:    lbu $3, 22($sp)
1062 ; MIPS64R5-NEXT:    lbu $4, 31($sp)
1063 ; MIPS64R5-NEXT:    insert.h $w1[6], $3
1064 ; MIPS64R5-NEXT:    insert.h $w1[7], $2
1065 ; MIPS64R5-NEXT:    insert.h $w0[3], $1
1066 ; MIPS64R5-NEXT:    lbu $1, 28($sp)
1067 ; MIPS64R5-NEXT:    insert.h $w0[4], $1
1068 ; MIPS64R5-NEXT:    lbu $1, 29($sp)
1069 ; MIPS64R5-NEXT:    insert.h $w0[5], $1
1070 ; MIPS64R5-NEXT:    lbu $1, 30($sp)
1071 ; MIPS64R5-NEXT:    insert.h $w0[6], $1
1072 ; MIPS64R5-NEXT:    insert.h $w0[7], $4
1073 ; MIPS64R5-NEXT:    addv.h $w0, $w0, $w1
1074 ; MIPS64R5-NEXT:    copy_s.h $1, $w0[0]
1075 ; MIPS64R5-NEXT:    copy_s.h $2, $w0[1]
1076 ; MIPS64R5-NEXT:    copy_s.h $3, $w0[2]
1077 ; MIPS64R5-NEXT:    copy_s.h $4, $w0[3]
1078 ; MIPS64R5-NEXT:    copy_s.h $5, $w0[4]
1079 ; MIPS64R5-NEXT:    copy_s.h $6, $w0[5]
1080 ; MIPS64R5-NEXT:    copy_s.h $7, $w0[6]
1081 ; MIPS64R5-NEXT:    copy_s.h $8, $w0[7]
1082 ; MIPS64R5-NEXT:    sb $8, 15($sp)
1083 ; MIPS64R5-NEXT:    sb $7, 14($sp)
1084 ; MIPS64R5-NEXT:    sb $6, 13($sp)
1085 ; MIPS64R5-NEXT:    sb $5, 12($sp)
1086 ; MIPS64R5-NEXT:    sb $4, 11($sp)
1087 ; MIPS64R5-NEXT:    sb $3, 10($sp)
1088 ; MIPS64R5-NEXT:    sb $2, 9($sp)
1089 ; MIPS64R5-NEXT:    sb $1, 8($sp)
1090 ; MIPS64R5-NEXT:    ld $2, 8($sp)
1091 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 32
1092 ; MIPS64R5-NEXT:    jr $ra
1093 ; MIPS64R5-NEXT:    nop
1095 ; MIPS32R5EL-LABEL: i8_8:
1096 ; MIPS32R5EL:       # %bb.0:
1097 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -48
1098 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 48
1099 ; MIPS32R5EL-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
1100 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
1101 ; MIPS32R5EL-NEXT:    move $fp, $sp
1102 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
1103 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
1104 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
1105 ; MIPS32R5EL-NEXT:    sw $6, 24($sp)
1106 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
1107 ; MIPS32R5EL-NEXT:    lbu $1, 25($sp)
1108 ; MIPS32R5EL-NEXT:    lbu $2, 24($sp)
1109 ; MIPS32R5EL-NEXT:    sw $7, 28($sp)
1110 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
1111 ; MIPS32R5EL-NEXT:    insert.h $w1[0], $2
1112 ; MIPS32R5EL-NEXT:    insert.h $w1[1], $1
1113 ; MIPS32R5EL-NEXT:    lbu $1, 26($sp)
1114 ; MIPS32R5EL-NEXT:    sw $4, 32($sp)
1115 ; MIPS32R5EL-NEXT:    insert.h $w1[2], $1
1116 ; MIPS32R5EL-NEXT:    lbu $1, 27($sp)
1117 ; MIPS32R5EL-NEXT:    insert.h $w1[3], $1
1118 ; MIPS32R5EL-NEXT:    lbu $1, 28($sp)
1119 ; MIPS32R5EL-NEXT:    sw $5, 36($sp)
1120 ; MIPS32R5EL-NEXT:    insert.h $w1[4], $1
1121 ; MIPS32R5EL-NEXT:    lbu $1, 32($sp)
1122 ; MIPS32R5EL-NEXT:    insert.h $w0[0], $1
1123 ; MIPS32R5EL-NEXT:    lbu $1, 33($sp)
1124 ; MIPS32R5EL-NEXT:    insert.h $w0[1], $1
1125 ; MIPS32R5EL-NEXT:    lbu $1, 29($sp)
1126 ; MIPS32R5EL-NEXT:    lbu $2, 34($sp)
1127 ; MIPS32R5EL-NEXT:    insert.h $w0[2], $2
1128 ; MIPS32R5EL-NEXT:    insert.h $w1[5], $1
1129 ; MIPS32R5EL-NEXT:    lbu $1, 35($sp)
1130 ; MIPS32R5EL-NEXT:    lbu $2, 31($sp)
1131 ; MIPS32R5EL-NEXT:    lbu $3, 30($sp)
1132 ; MIPS32R5EL-NEXT:    lbu $4, 39($sp)
1133 ; MIPS32R5EL-NEXT:    insert.h $w1[6], $3
1134 ; MIPS32R5EL-NEXT:    insert.h $w1[7], $2
1135 ; MIPS32R5EL-NEXT:    insert.h $w0[3], $1
1136 ; MIPS32R5EL-NEXT:    lbu $1, 36($sp)
1137 ; MIPS32R5EL-NEXT:    insert.h $w0[4], $1
1138 ; MIPS32R5EL-NEXT:    lbu $1, 37($sp)
1139 ; MIPS32R5EL-NEXT:    insert.h $w0[5], $1
1140 ; MIPS32R5EL-NEXT:    lbu $1, 38($sp)
1141 ; MIPS32R5EL-NEXT:    insert.h $w0[6], $1
1142 ; MIPS32R5EL-NEXT:    insert.h $w0[7], $4
1143 ; MIPS32R5EL-NEXT:    addv.h $w0, $w0, $w1
1144 ; MIPS32R5EL-NEXT:    copy_s.h $1, $w0[0]
1145 ; MIPS32R5EL-NEXT:    copy_s.h $2, $w0[1]
1146 ; MIPS32R5EL-NEXT:    copy_s.h $3, $w0[2]
1147 ; MIPS32R5EL-NEXT:    copy_s.h $4, $w0[3]
1148 ; MIPS32R5EL-NEXT:    copy_s.h $5, $w0[4]
1149 ; MIPS32R5EL-NEXT:    copy_s.h $6, $w0[5]
1150 ; MIPS32R5EL-NEXT:    copy_s.h $7, $w0[6]
1151 ; MIPS32R5EL-NEXT:    copy_s.h $8, $w0[7]
1152 ; MIPS32R5EL-NEXT:    sb $8, 23($sp)
1153 ; MIPS32R5EL-NEXT:    sb $7, 22($sp)
1154 ; MIPS32R5EL-NEXT:    sb $6, 21($sp)
1155 ; MIPS32R5EL-NEXT:    sb $5, 20($sp)
1156 ; MIPS32R5EL-NEXT:    sb $4, 19($sp)
1157 ; MIPS32R5EL-NEXT:    sb $3, 18($sp)
1158 ; MIPS32R5EL-NEXT:    sb $2, 17($sp)
1159 ; MIPS32R5EL-NEXT:    sb $1, 16($sp)
1160 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
1161 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
1162 ; MIPS32R5EL-NEXT:    lw $1, 16($sp)
1163 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
1164 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($sp)
1165 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
1166 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
1167 ; MIPS32R5EL-NEXT:    move $sp, $fp
1168 ; MIPS32R5EL-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1169 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 48
1170 ; MIPS32R5EL-NEXT:    jr $ra
1171 ; MIPS32R5EL-NEXT:    nop
1172   %1 = add <8 x i8> %a, %b
1173   ret <8 x i8> %1
1176 define <16 x i8> @i8_16(<16 x i8> %a, <16 x i8> %b) {
1177 ; MIPS32-LABEL: i8_16:
1178 ; MIPS32:       # %bb.0:
1179 ; MIPS32-NEXT:    lw $1, 24($sp)
1180 ; MIPS32-NEXT:    srl $2, $1, 24
1181 ; MIPS32-NEXT:    srl $3, $6, 24
1182 ; MIPS32-NEXT:    srl $8, $1, 16
1183 ; MIPS32-NEXT:    srl $9, $6, 16
1184 ; MIPS32-NEXT:    srl $10, $1, 8
1185 ; MIPS32-NEXT:    srl $11, $6, 8
1186 ; MIPS32-NEXT:    lw $12, 20($sp)
1187 ; MIPS32-NEXT:    srl $13, $12, 8
1188 ; MIPS32-NEXT:    srl $14, $5, 8
1189 ; MIPS32-NEXT:    addu $13, $14, $13
1190 ; MIPS32-NEXT:    addu $14, $5, $12
1191 ; MIPS32-NEXT:    addu $10, $11, $10
1192 ; MIPS32-NEXT:    addu $1, $6, $1
1193 ; MIPS32-NEXT:    addu $6, $9, $8
1194 ; MIPS32-NEXT:    addu $2, $3, $2
1195 ; MIPS32-NEXT:    srl $3, $12, 24
1196 ; MIPS32-NEXT:    srl $8, $5, 24
1197 ; MIPS32-NEXT:    srl $9, $12, 16
1198 ; MIPS32-NEXT:    srl $5, $5, 16
1199 ; MIPS32-NEXT:    addu $5, $5, $9
1200 ; MIPS32-NEXT:    addu $3, $8, $3
1201 ; MIPS32-NEXT:    sll $2, $2, 8
1202 ; MIPS32-NEXT:    andi $6, $6, 255
1203 ; MIPS32-NEXT:    andi $1, $1, 255
1204 ; MIPS32-NEXT:    sll $8, $10, 8
1205 ; MIPS32-NEXT:    andi $9, $14, 255
1206 ; MIPS32-NEXT:    sll $10, $13, 8
1207 ; MIPS32-NEXT:    lw $11, 28($sp)
1208 ; MIPS32-NEXT:    lw $12, 16($sp)
1209 ; MIPS32-NEXT:    srl $13, $12, 24
1210 ; MIPS32-NEXT:    srl $14, $4, 24
1211 ; MIPS32-NEXT:    srl $15, $11, 24
1212 ; MIPS32-NEXT:    srl $24, $7, 24
1213 ; MIPS32-NEXT:    or $9, $9, $10
1214 ; MIPS32-NEXT:    or $1, $1, $8
1215 ; MIPS32-NEXT:    or $2, $6, $2
1216 ; MIPS32-NEXT:    addu $6, $24, $15
1217 ; MIPS32-NEXT:    sll $3, $3, 8
1218 ; MIPS32-NEXT:    andi $5, $5, 255
1219 ; MIPS32-NEXT:    addu $8, $14, $13
1220 ; MIPS32-NEXT:    sll $8, $8, 8
1221 ; MIPS32-NEXT:    srl $10, $12, 16
1222 ; MIPS32-NEXT:    srl $13, $4, 16
1223 ; MIPS32-NEXT:    addu $10, $13, $10
1224 ; MIPS32-NEXT:    andi $10, $10, 255
1225 ; MIPS32-NEXT:    or $8, $10, $8
1226 ; MIPS32-NEXT:    or $3, $5, $3
1227 ; MIPS32-NEXT:    addu $5, $4, $12
1228 ; MIPS32-NEXT:    sll $6, $6, 8
1229 ; MIPS32-NEXT:    srl $10, $11, 16
1230 ; MIPS32-NEXT:    srl $13, $7, 16
1231 ; MIPS32-NEXT:    addu $10, $13, $10
1232 ; MIPS32-NEXT:    andi $10, $10, 255
1233 ; MIPS32-NEXT:    or $6, $10, $6
1234 ; MIPS32-NEXT:    sll $10, $2, 16
1235 ; MIPS32-NEXT:    andi $1, $1, 65535
1236 ; MIPS32-NEXT:    sll $3, $3, 16
1237 ; MIPS32-NEXT:    andi $9, $9, 65535
1238 ; MIPS32-NEXT:    sll $2, $8, 16
1239 ; MIPS32-NEXT:    andi $5, $5, 255
1240 ; MIPS32-NEXT:    srl $8, $12, 8
1241 ; MIPS32-NEXT:    srl $4, $4, 8
1242 ; MIPS32-NEXT:    addu $4, $4, $8
1243 ; MIPS32-NEXT:    sll $4, $4, 8
1244 ; MIPS32-NEXT:    or $4, $5, $4
1245 ; MIPS32-NEXT:    andi $4, $4, 65535
1246 ; MIPS32-NEXT:    addu $5, $7, $11
1247 ; MIPS32-NEXT:    or $2, $4, $2
1248 ; MIPS32-NEXT:    or $3, $9, $3
1249 ; MIPS32-NEXT:    or $4, $1, $10
1250 ; MIPS32-NEXT:    sll $1, $6, 16
1251 ; MIPS32-NEXT:    andi $5, $5, 255
1252 ; MIPS32-NEXT:    srl $6, $11, 8
1253 ; MIPS32-NEXT:    srl $7, $7, 8
1254 ; MIPS32-NEXT:    addu $6, $7, $6
1255 ; MIPS32-NEXT:    sll $6, $6, 8
1256 ; MIPS32-NEXT:    or $5, $5, $6
1257 ; MIPS32-NEXT:    andi $5, $5, 65535
1258 ; MIPS32-NEXT:    or $5, $5, $1
1259 ; MIPS32-NEXT:    jr $ra
1260 ; MIPS32-NEXT:    nop
1262 ; MIPS64-LABEL: i8_16:
1263 ; MIPS64:       # %bb.0:
1264 ; MIPS64-NEXT:    dsrl $1, $7, 56
1265 ; MIPS64-NEXT:    dsrl $2, $5, 56
1266 ; MIPS64-NEXT:    dsrl $3, $7, 48
1267 ; MIPS64-NEXT:    dsrl $8, $5, 48
1268 ; MIPS64-NEXT:    dsrl $9, $6, 56
1269 ; MIPS64-NEXT:    dsrl $10, $4, 56
1270 ; MIPS64-NEXT:    dsrl $11, $7, 32
1271 ; MIPS64-NEXT:    sll $1, $1, 0
1272 ; MIPS64-NEXT:    sll $2, $2, 0
1273 ; MIPS64-NEXT:    sll $3, $3, 0
1274 ; MIPS64-NEXT:    sll $8, $8, 0
1275 ; MIPS64-NEXT:    dsrl $12, $7, 40
1276 ; MIPS64-NEXT:    sll $12, $12, 0
1277 ; MIPS64-NEXT:    dsrl $13, $5, 40
1278 ; MIPS64-NEXT:    sll $13, $13, 0
1279 ; MIPS64-NEXT:    addu $12, $13, $12
1280 ; MIPS64-NEXT:    addu $3, $8, $3
1281 ; MIPS64-NEXT:    addu $1, $2, $1
1282 ; MIPS64-NEXT:    sll $2, $9, 0
1283 ; MIPS64-NEXT:    sll $8, $10, 0
1284 ; MIPS64-NEXT:    dsrl $9, $6, 48
1285 ; MIPS64-NEXT:    sll $9, $9, 0
1286 ; MIPS64-NEXT:    dsrl $10, $4, 48
1287 ; MIPS64-NEXT:    sll $10, $10, 0
1288 ; MIPS64-NEXT:    addu $9, $10, $9
1289 ; MIPS64-NEXT:    addu $2, $8, $2
1290 ; MIPS64-NEXT:    sll $1, $1, 8
1291 ; MIPS64-NEXT:    andi $3, $3, 255
1292 ; MIPS64-NEXT:    sll $8, $12, 8
1293 ; MIPS64-NEXT:    sll $10, $11, 0
1294 ; MIPS64-NEXT:    dsrl $11, $5, 32
1295 ; MIPS64-NEXT:    sll $11, $11, 0
1296 ; MIPS64-NEXT:    addu $10, $11, $10
1297 ; MIPS64-NEXT:    andi $10, $10, 255
1298 ; MIPS64-NEXT:    or $8, $10, $8
1299 ; MIPS64-NEXT:    sll $10, $6, 0
1300 ; MIPS64-NEXT:    or $1, $3, $1
1301 ; MIPS64-NEXT:    sll $2, $2, 8
1302 ; MIPS64-NEXT:    andi $3, $9, 255
1303 ; MIPS64-NEXT:    dsrl $9, $6, 40
1304 ; MIPS64-NEXT:    srl $11, $10, 24
1305 ; MIPS64-NEXT:    sll $12, $4, 0
1306 ; MIPS64-NEXT:    srl $13, $12, 24
1307 ; MIPS64-NEXT:    srl $14, $10, 16
1308 ; MIPS64-NEXT:    srl $15, $12, 16
1309 ; MIPS64-NEXT:    andi $8, $8, 65535
1310 ; MIPS64-NEXT:    addu $14, $15, $14
1311 ; MIPS64-NEXT:    addu $11, $13, $11
1312 ; MIPS64-NEXT:    sll $7, $7, 0
1313 ; MIPS64-NEXT:    or $2, $3, $2
1314 ; MIPS64-NEXT:    sll $1, $1, 16
1315 ; MIPS64-NEXT:    sll $3, $9, 0
1316 ; MIPS64-NEXT:    dsrl $9, $4, 40
1317 ; MIPS64-NEXT:    sll $9, $9, 0
1318 ; MIPS64-NEXT:    addu $3, $9, $3
1319 ; MIPS64-NEXT:    dsrl $6, $6, 32
1320 ; MIPS64-NEXT:    srl $9, $7, 24
1321 ; MIPS64-NEXT:    sll $5, $5, 0
1322 ; MIPS64-NEXT:    srl $13, $5, 24
1323 ; MIPS64-NEXT:    or $1, $8, $1
1324 ; MIPS64-NEXT:    addu $8, $13, $9
1325 ; MIPS64-NEXT:    sll $9, $11, 8
1326 ; MIPS64-NEXT:    andi $11, $14, 255
1327 ; MIPS64-NEXT:    sll $2, $2, 16
1328 ; MIPS64-NEXT:    sll $3, $3, 8
1329 ; MIPS64-NEXT:    sll $6, $6, 0
1330 ; MIPS64-NEXT:    dsrl $4, $4, 32
1331 ; MIPS64-NEXT:    sll $4, $4, 0
1332 ; MIPS64-NEXT:    addu $4, $4, $6
1333 ; MIPS64-NEXT:    andi $4, $4, 255
1334 ; MIPS64-NEXT:    or $3, $4, $3
1335 ; MIPS64-NEXT:    andi $3, $3, 65535
1336 ; MIPS64-NEXT:    or $2, $3, $2
1337 ; MIPS64-NEXT:    or $3, $11, $9
1338 ; MIPS64-NEXT:    addu $4, $12, $10
1339 ; MIPS64-NEXT:    sll $6, $8, 8
1340 ; MIPS64-NEXT:    srl $8, $7, 16
1341 ; MIPS64-NEXT:    srl $9, $5, 16
1342 ; MIPS64-NEXT:    addu $8, $9, $8
1343 ; MIPS64-NEXT:    andi $8, $8, 255
1344 ; MIPS64-NEXT:    or $6, $8, $6
1345 ; MIPS64-NEXT:    addu $8, $5, $7
1346 ; MIPS64-NEXT:    dsll $2, $2, 32
1347 ; MIPS64-NEXT:    sll $3, $3, 16
1348 ; MIPS64-NEXT:    andi $4, $4, 255
1349 ; MIPS64-NEXT:    srl $9, $10, 8
1350 ; MIPS64-NEXT:    srl $10, $12, 8
1351 ; MIPS64-NEXT:    addu $9, $10, $9
1352 ; MIPS64-NEXT:    sll $9, $9, 8
1353 ; MIPS64-NEXT:    or $4, $4, $9
1354 ; MIPS64-NEXT:    andi $4, $4, 65535
1355 ; MIPS64-NEXT:    or $3, $4, $3
1356 ; MIPS64-NEXT:    dsll $3, $3, 32
1357 ; MIPS64-NEXT:    dsrl $3, $3, 32
1358 ; MIPS64-NEXT:    or $2, $3, $2
1359 ; MIPS64-NEXT:    dsll $1, $1, 32
1360 ; MIPS64-NEXT:    sll $3, $6, 16
1361 ; MIPS64-NEXT:    andi $4, $8, 255
1362 ; MIPS64-NEXT:    srl $6, $7, 8
1363 ; MIPS64-NEXT:    srl $5, $5, 8
1364 ; MIPS64-NEXT:    addu $5, $5, $6
1365 ; MIPS64-NEXT:    sll $5, $5, 8
1366 ; MIPS64-NEXT:    or $4, $4, $5
1367 ; MIPS64-NEXT:    andi $4, $4, 65535
1368 ; MIPS64-NEXT:    or $3, $4, $3
1369 ; MIPS64-NEXT:    dsll $3, $3, 32
1370 ; MIPS64-NEXT:    dsrl $3, $3, 32
1371 ; MIPS64-NEXT:    or $3, $3, $1
1372 ; MIPS64-NEXT:    jr $ra
1373 ; MIPS64-NEXT:    nop
1375 ; MIPS32R5EB-LABEL: i8_16:
1376 ; MIPS32R5EB:       # %bb.0:
1377 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
1378 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
1379 ; MIPS32R5EB-NEXT:    lw $2, 16($sp)
1380 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
1381 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $2
1382 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $1
1383 ; MIPS32R5EB-NEXT:    lw $1, 24($sp)
1384 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $4
1385 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
1386 ; MIPS32R5EB-NEXT:    lw $1, 28($sp)
1387 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $1
1388 ; MIPS32R5EB-NEXT:    shf.b $w1, $w1, 27
1389 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $5
1390 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $6
1391 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $7
1392 ; MIPS32R5EB-NEXT:    shf.b $w0, $w0, 27
1393 ; MIPS32R5EB-NEXT:    addv.b $w0, $w0, $w1
1394 ; MIPS32R5EB-NEXT:    shf.b $w0, $w0, 27
1395 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[0]
1396 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[1]
1397 ; MIPS32R5EB-NEXT:    copy_s.w $4, $w0[2]
1398 ; MIPS32R5EB-NEXT:    copy_s.w $5, $w0[3]
1399 ; MIPS32R5EB-NEXT:    jr $ra
1400 ; MIPS32R5EB-NEXT:    nop
1402 ; MIPS64R5EB-LABEL: i8_16:
1403 ; MIPS64R5EB:       # %bb.0:
1404 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
1405 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
1406 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $6
1407 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $7
1408 ; MIPS64R5EB-NEXT:    shf.b $w1, $w1, 27
1409 ; MIPS64R5EB-NEXT:    shf.w $w1, $w1, 177
1410 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
1411 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
1412 ; MIPS64R5EB-NEXT:    shf.b $w0, $w0, 27
1413 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
1414 ; MIPS64R5EB-NEXT:    addv.b $w0, $w0, $w1
1415 ; MIPS64R5EB-NEXT:    shf.b $w0, $w0, 27
1416 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
1417 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
1418 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
1419 ; MIPS64R5EB-NEXT:    jr $ra
1420 ; MIPS64R5EB-NEXT:    nop
1422 ; MIPS32R5EL-LABEL: i8_16:
1423 ; MIPS32R5EL:       # %bb.0:
1424 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
1425 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
1426 ; MIPS32R5EL-NEXT:    lw $2, 16($sp)
1427 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
1428 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $2
1429 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $1
1430 ; MIPS32R5EL-NEXT:    lw $1, 24($sp)
1431 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
1432 ; MIPS32R5EL-NEXT:    lw $1, 28($sp)
1433 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $1
1434 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $4
1435 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $5
1436 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $6
1437 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $7
1438 ; MIPS32R5EL-NEXT:    addv.b $w0, $w0, $w1
1439 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
1440 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[1]
1441 ; MIPS32R5EL-NEXT:    copy_s.w $4, $w0[2]
1442 ; MIPS32R5EL-NEXT:    copy_s.w $5, $w0[3]
1443 ; MIPS32R5EL-NEXT:    jr $ra
1444 ; MIPS32R5EL-NEXT:    nop
1446 ; MIPS64R5EL-LABEL: i8_16:
1447 ; MIPS64R5EL:       # %bb.0:
1448 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
1449 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
1450 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $6
1451 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $7
1452 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
1453 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
1454 ; MIPS64R5EL-NEXT:    addv.b $w0, $w0, $w1
1455 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
1456 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
1457 ; MIPS64R5EL-NEXT:    jr $ra
1458 ; MIPS64R5EL-NEXT:    nop
1459   %1 = add <16 x i8> %a, %b
1460   ret <16 x i8> %1
1463 define <2 x i16> @i16_2(<2 x i16> %a, <2 x i16> %b) {
1464 ; MIPS32-LABEL: i16_2:
1465 ; MIPS32:       # %bb.0:
1466 ; MIPS32-NEXT:    addu $1, $4, $5
1467 ; MIPS32-NEXT:    andi $1, $1, 65535
1468 ; MIPS32-NEXT:    srl $2, $5, 16
1469 ; MIPS32-NEXT:    srl $3, $4, 16
1470 ; MIPS32-NEXT:    addu $2, $3, $2
1471 ; MIPS32-NEXT:    sll $2, $2, 16
1472 ; MIPS32-NEXT:    or $2, $1, $2
1473 ; MIPS32-NEXT:    jr $ra
1474 ; MIPS32-NEXT:    nop
1476 ; MIPS64-LABEL: i16_2:
1477 ; MIPS64:       # %bb.0:
1478 ; MIPS64-NEXT:    sll $1, $5, 0
1479 ; MIPS64-NEXT:    sll $2, $4, 0
1480 ; MIPS64-NEXT:    addu $3, $2, $1
1481 ; MIPS64-NEXT:    andi $3, $3, 65535
1482 ; MIPS64-NEXT:    srl $1, $1, 16
1483 ; MIPS64-NEXT:    srl $2, $2, 16
1484 ; MIPS64-NEXT:    addu $1, $2, $1
1485 ; MIPS64-NEXT:    sll $1, $1, 16
1486 ; MIPS64-NEXT:    or $2, $3, $1
1487 ; MIPS64-NEXT:    jr $ra
1488 ; MIPS64-NEXT:    nop
1490 ; MIPS32R5EB-LABEL: i16_2:
1491 ; MIPS32R5EB:       # %bb.0:
1492 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -48
1493 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 48
1494 ; MIPS32R5EB-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
1495 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
1496 ; MIPS32R5EB-NEXT:    move $fp, $sp
1497 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
1498 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
1499 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
1500 ; MIPS32R5EB-NEXT:    sw $5, 36($sp)
1501 ; MIPS32R5EB-NEXT:    sw $4, 40($sp)
1502 ; MIPS32R5EB-NEXT:    lhu $1, 38($sp)
1503 ; MIPS32R5EB-NEXT:    sw $1, 28($sp)
1504 ; MIPS32R5EB-NEXT:    lhu $1, 36($sp)
1505 ; MIPS32R5EB-NEXT:    sw $1, 20($sp)
1506 ; MIPS32R5EB-NEXT:    lhu $1, 42($sp)
1507 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
1508 ; MIPS32R5EB-NEXT:    lhu $1, 40($sp)
1509 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
1510 ; MIPS32R5EB-NEXT:    ld.d $w0, 16($sp)
1511 ; MIPS32R5EB-NEXT:    ld.d $w1, 0($sp)
1512 ; MIPS32R5EB-NEXT:    addv.d $w0, $w1, $w0
1513 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
1514 ; MIPS32R5EB-NEXT:    copy_s.w $1, $w0[1]
1515 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[3]
1516 ; MIPS32R5EB-NEXT:    sh $2, 34($sp)
1517 ; MIPS32R5EB-NEXT:    sh $1, 32($sp)
1518 ; MIPS32R5EB-NEXT:    lw $2, 32($sp)
1519 ; MIPS32R5EB-NEXT:    move $sp, $fp
1520 ; MIPS32R5EB-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1521 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 48
1522 ; MIPS32R5EB-NEXT:    jr $ra
1523 ; MIPS32R5EB-NEXT:    nop
1525 ; MIPS64R5-LABEL: i16_2:
1526 ; MIPS64R5:       # %bb.0:
1527 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
1528 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
1529 ; MIPS64R5-NEXT:    sll $1, $5, 0
1530 ; MIPS64R5-NEXT:    sw $1, 8($sp)
1531 ; MIPS64R5-NEXT:    sll $1, $4, 0
1532 ; MIPS64R5-NEXT:    sw $1, 12($sp)
1533 ; MIPS64R5-NEXT:    ldi.b $w0, 0
1534 ; MIPS64R5-NEXT:    lh $1, 10($sp)
1535 ; MIPS64R5-NEXT:    lh $2, 8($sp)
1536 ; MIPS64R5-NEXT:    move.v $w1, $w0
1537 ; MIPS64R5-NEXT:    insert.d $w1[0], $2
1538 ; MIPS64R5-NEXT:    insert.d $w1[1], $1
1539 ; MIPS64R5-NEXT:    lh $1, 12($sp)
1540 ; MIPS64R5-NEXT:    insert.d $w0[0], $1
1541 ; MIPS64R5-NEXT:    lh $1, 14($sp)
1542 ; MIPS64R5-NEXT:    insert.d $w0[1], $1
1543 ; MIPS64R5-NEXT:    addv.d $w0, $w0, $w1
1544 ; MIPS64R5-NEXT:    copy_s.d $1, $w0[0]
1545 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[1]
1546 ; MIPS64R5-NEXT:    sh $2, 6($sp)
1547 ; MIPS64R5-NEXT:    sh $1, 4($sp)
1548 ; MIPS64R5-NEXT:    lw $2, 4($sp)
1549 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
1550 ; MIPS64R5-NEXT:    jr $ra
1551 ; MIPS64R5-NEXT:    nop
1553 ; MIPS32R5EL-LABEL: i16_2:
1554 ; MIPS32R5EL:       # %bb.0:
1555 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -48
1556 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 48
1557 ; MIPS32R5EL-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
1558 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
1559 ; MIPS32R5EL-NEXT:    move $fp, $sp
1560 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
1561 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
1562 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
1563 ; MIPS32R5EL-NEXT:    sw $5, 36($sp)
1564 ; MIPS32R5EL-NEXT:    sw $4, 40($sp)
1565 ; MIPS32R5EL-NEXT:    lhu $1, 38($sp)
1566 ; MIPS32R5EL-NEXT:    sw $1, 24($sp)
1567 ; MIPS32R5EL-NEXT:    lhu $1, 36($sp)
1568 ; MIPS32R5EL-NEXT:    sw $1, 16($sp)
1569 ; MIPS32R5EL-NEXT:    lhu $1, 42($sp)
1570 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
1571 ; MIPS32R5EL-NEXT:    lhu $1, 40($sp)
1572 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
1573 ; MIPS32R5EL-NEXT:    ld.d $w0, 16($sp)
1574 ; MIPS32R5EL-NEXT:    ld.d $w1, 0($sp)
1575 ; MIPS32R5EL-NEXT:    addv.d $w0, $w1, $w0
1576 ; MIPS32R5EL-NEXT:    copy_s.w $1, $w0[0]
1577 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[2]
1578 ; MIPS32R5EL-NEXT:    sh $2, 34($sp)
1579 ; MIPS32R5EL-NEXT:    sh $1, 32($sp)
1580 ; MIPS32R5EL-NEXT:    lw $2, 32($sp)
1581 ; MIPS32R5EL-NEXT:    move $sp, $fp
1582 ; MIPS32R5EL-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1583 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 48
1584 ; MIPS32R5EL-NEXT:    jr $ra
1585 ; MIPS32R5EL-NEXT:    nop
1586   %1 = add <2 x i16> %a, %b
1587   ret <2 x i16> %1
1590 define <4 x i16> @i16_4(<4 x i16> %a, <4 x i16> %b) {
1591 ; MIPS32-LABEL: i16_4:
1592 ; MIPS32:       # %bb.0:
1593 ; MIPS32-NEXT:    addu $1, $4, $6
1594 ; MIPS32-NEXT:    andi $1, $1, 65535
1595 ; MIPS32-NEXT:    srl $2, $6, 16
1596 ; MIPS32-NEXT:    srl $3, $4, 16
1597 ; MIPS32-NEXT:    addu $2, $3, $2
1598 ; MIPS32-NEXT:    sll $2, $2, 16
1599 ; MIPS32-NEXT:    or $2, $1, $2
1600 ; MIPS32-NEXT:    addu $1, $5, $7
1601 ; MIPS32-NEXT:    andi $1, $1, 65535
1602 ; MIPS32-NEXT:    srl $3, $7, 16
1603 ; MIPS32-NEXT:    srl $4, $5, 16
1604 ; MIPS32-NEXT:    addu $3, $4, $3
1605 ; MIPS32-NEXT:    sll $3, $3, 16
1606 ; MIPS32-NEXT:    or $3, $1, $3
1607 ; MIPS32-NEXT:    jr $ra
1608 ; MIPS32-NEXT:    nop
1610 ; MIPS64-LABEL: i16_4:
1611 ; MIPS64:       # %bb.0:
1612 ; MIPS64-NEXT:    dsrl $1, $5, 48
1613 ; MIPS64-NEXT:    sll $1, $1, 0
1614 ; MIPS64-NEXT:    dsrl $2, $4, 48
1615 ; MIPS64-NEXT:    sll $2, $2, 0
1616 ; MIPS64-NEXT:    addu $1, $2, $1
1617 ; MIPS64-NEXT:    dsrl $2, $5, 32
1618 ; MIPS64-NEXT:    sll $1, $1, 16
1619 ; MIPS64-NEXT:    sll $2, $2, 0
1620 ; MIPS64-NEXT:    dsrl $3, $4, 32
1621 ; MIPS64-NEXT:    sll $3, $3, 0
1622 ; MIPS64-NEXT:    addu $2, $3, $2
1623 ; MIPS64-NEXT:    andi $2, $2, 65535
1624 ; MIPS64-NEXT:    or $1, $2, $1
1625 ; MIPS64-NEXT:    sll $2, $5, 0
1626 ; MIPS64-NEXT:    sll $3, $4, 0
1627 ; MIPS64-NEXT:    addu $4, $3, $2
1628 ; MIPS64-NEXT:    dsll $1, $1, 32
1629 ; MIPS64-NEXT:    andi $4, $4, 65535
1630 ; MIPS64-NEXT:    srl $2, $2, 16
1631 ; MIPS64-NEXT:    srl $3, $3, 16
1632 ; MIPS64-NEXT:    addu $2, $3, $2
1633 ; MIPS64-NEXT:    sll $2, $2, 16
1634 ; MIPS64-NEXT:    or $2, $4, $2
1635 ; MIPS64-NEXT:    dsll $2, $2, 32
1636 ; MIPS64-NEXT:    dsrl $2, $2, 32
1637 ; MIPS64-NEXT:    or $2, $2, $1
1638 ; MIPS64-NEXT:    jr $ra
1639 ; MIPS64-NEXT:    nop
1641 ; MIPS32R5EB-LABEL: i16_4:
1642 ; MIPS32R5EB:       # %bb.0:
1643 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -48
1644 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 48
1645 ; MIPS32R5EB-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
1646 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
1647 ; MIPS32R5EB-NEXT:    move $fp, $sp
1648 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
1649 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
1650 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
1651 ; MIPS32R5EB-NEXT:    sw $6, 24($sp)
1652 ; MIPS32R5EB-NEXT:    sw $7, 28($sp)
1653 ; MIPS32R5EB-NEXT:    sw $4, 32($sp)
1654 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
1655 ; MIPS32R5EB-NEXT:    lhu $1, 26($sp)
1656 ; MIPS32R5EB-NEXT:    lhu $2, 24($sp)
1657 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
1658 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $2
1659 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $1
1660 ; MIPS32R5EB-NEXT:    lhu $1, 28($sp)
1661 ; MIPS32R5EB-NEXT:    sw $5, 36($sp)
1662 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
1663 ; MIPS32R5EB-NEXT:    lhu $1, 32($sp)
1664 ; MIPS32R5EB-NEXT:    lhu $2, 30($sp)
1665 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $2
1666 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $1
1667 ; MIPS32R5EB-NEXT:    lhu $1, 34($sp)
1668 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $1
1669 ; MIPS32R5EB-NEXT:    lhu $1, 36($sp)
1670 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $1
1671 ; MIPS32R5EB-NEXT:    lhu $1, 38($sp)
1672 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $1
1673 ; MIPS32R5EB-NEXT:    addv.w $w0, $w0, $w1
1674 ; MIPS32R5EB-NEXT:    copy_s.w $1, $w0[0]
1675 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
1676 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[2]
1677 ; MIPS32R5EB-NEXT:    copy_s.w $4, $w0[3]
1678 ; MIPS32R5EB-NEXT:    sh $4, 22($sp)
1679 ; MIPS32R5EB-NEXT:    sh $3, 20($sp)
1680 ; MIPS32R5EB-NEXT:    sh $2, 18($sp)
1681 ; MIPS32R5EB-NEXT:    sh $1, 16($sp)
1682 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
1683 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
1684 ; MIPS32R5EB-NEXT:    lw $1, 16($sp)
1685 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
1686 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($sp)
1687 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
1688 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
1689 ; MIPS32R5EB-NEXT:    move $sp, $fp
1690 ; MIPS32R5EB-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1691 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 48
1692 ; MIPS32R5EB-NEXT:    jr $ra
1693 ; MIPS32R5EB-NEXT:    nop
1695 ; MIPS64R5-LABEL: i16_4:
1696 ; MIPS64R5:       # %bb.0:
1697 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -32
1698 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 32
1699 ; MIPS64R5-NEXT:    sd $5, 16($sp)
1700 ; MIPS64R5-NEXT:    sd $4, 24($sp)
1701 ; MIPS64R5-NEXT:    ldi.b $w0, 0
1702 ; MIPS64R5-NEXT:    lhu $1, 18($sp)
1703 ; MIPS64R5-NEXT:    lhu $2, 16($sp)
1704 ; MIPS64R5-NEXT:    move.v $w1, $w0
1705 ; MIPS64R5-NEXT:    insert.w $w1[0], $2
1706 ; MIPS64R5-NEXT:    insert.w $w1[1], $1
1707 ; MIPS64R5-NEXT:    lhu $1, 20($sp)
1708 ; MIPS64R5-NEXT:    insert.w $w1[2], $1
1709 ; MIPS64R5-NEXT:    lhu $1, 24($sp)
1710 ; MIPS64R5-NEXT:    lhu $2, 22($sp)
1711 ; MIPS64R5-NEXT:    insert.w $w1[3], $2
1712 ; MIPS64R5-NEXT:    insert.w $w0[0], $1
1713 ; MIPS64R5-NEXT:    lhu $1, 26($sp)
1714 ; MIPS64R5-NEXT:    insert.w $w0[1], $1
1715 ; MIPS64R5-NEXT:    lhu $1, 28($sp)
1716 ; MIPS64R5-NEXT:    insert.w $w0[2], $1
1717 ; MIPS64R5-NEXT:    lhu $1, 30($sp)
1718 ; MIPS64R5-NEXT:    insert.w $w0[3], $1
1719 ; MIPS64R5-NEXT:    addv.w $w0, $w0, $w1
1720 ; MIPS64R5-NEXT:    copy_s.w $1, $w0[0]
1721 ; MIPS64R5-NEXT:    copy_s.w $2, $w0[1]
1722 ; MIPS64R5-NEXT:    copy_s.w $3, $w0[2]
1723 ; MIPS64R5-NEXT:    copy_s.w $4, $w0[3]
1724 ; MIPS64R5-NEXT:    sh $4, 14($sp)
1725 ; MIPS64R5-NEXT:    sh $3, 12($sp)
1726 ; MIPS64R5-NEXT:    sh $2, 10($sp)
1727 ; MIPS64R5-NEXT:    sh $1, 8($sp)
1728 ; MIPS64R5-NEXT:    ld $2, 8($sp)
1729 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 32
1730 ; MIPS64R5-NEXT:    jr $ra
1731 ; MIPS64R5-NEXT:    nop
1733 ; MIPS32R5EL-LABEL: i16_4:
1734 ; MIPS32R5EL:       # %bb.0:
1735 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -48
1736 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 48
1737 ; MIPS32R5EL-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
1738 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
1739 ; MIPS32R5EL-NEXT:    move $fp, $sp
1740 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
1741 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
1742 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
1743 ; MIPS32R5EL-NEXT:    sw $6, 24($sp)
1744 ; MIPS32R5EL-NEXT:    sw $7, 28($sp)
1745 ; MIPS32R5EL-NEXT:    sw $4, 32($sp)
1746 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
1747 ; MIPS32R5EL-NEXT:    lhu $1, 26($sp)
1748 ; MIPS32R5EL-NEXT:    lhu $2, 24($sp)
1749 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
1750 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $2
1751 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $1
1752 ; MIPS32R5EL-NEXT:    lhu $1, 28($sp)
1753 ; MIPS32R5EL-NEXT:    sw $5, 36($sp)
1754 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
1755 ; MIPS32R5EL-NEXT:    lhu $1, 32($sp)
1756 ; MIPS32R5EL-NEXT:    lhu $2, 30($sp)
1757 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $2
1758 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $1
1759 ; MIPS32R5EL-NEXT:    lhu $1, 34($sp)
1760 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $1
1761 ; MIPS32R5EL-NEXT:    lhu $1, 36($sp)
1762 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $1
1763 ; MIPS32R5EL-NEXT:    lhu $1, 38($sp)
1764 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $1
1765 ; MIPS32R5EL-NEXT:    addv.w $w0, $w0, $w1
1766 ; MIPS32R5EL-NEXT:    copy_s.w $1, $w0[0]
1767 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[1]
1768 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
1769 ; MIPS32R5EL-NEXT:    copy_s.w $4, $w0[3]
1770 ; MIPS32R5EL-NEXT:    sh $4, 22($sp)
1771 ; MIPS32R5EL-NEXT:    sh $3, 20($sp)
1772 ; MIPS32R5EL-NEXT:    sh $2, 18($sp)
1773 ; MIPS32R5EL-NEXT:    sh $1, 16($sp)
1774 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
1775 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
1776 ; MIPS32R5EL-NEXT:    lw $1, 16($sp)
1777 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
1778 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($sp)
1779 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
1780 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
1781 ; MIPS32R5EL-NEXT:    move $sp, $fp
1782 ; MIPS32R5EL-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
1783 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 48
1784 ; MIPS32R5EL-NEXT:    jr $ra
1785 ; MIPS32R5EL-NEXT:    nop
1786   %1 = add <4 x i16> %a, %b
1787   ret <4 x i16> %1
1790 define <8 x i16> @i16_8(<8 x i16> %a, <8 x i16> %b) {
1791 ; MIPS32-LABEL: i16_8:
1792 ; MIPS32:       # %bb.0:
1793 ; MIPS32-NEXT:    lw $1, 24($sp)
1794 ; MIPS32-NEXT:    srl $2, $1, 16
1795 ; MIPS32-NEXT:    srl $3, $6, 16
1796 ; MIPS32-NEXT:    lw $8, 20($sp)
1797 ; MIPS32-NEXT:    srl $9, $8, 16
1798 ; MIPS32-NEXT:    srl $10, $5, 16
1799 ; MIPS32-NEXT:    addu $9, $10, $9
1800 ; MIPS32-NEXT:    addu $5, $5, $8
1801 ; MIPS32-NEXT:    addu $2, $3, $2
1802 ; MIPS32-NEXT:    addu $1, $6, $1
1803 ; MIPS32-NEXT:    lw $3, 16($sp)
1804 ; MIPS32-NEXT:    lw $6, 28($sp)
1805 ; MIPS32-NEXT:    addu $8, $7, $6
1806 ; MIPS32-NEXT:    andi $1, $1, 65535
1807 ; MIPS32-NEXT:    sll $10, $2, 16
1808 ; MIPS32-NEXT:    andi $5, $5, 65535
1809 ; MIPS32-NEXT:    sll $9, $9, 16
1810 ; MIPS32-NEXT:    addu $2, $4, $3
1811 ; MIPS32-NEXT:    andi $2, $2, 65535
1812 ; MIPS32-NEXT:    srl $3, $3, 16
1813 ; MIPS32-NEXT:    srl $4, $4, 16
1814 ; MIPS32-NEXT:    addu $3, $4, $3
1815 ; MIPS32-NEXT:    sll $3, $3, 16
1816 ; MIPS32-NEXT:    or $2, $2, $3
1817 ; MIPS32-NEXT:    or $3, $5, $9
1818 ; MIPS32-NEXT:    or $4, $1, $10
1819 ; MIPS32-NEXT:    andi $1, $8, 65535
1820 ; MIPS32-NEXT:    srl $5, $6, 16
1821 ; MIPS32-NEXT:    srl $6, $7, 16
1822 ; MIPS32-NEXT:    addu $5, $6, $5
1823 ; MIPS32-NEXT:    sll $5, $5, 16
1824 ; MIPS32-NEXT:    or $5, $1, $5
1825 ; MIPS32-NEXT:    jr $ra
1826 ; MIPS32-NEXT:    nop
1828 ; MIPS64-LABEL: i16_8:
1829 ; MIPS64:       # %bb.0:
1830 ; MIPS64-NEXT:    dsrl $1, $6, 48
1831 ; MIPS64-NEXT:    dsrl $2, $7, 48
1832 ; MIPS64-NEXT:    sll $1, $1, 0
1833 ; MIPS64-NEXT:    dsrl $3, $4, 48
1834 ; MIPS64-NEXT:    sll $3, $3, 0
1835 ; MIPS64-NEXT:    addu $1, $3, $1
1836 ; MIPS64-NEXT:    dsrl $3, $6, 32
1837 ; MIPS64-NEXT:    sll $2, $2, 0
1838 ; MIPS64-NEXT:    dsrl $8, $5, 48
1839 ; MIPS64-NEXT:    sll $8, $8, 0
1840 ; MIPS64-NEXT:    addu $2, $8, $2
1841 ; MIPS64-NEXT:    sll $1, $1, 16
1842 ; MIPS64-NEXT:    sll $3, $3, 0
1843 ; MIPS64-NEXT:    dsrl $8, $4, 32
1844 ; MIPS64-NEXT:    sll $8, $8, 0
1845 ; MIPS64-NEXT:    addu $3, $8, $3
1846 ; MIPS64-NEXT:    andi $3, $3, 65535
1847 ; MIPS64-NEXT:    dsrl $8, $7, 32
1848 ; MIPS64-NEXT:    or $1, $3, $1
1849 ; MIPS64-NEXT:    sll $2, $2, 16
1850 ; MIPS64-NEXT:    sll $3, $8, 0
1851 ; MIPS64-NEXT:    dsrl $8, $5, 32
1852 ; MIPS64-NEXT:    sll $8, $8, 0
1853 ; MIPS64-NEXT:    addu $3, $8, $3
1854 ; MIPS64-NEXT:    andi $3, $3, 65535
1855 ; MIPS64-NEXT:    or $3, $3, $2
1856 ; MIPS64-NEXT:    sll $2, $6, 0
1857 ; MIPS64-NEXT:    sll $4, $4, 0
1858 ; MIPS64-NEXT:    addu $6, $4, $2
1859 ; MIPS64-NEXT:    andi $6, $6, 65535
1860 ; MIPS64-NEXT:    srl $2, $2, 16
1861 ; MIPS64-NEXT:    srl $4, $4, 16
1862 ; MIPS64-NEXT:    addu $2, $4, $2
1863 ; MIPS64-NEXT:    sll $2, $2, 16
1864 ; MIPS64-NEXT:    dsll $1, $1, 32
1865 ; MIPS64-NEXT:    or $2, $6, $2
1866 ; MIPS64-NEXT:    dsll $2, $2, 32
1867 ; MIPS64-NEXT:    dsrl $2, $2, 32
1868 ; MIPS64-NEXT:    sll $4, $7, 0
1869 ; MIPS64-NEXT:    sll $5, $5, 0
1870 ; MIPS64-NEXT:    addu $6, $5, $4
1871 ; MIPS64-NEXT:    or $2, $2, $1
1872 ; MIPS64-NEXT:    dsll $1, $3, 32
1873 ; MIPS64-NEXT:    andi $3, $6, 65535
1874 ; MIPS64-NEXT:    srl $4, $4, 16
1875 ; MIPS64-NEXT:    srl $5, $5, 16
1876 ; MIPS64-NEXT:    addu $4, $5, $4
1877 ; MIPS64-NEXT:    sll $4, $4, 16
1878 ; MIPS64-NEXT:    or $3, $3, $4
1879 ; MIPS64-NEXT:    dsll $3, $3, 32
1880 ; MIPS64-NEXT:    dsrl $3, $3, 32
1881 ; MIPS64-NEXT:    or $3, $3, $1
1882 ; MIPS64-NEXT:    jr $ra
1883 ; MIPS64-NEXT:    nop
1885 ; MIPS32R5EB-LABEL: i16_8:
1886 ; MIPS32R5EB:       # %bb.0:
1887 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
1888 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
1889 ; MIPS32R5EB-NEXT:    lw $2, 16($sp)
1890 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
1891 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $2
1892 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $1
1893 ; MIPS32R5EB-NEXT:    lw $1, 24($sp)
1894 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $4
1895 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
1896 ; MIPS32R5EB-NEXT:    lw $1, 28($sp)
1897 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $1
1898 ; MIPS32R5EB-NEXT:    shf.h $w1, $w1, 177
1899 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $5
1900 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $6
1901 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $7
1902 ; MIPS32R5EB-NEXT:    shf.h $w0, $w0, 177
1903 ; MIPS32R5EB-NEXT:    addv.h $w0, $w0, $w1
1904 ; MIPS32R5EB-NEXT:    shf.h $w0, $w0, 177
1905 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[0]
1906 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[1]
1907 ; MIPS32R5EB-NEXT:    copy_s.w $4, $w0[2]
1908 ; MIPS32R5EB-NEXT:    copy_s.w $5, $w0[3]
1909 ; MIPS32R5EB-NEXT:    jr $ra
1910 ; MIPS32R5EB-NEXT:    nop
1912 ; MIPS64R5EB-LABEL: i16_8:
1913 ; MIPS64R5EB:       # %bb.0:
1914 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
1915 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
1916 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $6
1917 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $7
1918 ; MIPS64R5EB-NEXT:    shf.h $w1, $w1, 27
1919 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
1920 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
1921 ; MIPS64R5EB-NEXT:    shf.h $w0, $w0, 27
1922 ; MIPS64R5EB-NEXT:    addv.h $w0, $w0, $w1
1923 ; MIPS64R5EB-NEXT:    shf.h $w0, $w0, 27
1924 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
1925 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
1926 ; MIPS64R5EB-NEXT:    jr $ra
1927 ; MIPS64R5EB-NEXT:    nop
1929 ; MIPS32R5EL-LABEL: i16_8:
1930 ; MIPS32R5EL:       # %bb.0:
1931 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
1932 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
1933 ; MIPS32R5EL-NEXT:    lw $2, 16($sp)
1934 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
1935 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $2
1936 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $1
1937 ; MIPS32R5EL-NEXT:    lw $1, 24($sp)
1938 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
1939 ; MIPS32R5EL-NEXT:    lw $1, 28($sp)
1940 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $1
1941 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $4
1942 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $5
1943 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $6
1944 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $7
1945 ; MIPS32R5EL-NEXT:    addv.h $w0, $w0, $w1
1946 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
1947 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[1]
1948 ; MIPS32R5EL-NEXT:    copy_s.w $4, $w0[2]
1949 ; MIPS32R5EL-NEXT:    copy_s.w $5, $w0[3]
1950 ; MIPS32R5EL-NEXT:    jr $ra
1951 ; MIPS32R5EL-NEXT:    nop
1953 ; MIPS64R5EL-LABEL: i16_8:
1954 ; MIPS64R5EL:       # %bb.0:
1955 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
1956 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
1957 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $6
1958 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $7
1959 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
1960 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
1961 ; MIPS64R5EL-NEXT:    addv.h $w0, $w0, $w1
1962 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
1963 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
1964 ; MIPS64R5EL-NEXT:    jr $ra
1965 ; MIPS64R5EL-NEXT:    nop
1966   %1 = add <8 x i16> %a, %b
1967   ret <8 x i16> %1
1970 define <2 x i32> @i32_2(<2 x i32> %a, <2 x i32> %b) {
1971 ; MIPS32-LABEL: i32_2:
1972 ; MIPS32:       # %bb.0:
1973 ; MIPS32-NEXT:    addu $2, $4, $6
1974 ; MIPS32-NEXT:    addu $3, $5, $7
1975 ; MIPS32-NEXT:    jr $ra
1976 ; MIPS32-NEXT:    nop
1978 ; MIPS64-LABEL: i32_2:
1979 ; MIPS64:       # %bb.0:
1980 ; MIPS64-NEXT:    sll $1, $5, 0
1981 ; MIPS64-NEXT:    sll $2, $4, 0
1982 ; MIPS64-NEXT:    addu $1, $2, $1
1983 ; MIPS64-NEXT:    dsll $1, $1, 32
1984 ; MIPS64-NEXT:    dsrl $2, $5, 32
1985 ; MIPS64-NEXT:    dsrl $1, $1, 32
1986 ; MIPS64-NEXT:    sll $2, $2, 0
1987 ; MIPS64-NEXT:    dsrl $3, $4, 32
1988 ; MIPS64-NEXT:    sll $3, $3, 0
1989 ; MIPS64-NEXT:    addu $2, $3, $2
1990 ; MIPS64-NEXT:    dsll $2, $2, 32
1991 ; MIPS64-NEXT:    or $2, $1, $2
1992 ; MIPS64-NEXT:    jr $ra
1993 ; MIPS64-NEXT:    nop
1995 ; MIPS32R5EB-LABEL: i32_2:
1996 ; MIPS32R5EB:       # %bb.0:
1997 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -48
1998 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 48
1999 ; MIPS32R5EB-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
2000 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
2001 ; MIPS32R5EB-NEXT:    move $fp, $sp
2002 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
2003 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
2004 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
2005 ; MIPS32R5EB-NEXT:    sw $7, 28($sp)
2006 ; MIPS32R5EB-NEXT:    sw $6, 20($sp)
2007 ; MIPS32R5EB-NEXT:    sw $5, 12($sp)
2008 ; MIPS32R5EB-NEXT:    sw $4, 4($sp)
2009 ; MIPS32R5EB-NEXT:    ld.d $w0, 16($sp)
2010 ; MIPS32R5EB-NEXT:    ld.d $w1, 0($sp)
2011 ; MIPS32R5EB-NEXT:    addv.d $w0, $w1, $w0
2012 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
2013 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
2014 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
2015 ; MIPS32R5EB-NEXT:    move $sp, $fp
2016 ; MIPS32R5EB-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
2017 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 48
2018 ; MIPS32R5EB-NEXT:    jr $ra
2019 ; MIPS32R5EB-NEXT:    nop
2021 ; MIPS64R5EB-LABEL: i32_2:
2022 ; MIPS64R5EB:       # %bb.0:
2023 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
2024 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
2025 ; MIPS64R5EB-NEXT:    sd $5, 16($sp)
2026 ; MIPS64R5EB-NEXT:    sd $4, 24($sp)
2027 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
2028 ; MIPS64R5EB-NEXT:    lw $1, 16($sp)
2029 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
2030 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $1
2031 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $5
2032 ; MIPS64R5EB-NEXT:    lw $1, 24($sp)
2033 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $1
2034 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $4
2035 ; MIPS64R5EB-NEXT:    addv.d $w0, $w0, $w1
2036 ; MIPS64R5EB-NEXT:    copy_s.d $1, $w0[0]
2037 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[1]
2038 ; MIPS64R5EB-NEXT:    sw $2, 12($sp)
2039 ; MIPS64R5EB-NEXT:    sw $1, 8($sp)
2040 ; MIPS64R5EB-NEXT:    ld $2, 8($sp)
2041 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
2042 ; MIPS64R5EB-NEXT:    jr $ra
2043 ; MIPS64R5EB-NEXT:    nop
2045 ; MIPS32R5EL-LABEL: i32_2:
2046 ; MIPS32R5EL:       # %bb.0:
2047 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -48
2048 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 48
2049 ; MIPS32R5EL-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
2050 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
2051 ; MIPS32R5EL-NEXT:    move $fp, $sp
2052 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
2053 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
2054 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
2055 ; MIPS32R5EL-NEXT:    sw $7, 24($sp)
2056 ; MIPS32R5EL-NEXT:    sw $6, 16($sp)
2057 ; MIPS32R5EL-NEXT:    sw $5, 8($sp)
2058 ; MIPS32R5EL-NEXT:    sw $4, 0($sp)
2059 ; MIPS32R5EL-NEXT:    ld.d $w0, 16($sp)
2060 ; MIPS32R5EL-NEXT:    ld.d $w1, 0($sp)
2061 ; MIPS32R5EL-NEXT:    addv.d $w0, $w1, $w0
2062 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
2063 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
2064 ; MIPS32R5EL-NEXT:    move $sp, $fp
2065 ; MIPS32R5EL-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
2066 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 48
2067 ; MIPS32R5EL-NEXT:    jr $ra
2068 ; MIPS32R5EL-NEXT:    nop
2070 ; MIPS64R5EL-LABEL: i32_2:
2071 ; MIPS64R5EL:       # %bb.0:
2072 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
2073 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
2074 ; MIPS64R5EL-NEXT:    sd $5, 16($sp)
2075 ; MIPS64R5EL-NEXT:    sd $4, 24($sp)
2076 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
2077 ; MIPS64R5EL-NEXT:    lw $1, 20($sp)
2078 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
2079 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $5
2080 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $1
2081 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
2082 ; MIPS64R5EL-NEXT:    lw $1, 28($sp)
2083 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $1
2084 ; MIPS64R5EL-NEXT:    addv.d $w0, $w0, $w1
2085 ; MIPS64R5EL-NEXT:    copy_s.d $1, $w0[0]
2086 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[1]
2087 ; MIPS64R5EL-NEXT:    sw $2, 12($sp)
2088 ; MIPS64R5EL-NEXT:    sw $1, 8($sp)
2089 ; MIPS64R5EL-NEXT:    ld $2, 8($sp)
2090 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
2091 ; MIPS64R5EL-NEXT:    jr $ra
2092 ; MIPS64R5EL-NEXT:    nop
2093   %1 = add <2 x i32> %a, %b
2094   ret <2 x i32> %1
2097 define <4 x i32> @i32_4(<4 x i32> %a, <4 x i32> %b) {
2098 ; MIPS32-LABEL: i32_4:
2099 ; MIPS32:       # %bb.0:
2100 ; MIPS32-NEXT:    lw $1, 20($sp)
2101 ; MIPS32-NEXT:    lw $2, 16($sp)
2102 ; MIPS32-NEXT:    addu $2, $4, $2
2103 ; MIPS32-NEXT:    addu $3, $5, $1
2104 ; MIPS32-NEXT:    lw $1, 24($sp)
2105 ; MIPS32-NEXT:    addu $4, $6, $1
2106 ; MIPS32-NEXT:    lw $1, 28($sp)
2107 ; MIPS32-NEXT:    addu $5, $7, $1
2108 ; MIPS32-NEXT:    jr $ra
2109 ; MIPS32-NEXT:    nop
2111 ; MIPS64-LABEL: i32_4:
2112 ; MIPS64:       # %bb.0:
2113 ; MIPS64-NEXT:    sll $1, $6, 0
2114 ; MIPS64-NEXT:    sll $2, $4, 0
2115 ; MIPS64-NEXT:    addu $1, $2, $1
2116 ; MIPS64-NEXT:    dsll $1, $1, 32
2117 ; MIPS64-NEXT:    sll $2, $7, 0
2118 ; MIPS64-NEXT:    sll $3, $5, 0
2119 ; MIPS64-NEXT:    addu $2, $3, $2
2120 ; MIPS64-NEXT:    dsrl $3, $6, 32
2121 ; MIPS64-NEXT:    dsll $6, $2, 32
2122 ; MIPS64-NEXT:    dsrl $1, $1, 32
2123 ; MIPS64-NEXT:    sll $2, $3, 0
2124 ; MIPS64-NEXT:    dsrl $3, $4, 32
2125 ; MIPS64-NEXT:    sll $3, $3, 0
2126 ; MIPS64-NEXT:    addu $2, $3, $2
2127 ; MIPS64-NEXT:    dsll $2, $2, 32
2128 ; MIPS64-NEXT:    dsrl $3, $7, 32
2129 ; MIPS64-NEXT:    or $2, $1, $2
2130 ; MIPS64-NEXT:    dsrl $1, $6, 32
2131 ; MIPS64-NEXT:    sll $3, $3, 0
2132 ; MIPS64-NEXT:    dsrl $4, $5, 32
2133 ; MIPS64-NEXT:    sll $4, $4, 0
2134 ; MIPS64-NEXT:    addu $3, $4, $3
2135 ; MIPS64-NEXT:    dsll $3, $3, 32
2136 ; MIPS64-NEXT:    or $3, $1, $3
2137 ; MIPS64-NEXT:    jr $ra
2138 ; MIPS64-NEXT:    nop
2140 ; MIPS32R5-LABEL: i32_4:
2141 ; MIPS32R5:       # %bb.0:
2142 ; MIPS32R5-NEXT:    ldi.b $w0, 0
2143 ; MIPS32R5-NEXT:    lw $1, 20($sp)
2144 ; MIPS32R5-NEXT:    lw $2, 16($sp)
2145 ; MIPS32R5-NEXT:    move.v $w1, $w0
2146 ; MIPS32R5-NEXT:    insert.w $w1[0], $2
2147 ; MIPS32R5-NEXT:    insert.w $w1[1], $1
2148 ; MIPS32R5-NEXT:    lw $1, 24($sp)
2149 ; MIPS32R5-NEXT:    insert.w $w1[2], $1
2150 ; MIPS32R5-NEXT:    lw $1, 28($sp)
2151 ; MIPS32R5-NEXT:    insert.w $w1[3], $1
2152 ; MIPS32R5-NEXT:    insert.w $w0[0], $4
2153 ; MIPS32R5-NEXT:    insert.w $w0[1], $5
2154 ; MIPS32R5-NEXT:    insert.w $w0[2], $6
2155 ; MIPS32R5-NEXT:    insert.w $w0[3], $7
2156 ; MIPS32R5-NEXT:    addv.w $w0, $w0, $w1
2157 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[0]
2158 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[1]
2159 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[2]
2160 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[3]
2161 ; MIPS32R5-NEXT:    jr $ra
2162 ; MIPS32R5-NEXT:    nop
2164 ; MIPS64R5EB-LABEL: i32_4:
2165 ; MIPS64R5EB:       # %bb.0:
2166 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
2167 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
2168 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $6
2169 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $7
2170 ; MIPS64R5EB-NEXT:    shf.w $w1, $w1, 177
2171 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
2172 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
2173 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
2174 ; MIPS64R5EB-NEXT:    addv.w $w0, $w0, $w1
2175 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
2176 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
2177 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
2178 ; MIPS64R5EB-NEXT:    jr $ra
2179 ; MIPS64R5EB-NEXT:    nop
2181 ; MIPS64R5EL-LABEL: i32_4:
2182 ; MIPS64R5EL:       # %bb.0:
2183 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
2184 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
2185 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $6
2186 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $7
2187 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
2188 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
2189 ; MIPS64R5EL-NEXT:    addv.w $w0, $w0, $w1
2190 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
2191 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
2192 ; MIPS64R5EL-NEXT:    jr $ra
2193 ; MIPS64R5EL-NEXT:    nop
2194   %1 = add <4 x i32> %a, %b
2195   ret <4 x i32> %1
2198 define <2 x i64> @i64_2(<2 x i64> %a, <2 x i64> %b) {
2199 ; MIPS32EB-LABEL: i64_2:
2200 ; MIPS32EB:       # %bb.0:
2201 ; MIPS32EB-NEXT:    lw $1, 16($sp)
2202 ; MIPS32EB-NEXT:    addu $1, $4, $1
2203 ; MIPS32EB-NEXT:    lw $2, 20($sp)
2204 ; MIPS32EB-NEXT:    addu $3, $5, $2
2205 ; MIPS32EB-NEXT:    sltu $2, $3, $5
2206 ; MIPS32EB-NEXT:    lw $4, 24($sp)
2207 ; MIPS32EB-NEXT:    addu $2, $1, $2
2208 ; MIPS32EB-NEXT:    addu $1, $6, $4
2209 ; MIPS32EB-NEXT:    lw $4, 28($sp)
2210 ; MIPS32EB-NEXT:    addu $5, $7, $4
2211 ; MIPS32EB-NEXT:    sltu $4, $5, $7
2212 ; MIPS32EB-NEXT:    addu $4, $1, $4
2213 ; MIPS32EB-NEXT:    jr $ra
2214 ; MIPS32EB-NEXT:    nop
2216 ; MIPS64-LABEL: i64_2:
2217 ; MIPS64:       # %bb.0:
2218 ; MIPS64-NEXT:    daddu $2, $4, $6
2219 ; MIPS64-NEXT:    daddu $3, $5, $7
2220 ; MIPS64-NEXT:    jr $ra
2221 ; MIPS64-NEXT:    nop
2223 ; MIPS32R5EB-LABEL: i64_2:
2224 ; MIPS32R5EB:       # %bb.0:
2225 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
2226 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
2227 ; MIPS32R5EB-NEXT:    lw $2, 16($sp)
2228 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
2229 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $2
2230 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $1
2231 ; MIPS32R5EB-NEXT:    lw $1, 24($sp)
2232 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $4
2233 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
2234 ; MIPS32R5EB-NEXT:    lw $1, 28($sp)
2235 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $1
2236 ; MIPS32R5EB-NEXT:    shf.w $w1, $w1, 177
2237 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $5
2238 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $6
2239 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $7
2240 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
2241 ; MIPS32R5EB-NEXT:    addv.d $w0, $w0, $w1
2242 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
2243 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[0]
2244 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[1]
2245 ; MIPS32R5EB-NEXT:    copy_s.w $4, $w0[2]
2246 ; MIPS32R5EB-NEXT:    copy_s.w $5, $w0[3]
2247 ; MIPS32R5EB-NEXT:    jr $ra
2248 ; MIPS32R5EB-NEXT:    nop
2250 ; MIPS64R5-LABEL: i64_2:
2251 ; MIPS64R5:       # %bb.0:
2252 ; MIPS64R5-NEXT:    ldi.b $w0, 0
2253 ; MIPS64R5-NEXT:    move.v $w1, $w0
2254 ; MIPS64R5-NEXT:    insert.d $w1[0], $6
2255 ; MIPS64R5-NEXT:    insert.d $w1[1], $7
2256 ; MIPS64R5-NEXT:    insert.d $w0[0], $4
2257 ; MIPS64R5-NEXT:    insert.d $w0[1], $5
2258 ; MIPS64R5-NEXT:    addv.d $w0, $w0, $w1
2259 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
2260 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
2261 ; MIPS64R5-NEXT:    jr $ra
2262 ; MIPS64R5-NEXT:    nop
2264 ; MIPS32EL-LABEL: i64_2:
2265 ; MIPS32EL:       # %bb.0:
2266 ; MIPS32EL-NEXT:    lw $1, 20($sp)
2267 ; MIPS32EL-NEXT:    addu $1, $5, $1
2268 ; MIPS32EL-NEXT:    lw $2, 16($sp)
2269 ; MIPS32EL-NEXT:    addu $2, $4, $2
2270 ; MIPS32EL-NEXT:    sltu $3, $2, $4
2271 ; MIPS32EL-NEXT:    lw $4, 28($sp)
2272 ; MIPS32EL-NEXT:    addu $3, $1, $3
2273 ; MIPS32EL-NEXT:    addu $1, $7, $4
2274 ; MIPS32EL-NEXT:    lw $4, 24($sp)
2275 ; MIPS32EL-NEXT:    addu $4, $6, $4
2276 ; MIPS32EL-NEXT:    sltu $5, $4, $6
2277 ; MIPS32EL-NEXT:    addu $5, $1, $5
2278 ; MIPS32EL-NEXT:    jr $ra
2279 ; MIPS32EL-NEXT:    nop
2281 ; MIPS32R5EL-LABEL: i64_2:
2282 ; MIPS32R5EL:       # %bb.0:
2283 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
2284 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
2285 ; MIPS32R5EL-NEXT:    lw $2, 16($sp)
2286 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
2287 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $2
2288 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $1
2289 ; MIPS32R5EL-NEXT:    lw $1, 24($sp)
2290 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
2291 ; MIPS32R5EL-NEXT:    lw $1, 28($sp)
2292 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $1
2293 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $4
2294 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $5
2295 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $6
2296 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $7
2297 ; MIPS32R5EL-NEXT:    addv.d $w0, $w0, $w1
2298 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
2299 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[1]
2300 ; MIPS32R5EL-NEXT:    copy_s.w $4, $w0[2]
2301 ; MIPS32R5EL-NEXT:    copy_s.w $5, $w0[3]
2302 ; MIPS32R5EL-NEXT:    jr $ra
2303 ; MIPS32R5EL-NEXT:    nop
2304   %1 = add <2 x i64> %a, %b
2305   ret <2 x i64> %1
2308 ; The MIPS vector ABI treats vectors of floats differently to vectors of
2309 ; integers.
2311 ; For arguments floating pointer vectors are bitcasted to integer vectors whose
2312 ; elements are of GPR width and where the element count is deduced from
2313 ; the length of the floating point vector divided by the size of the GPRs.
2315 ; For returns, integer vectors are passed via the GPR register set, but
2316 ; floating point vectors are returned via a hidden sret pointer.
2318 ; For testing purposes we skip returning values here and test them below
2319 ; instead.
2320 @float_res_v2f32 = external global <2 x float>
2322 define void @float_2(<2 x float> %a, <2 x float> %b) {
2323 ; MIPS32-LABEL: float_2:
2324 ; MIPS32:       # %bb.0:
2325 ; MIPS32-NEXT:    mtc1 $7, $f0
2326 ; MIPS32-NEXT:    mtc1 $5, $f1
2327 ; MIPS32-NEXT:    add.s $f0, $f1, $f0
2328 ; MIPS32-NEXT:    lui $1, %hi(float_res_v2f32)
2329 ; MIPS32-NEXT:    addiu $2, $1, %lo(float_res_v2f32)
2330 ; MIPS32-NEXT:    swc1 $f0, 4($2)
2331 ; MIPS32-NEXT:    mtc1 $6, $f0
2332 ; MIPS32-NEXT:    mtc1 $4, $f1
2333 ; MIPS32-NEXT:    add.s $f0, $f1, $f0
2334 ; MIPS32-NEXT:    swc1 $f0, %lo(float_res_v2f32)($1)
2335 ; MIPS32-NEXT:    jr $ra
2336 ; MIPS32-NEXT:    nop
2338 ; MIPS64EB-LABEL: float_2:
2339 ; MIPS64EB:       # %bb.0:
2340 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(float_2)))
2341 ; MIPS64EB-NEXT:    daddu $1, $1, $25
2342 ; MIPS64EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2343 ; MIPS64EB-NEXT:    sll $2, $5, 0
2344 ; MIPS64EB-NEXT:    mtc1 $2, $f0
2345 ; MIPS64EB-NEXT:    sll $2, $4, 0
2346 ; MIPS64EB-NEXT:    mtc1 $2, $f1
2347 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
2348 ; MIPS64EB-NEXT:    dsrl $2, $5, 32
2349 ; MIPS64EB-NEXT:    sll $2, $2, 0
2350 ; MIPS64EB-NEXT:    ld $1, %got_disp(float_res_v2f32)($1)
2351 ; MIPS64EB-NEXT:    swc1 $f0, 4($1)
2352 ; MIPS64EB-NEXT:    mtc1 $2, $f0
2353 ; MIPS64EB-NEXT:    dsrl $2, $4, 32
2354 ; MIPS64EB-NEXT:    sll $2, $2, 0
2355 ; MIPS64EB-NEXT:    mtc1 $2, $f1
2356 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
2357 ; MIPS64EB-NEXT:    swc1 $f0, 0($1)
2358 ; MIPS64EB-NEXT:    jr $ra
2359 ; MIPS64EB-NEXT:    nop
2361 ; MIPS32R5-LABEL: float_2:
2362 ; MIPS32R5:       # %bb.0:
2363 ; MIPS32R5-NEXT:    addiu $sp, $sp, -48
2364 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 48
2365 ; MIPS32R5-NEXT:    sw $fp, 44($sp) # 4-byte Folded Spill
2366 ; MIPS32R5-NEXT:    .cfi_offset 30, -4
2367 ; MIPS32R5-NEXT:    move $fp, $sp
2368 ; MIPS32R5-NEXT:    .cfi_def_cfa_register 30
2369 ; MIPS32R5-NEXT:    addiu $1, $zero, -16
2370 ; MIPS32R5-NEXT:    and $sp, $sp, $1
2371 ; MIPS32R5-NEXT:    sw $7, 20($sp)
2372 ; MIPS32R5-NEXT:    sw $6, 16($sp)
2373 ; MIPS32R5-NEXT:    sw $5, 4($sp)
2374 ; MIPS32R5-NEXT:    sw $4, 0($sp)
2375 ; MIPS32R5-NEXT:    ld.w $w0, 16($sp)
2376 ; MIPS32R5-NEXT:    ld.w $w1, 0($sp)
2377 ; MIPS32R5-NEXT:    fadd.w $w0, $w1, $w0
2378 ; MIPS32R5-NEXT:    lui $1, %hi(float_res_v2f32)
2379 ; MIPS32R5-NEXT:    addiu $2, $1, %lo(float_res_v2f32)
2380 ; MIPS32R5-NEXT:    splati.w $w1, $w0[1]
2381 ; MIPS32R5-NEXT:    swc1 $f1, 4($2)
2382 ; MIPS32R5-NEXT:    swc1 $f0, %lo(float_res_v2f32)($1)
2383 ; MIPS32R5-NEXT:    move $sp, $fp
2384 ; MIPS32R5-NEXT:    lw $fp, 44($sp) # 4-byte Folded Reload
2385 ; MIPS32R5-NEXT:    addiu $sp, $sp, 48
2386 ; MIPS32R5-NEXT:    jr $ra
2387 ; MIPS32R5-NEXT:    nop
2389 ; MIPS64R5EB-LABEL: float_2:
2390 ; MIPS64R5EB:       # %bb.0:
2391 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
2392 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
2393 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(float_2)))
2394 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
2395 ; MIPS64R5EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2396 ; MIPS64R5EB-NEXT:    sd $5, 16($sp)
2397 ; MIPS64R5EB-NEXT:    sd $4, 0($sp)
2398 ; MIPS64R5EB-NEXT:    ld.w $w0, 16($sp)
2399 ; MIPS64R5EB-NEXT:    ld.w $w1, 0($sp)
2400 ; MIPS64R5EB-NEXT:    fadd.w $w0, $w1, $w0
2401 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
2402 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
2403 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(float_res_v2f32)($1)
2404 ; MIPS64R5EB-NEXT:    sd $2, 0($1)
2405 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
2406 ; MIPS64R5EB-NEXT:    jr $ra
2407 ; MIPS64R5EB-NEXT:    nop
2409 ; MIPS64EL-LABEL: float_2:
2410 ; MIPS64EL:       # %bb.0:
2411 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(float_2)))
2412 ; MIPS64EL-NEXT:    daddu $1, $1, $25
2413 ; MIPS64EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2414 ; MIPS64EL-NEXT:    sll $2, $5, 0
2415 ; MIPS64EL-NEXT:    mtc1 $2, $f0
2416 ; MIPS64EL-NEXT:    sll $2, $4, 0
2417 ; MIPS64EL-NEXT:    mtc1 $2, $f1
2418 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
2419 ; MIPS64EL-NEXT:    dsrl $2, $5, 32
2420 ; MIPS64EL-NEXT:    sll $2, $2, 0
2421 ; MIPS64EL-NEXT:    ld $1, %got_disp(float_res_v2f32)($1)
2422 ; MIPS64EL-NEXT:    swc1 $f0, 0($1)
2423 ; MIPS64EL-NEXT:    mtc1 $2, $f0
2424 ; MIPS64EL-NEXT:    dsrl $2, $4, 32
2425 ; MIPS64EL-NEXT:    sll $2, $2, 0
2426 ; MIPS64EL-NEXT:    mtc1 $2, $f1
2427 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
2428 ; MIPS64EL-NEXT:    swc1 $f0, 4($1)
2429 ; MIPS64EL-NEXT:    jr $ra
2430 ; MIPS64EL-NEXT:    nop
2432 ; MIPS64R5EL-LABEL: float_2:
2433 ; MIPS64R5EL:       # %bb.0:
2434 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
2435 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
2436 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(float_2)))
2437 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
2438 ; MIPS64R5EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2439 ; MIPS64R5EL-NEXT:    sd $5, 16($sp)
2440 ; MIPS64R5EL-NEXT:    sd $4, 0($sp)
2441 ; MIPS64R5EL-NEXT:    ld.w $w0, 16($sp)
2442 ; MIPS64R5EL-NEXT:    ld.w $w1, 0($sp)
2443 ; MIPS64R5EL-NEXT:    fadd.w $w0, $w1, $w0
2444 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
2445 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(float_res_v2f32)($1)
2446 ; MIPS64R5EL-NEXT:    sd $2, 0($1)
2447 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
2448 ; MIPS64R5EL-NEXT:    jr $ra
2449 ; MIPS64R5EL-NEXT:    nop
2450   %1 = fadd <2 x float> %a, %b
2451   store <2 x float> %1, <2 x float> * @float_res_v2f32
2452   ret void
2455 @float_res_v4f32 = external global <4 x float>
2457 ; For MSA this case is suboptimal, the 4 loads can be combined into a single
2458 ; ld.w.
2460 define void @float_4(<4 x float> %a, <4 x float> %b) {
2461 ; MIPS32-LABEL: float_4:
2462 ; MIPS32:       # %bb.0:
2463 ; MIPS32-NEXT:    mtc1 $7, $f0
2464 ; MIPS32-NEXT:    mtc1 $6, $f1
2465 ; MIPS32-NEXT:    lwc1 $f2, 28($sp)
2466 ; MIPS32-NEXT:    lwc1 $f3, 24($sp)
2467 ; MIPS32-NEXT:    add.s $f1, $f1, $f3
2468 ; MIPS32-NEXT:    add.s $f0, $f0, $f2
2469 ; MIPS32-NEXT:    mtc1 $5, $f2
2470 ; MIPS32-NEXT:    lui $1, %hi(float_res_v4f32)
2471 ; MIPS32-NEXT:    addiu $2, $1, %lo(float_res_v4f32)
2472 ; MIPS32-NEXT:    lwc1 $f3, 20($sp)
2473 ; MIPS32-NEXT:    swc1 $f0, 12($2)
2474 ; MIPS32-NEXT:    swc1 $f1, 8($2)
2475 ; MIPS32-NEXT:    add.s $f0, $f2, $f3
2476 ; MIPS32-NEXT:    swc1 $f0, 4($2)
2477 ; MIPS32-NEXT:    mtc1 $4, $f0
2478 ; MIPS32-NEXT:    lwc1 $f1, 16($sp)
2479 ; MIPS32-NEXT:    add.s $f0, $f0, $f1
2480 ; MIPS32-NEXT:    swc1 $f0, %lo(float_res_v4f32)($1)
2481 ; MIPS32-NEXT:    jr $ra
2482 ; MIPS32-NEXT:    nop
2484 ; MIPS64EB-LABEL: float_4:
2485 ; MIPS64EB:       # %bb.0:
2486 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(float_4)))
2487 ; MIPS64EB-NEXT:    daddu $1, $1, $25
2488 ; MIPS64EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2489 ; MIPS64EB-NEXT:    dsrl $2, $7, 32
2490 ; MIPS64EB-NEXT:    sll $2, $2, 0
2491 ; MIPS64EB-NEXT:    sll $3, $4, 0
2492 ; MIPS64EB-NEXT:    sll $8, $6, 0
2493 ; MIPS64EB-NEXT:    sll $7, $7, 0
2494 ; MIPS64EB-NEXT:    mtc1 $8, $f0
2495 ; MIPS64EB-NEXT:    mtc1 $3, $f1
2496 ; MIPS64EB-NEXT:    mtc1 $2, $f2
2497 ; MIPS64EB-NEXT:    dsrl $2, $5, 32
2498 ; MIPS64EB-NEXT:    sll $2, $2, 0
2499 ; MIPS64EB-NEXT:    mtc1 $2, $f3
2500 ; MIPS64EB-NEXT:    add.s $f2, $f3, $f2
2501 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
2502 ; MIPS64EB-NEXT:    mtc1 $7, $f1
2503 ; MIPS64EB-NEXT:    sll $2, $5, 0
2504 ; MIPS64EB-NEXT:    mtc1 $2, $f3
2505 ; MIPS64EB-NEXT:    add.s $f1, $f3, $f1
2506 ; MIPS64EB-NEXT:    dsrl $2, $6, 32
2507 ; MIPS64EB-NEXT:    sll $2, $2, 0
2508 ; MIPS64EB-NEXT:    ld $1, %got_disp(float_res_v4f32)($1)
2509 ; MIPS64EB-NEXT:    swc1 $f1, 12($1)
2510 ; MIPS64EB-NEXT:    swc1 $f0, 4($1)
2511 ; MIPS64EB-NEXT:    swc1 $f2, 8($1)
2512 ; MIPS64EB-NEXT:    mtc1 $2, $f0
2513 ; MIPS64EB-NEXT:    dsrl $2, $4, 32
2514 ; MIPS64EB-NEXT:    sll $2, $2, 0
2515 ; MIPS64EB-NEXT:    mtc1 $2, $f1
2516 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
2517 ; MIPS64EB-NEXT:    swc1 $f0, 0($1)
2518 ; MIPS64EB-NEXT:    jr $ra
2519 ; MIPS64EB-NEXT:    nop
2521 ; MIPS32R5-LABEL: float_4:
2522 ; MIPS32R5:       # %bb.0:
2523 ; MIPS32R5-NEXT:    ldi.b $w0, 0
2524 ; MIPS32R5-NEXT:    lw $1, 20($sp)
2525 ; MIPS32R5-NEXT:    lw $2, 16($sp)
2526 ; MIPS32R5-NEXT:    move.v $w1, $w0
2527 ; MIPS32R5-NEXT:    insert.w $w1[0], $2
2528 ; MIPS32R5-NEXT:    insert.w $w1[1], $1
2529 ; MIPS32R5-NEXT:    lw $1, 24($sp)
2530 ; MIPS32R5-NEXT:    insert.w $w1[2], $1
2531 ; MIPS32R5-NEXT:    lw $1, 28($sp)
2532 ; MIPS32R5-NEXT:    insert.w $w1[3], $1
2533 ; MIPS32R5-NEXT:    insert.w $w0[0], $4
2534 ; MIPS32R5-NEXT:    insert.w $w0[1], $5
2535 ; MIPS32R5-NEXT:    insert.w $w0[2], $6
2536 ; MIPS32R5-NEXT:    insert.w $w0[3], $7
2537 ; MIPS32R5-NEXT:    fadd.w $w0, $w0, $w1
2538 ; MIPS32R5-NEXT:    lui $1, %hi(float_res_v4f32)
2539 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(float_res_v4f32)
2540 ; MIPS32R5-NEXT:    st.w $w0, 0($1)
2541 ; MIPS32R5-NEXT:    jr $ra
2542 ; MIPS32R5-NEXT:    nop
2544 ; MIPS64R5EB-LABEL: float_4:
2545 ; MIPS64R5EB:       # %bb.0:
2546 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(float_4)))
2547 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
2548 ; MIPS64R5EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2549 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
2550 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
2551 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $6
2552 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $7
2553 ; MIPS64R5EB-NEXT:    shf.w $w1, $w1, 177
2554 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
2555 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
2556 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
2557 ; MIPS64R5EB-NEXT:    fadd.w $w0, $w0, $w1
2558 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(float_res_v4f32)($1)
2559 ; MIPS64R5EB-NEXT:    st.w $w0, 0($1)
2560 ; MIPS64R5EB-NEXT:    jr $ra
2561 ; MIPS64R5EB-NEXT:    nop
2563 ; MIPS64EL-LABEL: float_4:
2564 ; MIPS64EL:       # %bb.0:
2565 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(float_4)))
2566 ; MIPS64EL-NEXT:    daddu $1, $1, $25
2567 ; MIPS64EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2568 ; MIPS64EL-NEXT:    dsrl $2, $7, 32
2569 ; MIPS64EL-NEXT:    sll $2, $2, 0
2570 ; MIPS64EL-NEXT:    sll $3, $4, 0
2571 ; MIPS64EL-NEXT:    sll $8, $6, 0
2572 ; MIPS64EL-NEXT:    sll $7, $7, 0
2573 ; MIPS64EL-NEXT:    mtc1 $8, $f0
2574 ; MIPS64EL-NEXT:    mtc1 $3, $f1
2575 ; MIPS64EL-NEXT:    mtc1 $2, $f2
2576 ; MIPS64EL-NEXT:    dsrl $2, $5, 32
2577 ; MIPS64EL-NEXT:    sll $2, $2, 0
2578 ; MIPS64EL-NEXT:    mtc1 $2, $f3
2579 ; MIPS64EL-NEXT:    add.s $f2, $f3, $f2
2580 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
2581 ; MIPS64EL-NEXT:    mtc1 $7, $f1
2582 ; MIPS64EL-NEXT:    sll $2, $5, 0
2583 ; MIPS64EL-NEXT:    mtc1 $2, $f3
2584 ; MIPS64EL-NEXT:    add.s $f1, $f3, $f1
2585 ; MIPS64EL-NEXT:    dsrl $2, $6, 32
2586 ; MIPS64EL-NEXT:    sll $2, $2, 0
2587 ; MIPS64EL-NEXT:    ld $1, %got_disp(float_res_v4f32)($1)
2588 ; MIPS64EL-NEXT:    swc1 $f1, 8($1)
2589 ; MIPS64EL-NEXT:    swc1 $f0, 0($1)
2590 ; MIPS64EL-NEXT:    swc1 $f2, 12($1)
2591 ; MIPS64EL-NEXT:    mtc1 $2, $f0
2592 ; MIPS64EL-NEXT:    dsrl $2, $4, 32
2593 ; MIPS64EL-NEXT:    sll $2, $2, 0
2594 ; MIPS64EL-NEXT:    mtc1 $2, $f1
2595 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
2596 ; MIPS64EL-NEXT:    swc1 $f0, 4($1)
2597 ; MIPS64EL-NEXT:    jr $ra
2598 ; MIPS64EL-NEXT:    nop
2600 ; MIPS64R5EL-LABEL: float_4:
2601 ; MIPS64R5EL:       # %bb.0:
2602 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(float_4)))
2603 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
2604 ; MIPS64R5EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2605 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
2606 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
2607 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $6
2608 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $7
2609 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
2610 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
2611 ; MIPS64R5EL-NEXT:    fadd.w $w0, $w0, $w1
2612 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(float_res_v4f32)($1)
2613 ; MIPS64R5EL-NEXT:    st.w $w0, 0($1)
2614 ; MIPS64R5EL-NEXT:    jr $ra
2615 ; MIPS64R5EL-NEXT:    nop
2616   %1 = fadd <4 x float> %a, %b
2617   store <4 x float> %1, <4 x float> * @float_res_v4f32
2618   ret void
2621 @double_v2f64 = external global <2 x double>
2623 define void @double_2(<2 x double> %a, <2 x double> %b) {
2624 ; MIPS32-LABEL: double_2:
2625 ; MIPS32:       # %bb.0:
2626 ; MIPS32-NEXT:    addiu $sp, $sp, -32
2627 ; MIPS32-NEXT:    .cfi_def_cfa_offset 32
2628 ; MIPS32-NEXT:    lw $1, 60($sp)
2629 ; MIPS32-NEXT:    sw $1, 12($sp)
2630 ; MIPS32-NEXT:    lw $1, 56($sp)
2631 ; MIPS32-NEXT:    sw $1, 8($sp)
2632 ; MIPS32-NEXT:    sw $7, 28($sp)
2633 ; MIPS32-NEXT:    sw $6, 24($sp)
2634 ; MIPS32-NEXT:    ldc1 $f0, 8($sp)
2635 ; MIPS32-NEXT:    ldc1 $f2, 24($sp)
2636 ; MIPS32-NEXT:    add.d $f0, $f2, $f0
2637 ; MIPS32-NEXT:    lui $1, %hi(double_v2f64)
2638 ; MIPS32-NEXT:    addiu $2, $1, %lo(double_v2f64)
2639 ; MIPS32-NEXT:    lw $3, 52($sp)
2640 ; MIPS32-NEXT:    sdc1 $f0, 8($2)
2641 ; MIPS32-NEXT:    sw $3, 4($sp)
2642 ; MIPS32-NEXT:    lw $2, 48($sp)
2643 ; MIPS32-NEXT:    sw $2, 0($sp)
2644 ; MIPS32-NEXT:    sw $5, 20($sp)
2645 ; MIPS32-NEXT:    sw $4, 16($sp)
2646 ; MIPS32-NEXT:    ldc1 $f0, 0($sp)
2647 ; MIPS32-NEXT:    ldc1 $f2, 16($sp)
2648 ; MIPS32-NEXT:    add.d $f0, $f2, $f0
2649 ; MIPS32-NEXT:    sdc1 $f0, %lo(double_v2f64)($1)
2650 ; MIPS32-NEXT:    addiu $sp, $sp, 32
2651 ; MIPS32-NEXT:    jr $ra
2652 ; MIPS32-NEXT:    nop
2654 ; MIPS64-LABEL: double_2:
2655 ; MIPS64:       # %bb.0:
2656 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(double_2)))
2657 ; MIPS64-NEXT:    daddu $1, $1, $25
2658 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(double_2)))
2659 ; MIPS64-NEXT:    dmtc1 $7, $f0
2660 ; MIPS64-NEXT:    dmtc1 $5, $f1
2661 ; MIPS64-NEXT:    add.d $f0, $f1, $f0
2662 ; MIPS64-NEXT:    ld $1, %got_disp(double_v2f64)($1)
2663 ; MIPS64-NEXT:    sdc1 $f0, 8($1)
2664 ; MIPS64-NEXT:    dmtc1 $6, $f0
2665 ; MIPS64-NEXT:    dmtc1 $4, $f1
2666 ; MIPS64-NEXT:    add.d $f0, $f1, $f0
2667 ; MIPS64-NEXT:    sdc1 $f0, 0($1)
2668 ; MIPS64-NEXT:    jr $ra
2669 ; MIPS64-NEXT:    nop
2671 ; MIPS32R5EB-LABEL: double_2:
2672 ; MIPS32R5EB:       # %bb.0:
2673 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
2674 ; MIPS32R5EB-NEXT:    lw $1, 20($sp)
2675 ; MIPS32R5EB-NEXT:    lw $2, 16($sp)
2676 ; MIPS32R5EB-NEXT:    move.v $w1, $w0
2677 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $2
2678 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $1
2679 ; MIPS32R5EB-NEXT:    lw $1, 24($sp)
2680 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $4
2681 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
2682 ; MIPS32R5EB-NEXT:    lw $1, 28($sp)
2683 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $1
2684 ; MIPS32R5EB-NEXT:    shf.w $w1, $w1, 177
2685 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $5
2686 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $6
2687 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $7
2688 ; MIPS32R5EB-NEXT:    shf.w $w0, $w0, 177
2689 ; MIPS32R5EB-NEXT:    fadd.d $w0, $w0, $w1
2690 ; MIPS32R5EB-NEXT:    lui $1, %hi(double_v2f64)
2691 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo(double_v2f64)
2692 ; MIPS32R5EB-NEXT:    st.d $w0, 0($1)
2693 ; MIPS32R5EB-NEXT:    jr $ra
2694 ; MIPS32R5EB-NEXT:    nop
2696 ; MIPS64R5-LABEL: double_2:
2697 ; MIPS64R5:       # %bb.0:
2698 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(double_2)))
2699 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2700 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(double_2)))
2701 ; MIPS64R5-NEXT:    ldi.b $w0, 0
2702 ; MIPS64R5-NEXT:    move.v $w1, $w0
2703 ; MIPS64R5-NEXT:    insert.d $w1[0], $6
2704 ; MIPS64R5-NEXT:    insert.d $w1[1], $7
2705 ; MIPS64R5-NEXT:    insert.d $w0[0], $4
2706 ; MIPS64R5-NEXT:    insert.d $w0[1], $5
2707 ; MIPS64R5-NEXT:    fadd.d $w0, $w0, $w1
2708 ; MIPS64R5-NEXT:    ld $1, %got_disp(double_v2f64)($1)
2709 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
2710 ; MIPS64R5-NEXT:    jr $ra
2711 ; MIPS64R5-NEXT:    nop
2713 ; MIPS32R5EL-LABEL: double_2:
2714 ; MIPS32R5EL:       # %bb.0:
2715 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
2716 ; MIPS32R5EL-NEXT:    lw $1, 20($sp)
2717 ; MIPS32R5EL-NEXT:    lw $2, 16($sp)
2718 ; MIPS32R5EL-NEXT:    move.v $w1, $w0
2719 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $2
2720 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $1
2721 ; MIPS32R5EL-NEXT:    lw $1, 24($sp)
2722 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
2723 ; MIPS32R5EL-NEXT:    lw $1, 28($sp)
2724 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $1
2725 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $4
2726 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $5
2727 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $6
2728 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $7
2729 ; MIPS32R5EL-NEXT:    fadd.d $w0, $w0, $w1
2730 ; MIPS32R5EL-NEXT:    lui $1, %hi(double_v2f64)
2731 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo(double_v2f64)
2732 ; MIPS32R5EL-NEXT:    st.d $w0, 0($1)
2733 ; MIPS32R5EL-NEXT:    jr $ra
2734 ; MIPS32R5EL-NEXT:    nop
2735   %1 = fadd <2 x double> %a, %b
2736   store <2 x double> %1, <2 x double> * @double_v2f64
2737   ret void
2740 ; Return value testing.
2741 ; Integer vectors are returned in $2, $3, $4, $5 for O32, $2, $3 for N32/N64
2742 ; Floating point vectors are returned through a hidden sret pointer.
2744 @gv2i8 = global <2 x i8> <i8 1, i8 2>
2745 @gv4i8 = global <4 x i8> <i8 0, i8 1, i8 2, i8 3>
2746 @gv8i8 = global <8 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>
2747 @gv16i8 = global <16 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>
2749 @gv2i16 = global <2 x i16> <i16 1, i16 2>
2750 @gv4i16 = global <4 x i16> <i16 0, i16 1, i16 2, i16 3>
2751 @gv8i16 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>
2753 @gv2i32 = global <2 x i32> <i32 0, i32 1>
2754 @gv4i32 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2756 @gv2i64 = global <2 x i64> <i64 0, i64 1>
2758 ; FIXME: why is this lh instead of lhu on mips64?
2759 define <2 x i8> @ret_2_i8() {
2760 ; MIPS32-LABEL: ret_2_i8:
2761 ; MIPS32:       # %bb.0:
2762 ; MIPS32-NEXT:    lui $1, %hi(gv2i8)
2763 ; MIPS32-NEXT:    lhu $2, %lo(gv2i8)($1)
2764 ; MIPS32-NEXT:    jr $ra
2765 ; MIPS32-NEXT:    nop
2767 ; MIPS64-LABEL: ret_2_i8:
2768 ; MIPS64:       # %bb.0:
2769 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i8)))
2770 ; MIPS64-NEXT:    daddu $1, $1, $25
2771 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8)))
2772 ; MIPS64-NEXT:    ld $1, %got_disp(gv2i8)($1)
2773 ; MIPS64-NEXT:    lh $2, 0($1)
2774 ; MIPS64-NEXT:    jr $ra
2775 ; MIPS64-NEXT:    nop
2777 ; MIPS32R5-LABEL: ret_2_i8:
2778 ; MIPS32R5:       # %bb.0:
2779 ; MIPS32R5-NEXT:    lui $1, %hi(gv2i8)
2780 ; MIPS32R5-NEXT:    lhu $2, %lo(gv2i8)($1)
2781 ; MIPS32R5-NEXT:    jr $ra
2782 ; MIPS32R5-NEXT:    nop
2784 ; MIPS64R5-LABEL: ret_2_i8:
2785 ; MIPS64R5:       # %bb.0:
2786 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i8)))
2787 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2788 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8)))
2789 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2i8)($1)
2790 ; MIPS64R5-NEXT:    lh $2, 0($1)
2791 ; MIPS64R5-NEXT:    jr $ra
2792 ; MIPS64R5-NEXT:    nop
2793   %1 = load <2 x i8>, <2 x i8> * @gv2i8
2794   ret <2 x i8> %1
2797 define <4 x i8> @ret_4_i8() {
2798 ; MIPS32-LABEL: ret_4_i8:
2799 ; MIPS32:       # %bb.0:
2800 ; MIPS32-NEXT:    lui $1, %hi(gv4i8)
2801 ; MIPS32-NEXT:    lw $2, %lo(gv4i8)($1)
2802 ; MIPS32-NEXT:    jr $ra
2803 ; MIPS32-NEXT:    nop
2805 ; MIPS64-LABEL: ret_4_i8:
2806 ; MIPS64:       # %bb.0:
2807 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i8)))
2808 ; MIPS64-NEXT:    daddu $1, $1, $25
2809 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8)))
2810 ; MIPS64-NEXT:    ld $1, %got_disp(gv4i8)($1)
2811 ; MIPS64-NEXT:    lw $2, 0($1)
2812 ; MIPS64-NEXT:    jr $ra
2813 ; MIPS64-NEXT:    nop
2815 ; MIPS32R5-LABEL: ret_4_i8:
2816 ; MIPS32R5:       # %bb.0:
2817 ; MIPS32R5-NEXT:    lui $1, %hi(gv4i8)
2818 ; MIPS32R5-NEXT:    lw $2, %lo(gv4i8)($1)
2819 ; MIPS32R5-NEXT:    jr $ra
2820 ; MIPS32R5-NEXT:    nop
2822 ; MIPS64R5-LABEL: ret_4_i8:
2823 ; MIPS64R5:       # %bb.0:
2824 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i8)))
2825 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2826 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8)))
2827 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4i8)($1)
2828 ; MIPS64R5-NEXT:    lw $2, 0($1)
2829 ; MIPS64R5-NEXT:    jr $ra
2830 ; MIPS64R5-NEXT:    nop
2831   %1 = load <4 x i8>, <4 x i8> * @gv4i8
2832   ret <4 x i8> %1
2835 define <8 x i8> @ret_8_i8() {
2836 ; MIPS32-LABEL: ret_8_i8:
2837 ; MIPS32:       # %bb.0:
2838 ; MIPS32-NEXT:    lui $1, %hi(gv8i8)
2839 ; MIPS32-NEXT:    lw $2, %lo(gv8i8)($1)
2840 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv8i8)
2841 ; MIPS32-NEXT:    lw $3, 4($1)
2842 ; MIPS32-NEXT:    jr $ra
2843 ; MIPS32-NEXT:    nop
2845 ; MIPS64-LABEL: ret_8_i8:
2846 ; MIPS64:       # %bb.0:
2847 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_8_i8)))
2848 ; MIPS64-NEXT:    daddu $1, $1, $25
2849 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8)))
2850 ; MIPS64-NEXT:    ld $1, %got_disp(gv8i8)($1)
2851 ; MIPS64-NEXT:    ld $2, 0($1)
2852 ; MIPS64-NEXT:    jr $ra
2853 ; MIPS64-NEXT:    nop
2855 ; MIPS32R5EB-LABEL: ret_8_i8:
2856 ; MIPS32R5EB:       # %bb.0:
2857 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
2858 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
2859 ; MIPS32R5EB-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
2860 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
2861 ; MIPS32R5EB-NEXT:    move $fp, $sp
2862 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
2863 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
2864 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
2865 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv8i8)
2866 ; MIPS32R5EB-NEXT:    lw $2, %lo(gv8i8)($1)
2867 ; MIPS32R5EB-NEXT:    sw $2, 4($sp)
2868 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo(gv8i8)
2869 ; MIPS32R5EB-NEXT:    lw $1, 4($1)
2870 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
2871 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($sp)
2872 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
2873 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
2874 ; MIPS32R5EB-NEXT:    move $sp, $fp
2875 ; MIPS32R5EB-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
2876 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
2877 ; MIPS32R5EB-NEXT:    jr $ra
2878 ; MIPS32R5EB-NEXT:    nop
2880 ; MIPS64R5-LABEL: ret_8_i8:
2881 ; MIPS64R5:       # %bb.0:
2882 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_8_i8)))
2883 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2884 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8)))
2885 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv8i8)($1)
2886 ; MIPS64R5-NEXT:    ld $2, 0($1)
2887 ; MIPS64R5-NEXT:    jr $ra
2888 ; MIPS64R5-NEXT:    nop
2890 ; MIPS32R5EL-LABEL: ret_8_i8:
2891 ; MIPS32R5EL:       # %bb.0:
2892 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
2893 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
2894 ; MIPS32R5EL-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
2895 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
2896 ; MIPS32R5EL-NEXT:    move $fp, $sp
2897 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
2898 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
2899 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
2900 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv8i8)
2901 ; MIPS32R5EL-NEXT:    lw $2, %lo(gv8i8)($1)
2902 ; MIPS32R5EL-NEXT:    sw $2, 0($sp)
2903 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo(gv8i8)
2904 ; MIPS32R5EL-NEXT:    lw $1, 4($1)
2905 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
2906 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($sp)
2907 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
2908 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
2909 ; MIPS32R5EL-NEXT:    move $sp, $fp
2910 ; MIPS32R5EL-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
2911 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
2912 ; MIPS32R5EL-NEXT:    jr $ra
2913 ; MIPS32R5EL-NEXT:    nop
2914   %1 = load <8 x i8>, <8 x i8> * @gv8i8
2915   ret <8 x i8> %1
2918 define <16 x i8> @ret_16_i8() {
2919 ; MIPS32-LABEL: ret_16_i8:
2920 ; MIPS32:       # %bb.0:
2921 ; MIPS32-NEXT:    lui $1, %hi(gv16i8)
2922 ; MIPS32-NEXT:    lw $2, %lo(gv16i8)($1)
2923 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv16i8)
2924 ; MIPS32-NEXT:    lw $3, 4($1)
2925 ; MIPS32-NEXT:    lw $4, 8($1)
2926 ; MIPS32-NEXT:    lw $5, 12($1)
2927 ; MIPS32-NEXT:    jr $ra
2928 ; MIPS32-NEXT:    nop
2930 ; MIPS64-LABEL: ret_16_i8:
2931 ; MIPS64:       # %bb.0:
2932 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_16_i8)))
2933 ; MIPS64-NEXT:    daddu $1, $1, $25
2934 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8)))
2935 ; MIPS64-NEXT:    ld $1, %got_disp(gv16i8)($1)
2936 ; MIPS64-NEXT:    ld $2, 0($1)
2937 ; MIPS64-NEXT:    ld $3, 8($1)
2938 ; MIPS64-NEXT:    jr $ra
2939 ; MIPS64-NEXT:    nop
2941 ; MIPS32R5-LABEL: ret_16_i8:
2942 ; MIPS32R5:       # %bb.0:
2943 ; MIPS32R5-NEXT:    lui $1, %hi(gv16i8)
2944 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv16i8)
2945 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
2946 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[0]
2947 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[1]
2948 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[2]
2949 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[3]
2950 ; MIPS32R5-NEXT:    jr $ra
2951 ; MIPS32R5-NEXT:    nop
2953 ; MIPS64R5-LABEL: ret_16_i8:
2954 ; MIPS64R5:       # %bb.0:
2955 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_16_i8)))
2956 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2957 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8)))
2958 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv16i8)($1)
2959 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
2960 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
2961 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
2962 ; MIPS64R5-NEXT:    jr $ra
2963 ; MIPS64R5-NEXT:    nop
2964   %1 = load <16 x i8>, <16 x i8> * @gv16i8
2965   ret <16 x i8> %1
2968 define <2 x i16> @ret_2_i16() {
2969 ; MIPS32-LABEL: ret_2_i16:
2970 ; MIPS32:       # %bb.0:
2971 ; MIPS32-NEXT:    lui $1, %hi(gv2i16)
2972 ; MIPS32-NEXT:    lw $2, %lo(gv2i16)($1)
2973 ; MIPS32-NEXT:    jr $ra
2974 ; MIPS32-NEXT:    nop
2976 ; MIPS64-LABEL: ret_2_i16:
2977 ; MIPS64:       # %bb.0:
2978 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i16)))
2979 ; MIPS64-NEXT:    daddu $1, $1, $25
2980 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16)))
2981 ; MIPS64-NEXT:    ld $1, %got_disp(gv2i16)($1)
2982 ; MIPS64-NEXT:    lw $2, 0($1)
2983 ; MIPS64-NEXT:    jr $ra
2984 ; MIPS64-NEXT:    nop
2986 ; MIPS32R5-LABEL: ret_2_i16:
2987 ; MIPS32R5:       # %bb.0:
2988 ; MIPS32R5-NEXT:    lui $1, %hi(gv2i16)
2989 ; MIPS32R5-NEXT:    lw $2, %lo(gv2i16)($1)
2990 ; MIPS32R5-NEXT:    jr $ra
2991 ; MIPS32R5-NEXT:    nop
2993 ; MIPS64R5-LABEL: ret_2_i16:
2994 ; MIPS64R5:       # %bb.0:
2995 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i16)))
2996 ; MIPS64R5-NEXT:    daddu $1, $1, $25
2997 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16)))
2998 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2i16)($1)
2999 ; MIPS64R5-NEXT:    lw $2, 0($1)
3000 ; MIPS64R5-NEXT:    jr $ra
3001 ; MIPS64R5-NEXT:    nop
3002   %1 = load <2 x i16>, <2 x i16> * @gv2i16
3003   ret <2 x i16> %1
3006 define <4 x i16> @ret_4_i16() {
3007 ; MIPS32-LABEL: ret_4_i16:
3008 ; MIPS32:       # %bb.0:
3009 ; MIPS32-NEXT:    lui $1, %hi(gv4i16)
3010 ; MIPS32-NEXT:    lw $2, %lo(gv4i16)($1)
3011 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv4i16)
3012 ; MIPS32-NEXT:    lw $3, 4($1)
3013 ; MIPS32-NEXT:    jr $ra
3014 ; MIPS32-NEXT:    nop
3016 ; MIPS64-LABEL: ret_4_i16:
3017 ; MIPS64:       # %bb.0:
3018 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i16)))
3019 ; MIPS64-NEXT:    daddu $1, $1, $25
3020 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16)))
3021 ; MIPS64-NEXT:    ld $1, %got_disp(gv4i16)($1)
3022 ; MIPS64-NEXT:    ld $2, 0($1)
3023 ; MIPS64-NEXT:    jr $ra
3024 ; MIPS64-NEXT:    nop
3026 ; MIPS32R5EB-LABEL: ret_4_i16:
3027 ; MIPS32R5EB:       # %bb.0:
3028 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
3029 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
3030 ; MIPS32R5EB-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
3031 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
3032 ; MIPS32R5EB-NEXT:    move $fp, $sp
3033 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
3034 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
3035 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
3036 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv4i16)
3037 ; MIPS32R5EB-NEXT:    lw $2, %lo(gv4i16)($1)
3038 ; MIPS32R5EB-NEXT:    sw $2, 4($sp)
3039 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo(gv4i16)
3040 ; MIPS32R5EB-NEXT:    lw $1, 4($1)
3041 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
3042 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($sp)
3043 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
3044 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
3045 ; MIPS32R5EB-NEXT:    move $sp, $fp
3046 ; MIPS32R5EB-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
3047 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
3048 ; MIPS32R5EB-NEXT:    jr $ra
3049 ; MIPS32R5EB-NEXT:    nop
3051 ; MIPS64R5-LABEL: ret_4_i16:
3052 ; MIPS64R5:       # %bb.0:
3053 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i16)))
3054 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3055 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16)))
3056 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4i16)($1)
3057 ; MIPS64R5-NEXT:    ld $2, 0($1)
3058 ; MIPS64R5-NEXT:    jr $ra
3059 ; MIPS64R5-NEXT:    nop
3061 ; MIPS32R5EL-LABEL: ret_4_i16:
3062 ; MIPS32R5EL:       # %bb.0:
3063 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
3064 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
3065 ; MIPS32R5EL-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
3066 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
3067 ; MIPS32R5EL-NEXT:    move $fp, $sp
3068 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
3069 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
3070 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
3071 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv4i16)
3072 ; MIPS32R5EL-NEXT:    lw $2, %lo(gv4i16)($1)
3073 ; MIPS32R5EL-NEXT:    sw $2, 0($sp)
3074 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo(gv4i16)
3075 ; MIPS32R5EL-NEXT:    lw $1, 4($1)
3076 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
3077 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($sp)
3078 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
3079 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
3080 ; MIPS32R5EL-NEXT:    move $sp, $fp
3081 ; MIPS32R5EL-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
3082 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
3083 ; MIPS32R5EL-NEXT:    jr $ra
3084 ; MIPS32R5EL-NEXT:    nop
3085   %1 = load <4 x i16>, <4 x i16> * @gv4i16
3086   ret <4 x i16> %1
3089 define <8 x i16> @ret_8_i16() {
3090 ; MIPS32-LABEL: ret_8_i16:
3091 ; MIPS32:       # %bb.0:
3092 ; MIPS32-NEXT:    lui $1, %hi(gv8i16)
3093 ; MIPS32-NEXT:    lw $2, %lo(gv8i16)($1)
3094 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv8i16)
3095 ; MIPS32-NEXT:    lw $3, 4($1)
3096 ; MIPS32-NEXT:    lw $4, 8($1)
3097 ; MIPS32-NEXT:    lw $5, 12($1)
3098 ; MIPS32-NEXT:    jr $ra
3099 ; MIPS32-NEXT:    nop
3101 ; MIPS64-LABEL: ret_8_i16:
3102 ; MIPS64:       # %bb.0:
3103 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_8_i16)))
3104 ; MIPS64-NEXT:    daddu $1, $1, $25
3105 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16)))
3106 ; MIPS64-NEXT:    ld $1, %got_disp(gv8i16)($1)
3107 ; MIPS64-NEXT:    ld $2, 0($1)
3108 ; MIPS64-NEXT:    ld $3, 8($1)
3109 ; MIPS64-NEXT:    jr $ra
3110 ; MIPS64-NEXT:    nop
3112 ; MIPS32R5-LABEL: ret_8_i16:
3113 ; MIPS32R5:       # %bb.0:
3114 ; MIPS32R5-NEXT:    lui $1, %hi(gv8i16)
3115 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv8i16)
3116 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
3117 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[0]
3118 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[1]
3119 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[2]
3120 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[3]
3121 ; MIPS32R5-NEXT:    jr $ra
3122 ; MIPS32R5-NEXT:    nop
3124 ; MIPS64R5-LABEL: ret_8_i16:
3125 ; MIPS64R5:       # %bb.0:
3126 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_8_i16)))
3127 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3128 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16)))
3129 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv8i16)($1)
3130 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
3131 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
3132 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
3133 ; MIPS64R5-NEXT:    jr $ra
3134 ; MIPS64R5-NEXT:    nop
3135   %1 = load <8 x i16>, <8 x i16> * @gv8i16
3136   ret <8 x i16> %1
3139 define <2 x i32> @ret_2_i32() {
3140 ; MIPS32-LABEL: ret_2_i32:
3141 ; MIPS32:       # %bb.0:
3142 ; MIPS32-NEXT:    lui $1, %hi(gv2i32)
3143 ; MIPS32-NEXT:    lw $2, %lo(gv2i32)($1)
3144 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv2i32)
3145 ; MIPS32-NEXT:    lw $3, 4($1)
3146 ; MIPS32-NEXT:    jr $ra
3147 ; MIPS32-NEXT:    nop
3149 ; MIPS64-LABEL: ret_2_i32:
3150 ; MIPS64:       # %bb.0:
3151 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i32)))
3152 ; MIPS64-NEXT:    daddu $1, $1, $25
3153 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32)))
3154 ; MIPS64-NEXT:    ld $1, %got_disp(gv2i32)($1)
3155 ; MIPS64-NEXT:    ld $2, 0($1)
3156 ; MIPS64-NEXT:    jr $ra
3157 ; MIPS64-NEXT:    nop
3159 ; MIPS32R5EB-LABEL: ret_2_i32:
3160 ; MIPS32R5EB:       # %bb.0:
3161 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
3162 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
3163 ; MIPS32R5EB-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
3164 ; MIPS32R5EB-NEXT:    .cfi_offset 30, -4
3165 ; MIPS32R5EB-NEXT:    move $fp, $sp
3166 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_register 30
3167 ; MIPS32R5EB-NEXT:    addiu $1, $zero, -16
3168 ; MIPS32R5EB-NEXT:    and $sp, $sp, $1
3169 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv2i32)
3170 ; MIPS32R5EB-NEXT:    lw $2, %lo(gv2i32)($1)
3171 ; MIPS32R5EB-NEXT:    sw $2, 4($sp)
3172 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo(gv2i32)
3173 ; MIPS32R5EB-NEXT:    lw $1, 4($1)
3174 ; MIPS32R5EB-NEXT:    sw $1, 12($sp)
3175 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($sp)
3176 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
3177 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[3]
3178 ; MIPS32R5EB-NEXT:    move $sp, $fp
3179 ; MIPS32R5EB-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
3180 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
3181 ; MIPS32R5EB-NEXT:    jr $ra
3182 ; MIPS32R5EB-NEXT:    nop
3184 ; MIPS64R5-LABEL: ret_2_i32:
3185 ; MIPS64R5:       # %bb.0:
3186 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i32)))
3187 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3188 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32)))
3189 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2i32)($1)
3190 ; MIPS64R5-NEXT:    ld $2, 0($1)
3191 ; MIPS64R5-NEXT:    jr $ra
3192 ; MIPS64R5-NEXT:    nop
3194 ; MIPS32R5EL-LABEL: ret_2_i32:
3195 ; MIPS32R5EL:       # %bb.0:
3196 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
3197 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
3198 ; MIPS32R5EL-NEXT:    sw $fp, 28($sp) # 4-byte Folded Spill
3199 ; MIPS32R5EL-NEXT:    .cfi_offset 30, -4
3200 ; MIPS32R5EL-NEXT:    move $fp, $sp
3201 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_register 30
3202 ; MIPS32R5EL-NEXT:    addiu $1, $zero, -16
3203 ; MIPS32R5EL-NEXT:    and $sp, $sp, $1
3204 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv2i32)
3205 ; MIPS32R5EL-NEXT:    lw $2, %lo(gv2i32)($1)
3206 ; MIPS32R5EL-NEXT:    sw $2, 0($sp)
3207 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo(gv2i32)
3208 ; MIPS32R5EL-NEXT:    lw $1, 4($1)
3209 ; MIPS32R5EL-NEXT:    sw $1, 8($sp)
3210 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($sp)
3211 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[0]
3212 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
3213 ; MIPS32R5EL-NEXT:    move $sp, $fp
3214 ; MIPS32R5EL-NEXT:    lw $fp, 28($sp) # 4-byte Folded Reload
3215 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
3216 ; MIPS32R5EL-NEXT:    jr $ra
3217 ; MIPS32R5EL-NEXT:    nop
3218   %1 = load <2 x i32>, <2 x i32> * @gv2i32
3219   ret <2 x i32> %1
3222 define <4 x i32> @ret_4_i32() {
3223 ; MIPS32-LABEL: ret_4_i32:
3224 ; MIPS32:       # %bb.0:
3225 ; MIPS32-NEXT:    lui $1, %hi(gv4i32)
3226 ; MIPS32-NEXT:    lw $2, %lo(gv4i32)($1)
3227 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv4i32)
3228 ; MIPS32-NEXT:    lw $3, 4($1)
3229 ; MIPS32-NEXT:    lw $4, 8($1)
3230 ; MIPS32-NEXT:    lw $5, 12($1)
3231 ; MIPS32-NEXT:    jr $ra
3232 ; MIPS32-NEXT:    nop
3234 ; MIPS64-LABEL: ret_4_i32:
3235 ; MIPS64:       # %bb.0:
3236 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i32)))
3237 ; MIPS64-NEXT:    daddu $1, $1, $25
3238 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32)))
3239 ; MIPS64-NEXT:    ld $1, %got_disp(gv4i32)($1)
3240 ; MIPS64-NEXT:    ld $2, 0($1)
3241 ; MIPS64-NEXT:    ld $3, 8($1)
3242 ; MIPS64-NEXT:    jr $ra
3243 ; MIPS64-NEXT:    nop
3245 ; MIPS32R5-LABEL: ret_4_i32:
3246 ; MIPS32R5:       # %bb.0:
3247 ; MIPS32R5-NEXT:    lui $1, %hi(gv4i32)
3248 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv4i32)
3249 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
3250 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[0]
3251 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[1]
3252 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[2]
3253 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[3]
3254 ; MIPS32R5-NEXT:    jr $ra
3255 ; MIPS32R5-NEXT:    nop
3257 ; MIPS64R5-LABEL: ret_4_i32:
3258 ; MIPS64R5:       # %bb.0:
3259 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_4_i32)))
3260 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3261 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32)))
3262 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4i32)($1)
3263 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
3264 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
3265 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
3266 ; MIPS64R5-NEXT:    jr $ra
3267 ; MIPS64R5-NEXT:    nop
3268   %1 = load <4 x i32>, <4 x i32> * @gv4i32
3269   ret <4 x i32> %1
3272 define <2 x i64> @ret_2_i64() {
3273 ; MIPS32-LABEL: ret_2_i64:
3274 ; MIPS32:       # %bb.0:
3275 ; MIPS32-NEXT:    lui $1, %hi(gv2i64)
3276 ; MIPS32-NEXT:    lw $2, %lo(gv2i64)($1)
3277 ; MIPS32-NEXT:    addiu $1, $1, %lo(gv2i64)
3278 ; MIPS32-NEXT:    lw $3, 4($1)
3279 ; MIPS32-NEXT:    lw $4, 8($1)
3280 ; MIPS32-NEXT:    lw $5, 12($1)
3281 ; MIPS32-NEXT:    jr $ra
3282 ; MIPS32-NEXT:    nop
3284 ; MIPS64-LABEL: ret_2_i64:
3285 ; MIPS64:       # %bb.0:
3286 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i64)))
3287 ; MIPS64-NEXT:    daddu $1, $1, $25
3288 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64)))
3289 ; MIPS64-NEXT:    ld $1, %got_disp(gv2i64)($1)
3290 ; MIPS64-NEXT:    ld $2, 0($1)
3291 ; MIPS64-NEXT:    ld $3, 8($1)
3292 ; MIPS64-NEXT:    jr $ra
3293 ; MIPS64-NEXT:    nop
3295 ; MIPS32R5-LABEL: ret_2_i64:
3296 ; MIPS32R5:       # %bb.0:
3297 ; MIPS32R5-NEXT:    lui $1, %hi(gv2i64)
3298 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv2i64)
3299 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
3300 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[0]
3301 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[1]
3302 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[2]
3303 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[3]
3304 ; MIPS32R5-NEXT:    jr $ra
3305 ; MIPS32R5-NEXT:    nop
3307 ; MIPS64R5-LABEL: ret_2_i64:
3308 ; MIPS64R5:       # %bb.0:
3309 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_2_i64)))
3310 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3311 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64)))
3312 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2i64)($1)
3313 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
3314 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
3315 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
3316 ; MIPS64R5-NEXT:    jr $ra
3317 ; MIPS64R5-NEXT:    nop
3318   %1 = load <2 x i64>, <2 x i64> * @gv2i64
3319   ret <2 x i64> %1
3322 @gv2f32 = global <2 x float> <float 0.0, float 0.0>
3323 @gv4f32 = global <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0>
3325 define <2 x float> @ret_float_2() {
3326 ; MIPS32-LABEL: ret_float_2:
3327 ; MIPS32:       # %bb.0: # %entry
3328 ; MIPS32-NEXT:    lui $1, %hi(gv2f32)
3329 ; MIPS32-NEXT:    addiu $2, $1, %lo(gv2f32)
3330 ; MIPS32-NEXT:    lwc1 $f0, 4($2)
3331 ; MIPS32-NEXT:    swc1 $f0, 4($4)
3332 ; MIPS32-NEXT:    lwc1 $f0, %lo(gv2f32)($1)
3333 ; MIPS32-NEXT:    swc1 $f0, 0($4)
3334 ; MIPS32-NEXT:    jr $ra
3335 ; MIPS32-NEXT:    nop
3337 ; MIPS64-LABEL: ret_float_2:
3338 ; MIPS64:       # %bb.0: # %entry
3339 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_float_2)))
3340 ; MIPS64-NEXT:    daddu $1, $1, $25
3341 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2)))
3342 ; MIPS64-NEXT:    ld $1, %got_disp(gv2f32)($1)
3343 ; MIPS64-NEXT:    ld $2, 0($1)
3344 ; MIPS64-NEXT:    jr $ra
3345 ; MIPS64-NEXT:    nop
3347 ; MIPS32R5-LABEL: ret_float_2:
3348 ; MIPS32R5:       # %bb.0: # %entry
3349 ; MIPS32R5-NEXT:    lui $1, %hi(gv2f32)
3350 ; MIPS32R5-NEXT:    addiu $2, $1, %lo(gv2f32)
3351 ; MIPS32R5-NEXT:    lwc1 $f0, 4($2)
3352 ; MIPS32R5-NEXT:    swc1 $f0, 4($4)
3353 ; MIPS32R5-NEXT:    lwc1 $f0, %lo(gv2f32)($1)
3354 ; MIPS32R5-NEXT:    swc1 $f0, 0($4)
3355 ; MIPS32R5-NEXT:    jr $ra
3356 ; MIPS32R5-NEXT:    nop
3358 ; MIPS64R5-LABEL: ret_float_2:
3359 ; MIPS64R5:       # %bb.0: # %entry
3360 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_float_2)))
3361 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3362 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2)))
3363 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2f32)($1)
3364 ; MIPS64R5-NEXT:    ld $2, 0($1)
3365 ; MIPS64R5-NEXT:    jr $ra
3366 ; MIPS64R5-NEXT:    nop
3367 entry:
3368   %0 = load <2 x float>, <2 x float> * @gv2f32
3369   ret <2 x float> %0
3372 define <4 x float> @ret_float_4() {
3373 ; MIPS32-LABEL: ret_float_4:
3374 ; MIPS32:       # %bb.0: # %entry
3375 ; MIPS32-NEXT:    lui $1, %hi(gv4f32)
3376 ; MIPS32-NEXT:    addiu $2, $1, %lo(gv4f32)
3377 ; MIPS32-NEXT:    lwc1 $f0, 12($2)
3378 ; MIPS32-NEXT:    swc1 $f0, 12($4)
3379 ; MIPS32-NEXT:    lwc1 $f0, 8($2)
3380 ; MIPS32-NEXT:    swc1 $f0, 8($4)
3381 ; MIPS32-NEXT:    lwc1 $f0, 4($2)
3382 ; MIPS32-NEXT:    swc1 $f0, 4($4)
3383 ; MIPS32-NEXT:    lwc1 $f0, %lo(gv4f32)($1)
3384 ; MIPS32-NEXT:    swc1 $f0, 0($4)
3385 ; MIPS32-NEXT:    jr $ra
3386 ; MIPS32-NEXT:    nop
3388 ; MIPS64-LABEL: ret_float_4:
3389 ; MIPS64:       # %bb.0: # %entry
3390 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_float_4)))
3391 ; MIPS64-NEXT:    daddu $1, $1, $25
3392 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4)))
3393 ; MIPS64-NEXT:    ld $1, %got_disp(gv4f32)($1)
3394 ; MIPS64-NEXT:    ld $2, 0($1)
3395 ; MIPS64-NEXT:    ld $3, 8($1)
3396 ; MIPS64-NEXT:    jr $ra
3397 ; MIPS64-NEXT:    nop
3399 ; MIPS32R5-LABEL: ret_float_4:
3400 ; MIPS32R5:       # %bb.0: # %entry
3401 ; MIPS32R5-NEXT:    lui $1, %hi(gv4f32)
3402 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv4f32)
3403 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
3404 ; MIPS32R5-NEXT:    st.w $w0, 0($4)
3405 ; MIPS32R5-NEXT:    jr $ra
3406 ; MIPS32R5-NEXT:    nop
3408 ; MIPS64R5-LABEL: ret_float_4:
3409 ; MIPS64R5:       # %bb.0: # %entry
3410 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_float_4)))
3411 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3412 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4)))
3413 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4f32)($1)
3414 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
3415 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
3416 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
3417 ; MIPS64R5-NEXT:    jr $ra
3418 ; MIPS64R5-NEXT:    nop
3419 entry:
3420   %0 = load <4 x float>, <4 x float> * @gv4f32
3421   ret <4 x float> %0
3424 @gv2f64 = global <2 x double> <double 0.0, double 0.0>
3426 define <2 x double> @ret_double_2() {
3427 ; MIPS32-LABEL: ret_double_2:
3428 ; MIPS32:       # %bb.0: # %entry
3429 ; MIPS32-NEXT:    lui $1, %hi(gv2f64)
3430 ; MIPS32-NEXT:    addiu $2, $1, %lo(gv2f64)
3431 ; MIPS32-NEXT:    ldc1 $f0, 8($2)
3432 ; MIPS32-NEXT:    sdc1 $f0, 8($4)
3433 ; MIPS32-NEXT:    ldc1 $f0, %lo(gv2f64)($1)
3434 ; MIPS32-NEXT:    sdc1 $f0, 0($4)
3435 ; MIPS32-NEXT:    jr $ra
3436 ; MIPS32-NEXT:    nop
3438 ; MIPS64-LABEL: ret_double_2:
3439 ; MIPS64:       # %bb.0: # %entry
3440 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_double_2)))
3441 ; MIPS64-NEXT:    daddu $1, $1, $25
3442 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2)))
3443 ; MIPS64-NEXT:    ld $1, %got_disp(gv2f64)($1)
3444 ; MIPS64-NEXT:    ld $2, 0($1)
3445 ; MIPS64-NEXT:    ld $3, 8($1)
3446 ; MIPS64-NEXT:    jr $ra
3447 ; MIPS64-NEXT:    nop
3449 ; MIPS32R5-LABEL: ret_double_2:
3450 ; MIPS32R5:       # %bb.0: # %entry
3451 ; MIPS32R5-NEXT:    lui $1, %hi(gv2f64)
3452 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv2f64)
3453 ; MIPS32R5-NEXT:    ld.d $w0, 0($1)
3454 ; MIPS32R5-NEXT:    st.d $w0, 0($4)
3455 ; MIPS32R5-NEXT:    jr $ra
3456 ; MIPS32R5-NEXT:    nop
3458 ; MIPS64R5-LABEL: ret_double_2:
3459 ; MIPS64R5:       # %bb.0: # %entry
3460 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(ret_double_2)))
3461 ; MIPS64R5-NEXT:    daddu $1, $1, $25
3462 ; MIPS64R5-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2)))
3463 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2f64)($1)
3464 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
3465 ; MIPS64R5-NEXT:    copy_s.d $2, $w0[0]
3466 ; MIPS64R5-NEXT:    copy_s.d $3, $w0[1]
3467 ; MIPS64R5-NEXT:    jr $ra
3468 ; MIPS64R5-NEXT:    nop
3469 entry:
3470   %0 = load <2 x double>, <2 x double> * @gv2f64
3471   ret <2 x double> %0
3474 ; Test argument lowering and call result lowering.
3476 define void @call_i8_2() {
3477 ; MIPS32EB-LABEL: call_i8_2:
3478 ; MIPS32EB:       # %bb.0: # %entry
3479 ; MIPS32EB-NEXT:    addiu $sp, $sp, -24
3480 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 24
3481 ; MIPS32EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3482 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
3483 ; MIPS32EB-NEXT:    addiu $4, $zero, 1543
3484 ; MIPS32EB-NEXT:    addiu $5, $zero, 3080
3485 ; MIPS32EB-NEXT:    jal i8_2
3486 ; MIPS32EB-NEXT:    nop
3487 ; MIPS32EB-NEXT:    srl $1, $2, 16
3488 ; MIPS32EB-NEXT:    lui $3, %hi(gv2i8)
3489 ; MIPS32EB-NEXT:    addiu $4, $3, %lo(gv2i8)
3490 ; MIPS32EB-NEXT:    sb $1, 1($4)
3491 ; MIPS32EB-NEXT:    srl $1, $2, 24
3492 ; MIPS32EB-NEXT:    sb $1, %lo(gv2i8)($3)
3493 ; MIPS32EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3494 ; MIPS32EB-NEXT:    addiu $sp, $sp, 24
3495 ; MIPS32EB-NEXT:    jr $ra
3496 ; MIPS32EB-NEXT:    nop
3498 ; MIPS64EB-LABEL: call_i8_2:
3499 ; MIPS64EB:       # %bb.0: # %entry
3500 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
3501 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
3502 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
3503 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
3504 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
3505 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
3506 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3507 ; MIPS64EB-NEXT:    daddu $1, $1, $25
3508 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3509 ; MIPS64EB-NEXT:    ld $25, %call16(i8_2)($gp)
3510 ; MIPS64EB-NEXT:    daddiu $4, $zero, 1543
3511 ; MIPS64EB-NEXT:    daddiu $5, $zero, 3080
3512 ; MIPS64EB-NEXT:    jalr $25
3513 ; MIPS64EB-NEXT:    nop
3514 ; MIPS64EB-NEXT:    dsrl $1, $2, 48
3515 ; MIPS64EB-NEXT:    ld $3, %got_disp(gv2i8)($gp)
3516 ; MIPS64EB-NEXT:    sb $1, 1($3)
3517 ; MIPS64EB-NEXT:    dsrl $1, $2, 56
3518 ; MIPS64EB-NEXT:    sb $1, 0($3)
3519 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
3520 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
3521 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
3522 ; MIPS64EB-NEXT:    jr $ra
3523 ; MIPS64EB-NEXT:    nop
3525 ; MIPS32R5EB-LABEL: call_i8_2:
3526 ; MIPS32R5EB:       # %bb.0: # %entry
3527 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
3528 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
3529 ; MIPS32R5EB-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
3530 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
3531 ; MIPS32R5EB-NEXT:    addiu $4, $zero, 1543
3532 ; MIPS32R5EB-NEXT:    addiu $5, $zero, 3080
3533 ; MIPS32R5EB-NEXT:    jal i8_2
3534 ; MIPS32R5EB-NEXT:    nop
3535 ; MIPS32R5EB-NEXT:    sw $2, 16($sp)
3536 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv2i8)
3537 ; MIPS32R5EB-NEXT:    lhu $2, 16($sp)
3538 ; MIPS32R5EB-NEXT:    sh $2, %lo(gv2i8)($1)
3539 ; MIPS32R5EB-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
3540 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
3541 ; MIPS32R5EB-NEXT:    jr $ra
3542 ; MIPS32R5EB-NEXT:    nop
3544 ; MIPS64R5EB-LABEL: call_i8_2:
3545 ; MIPS64R5EB:       # %bb.0: # %entry
3546 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -64
3547 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 64
3548 ; MIPS64R5EB-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
3549 ; MIPS64R5EB-NEXT:    sd $gp, 48($sp) # 8-byte Folded Spill
3550 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
3551 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
3552 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3553 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
3554 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3555 ; MIPS64R5EB-NEXT:    addiu $1, $zero, 1543
3556 ; MIPS64R5EB-NEXT:    sh $1, 40($sp)
3557 ; MIPS64R5EB-NEXT:    addiu $1, $zero, 3080
3558 ; MIPS64R5EB-NEXT:    sh $1, 44($sp)
3559 ; MIPS64R5EB-NEXT:    ld $25, %call16(i8_2)($gp)
3560 ; MIPS64R5EB-NEXT:    lh $4, 40($sp)
3561 ; MIPS64R5EB-NEXT:    lh $5, 44($sp)
3562 ; MIPS64R5EB-NEXT:    jalr $25
3563 ; MIPS64R5EB-NEXT:    nop
3564 ; MIPS64R5EB-NEXT:    sd $2, 32($sp)
3565 ; MIPS64R5EB-NEXT:    lbu $1, 33($sp)
3566 ; MIPS64R5EB-NEXT:    sh $1, 2($sp)
3567 ; MIPS64R5EB-NEXT:    lbu $1, 32($sp)
3568 ; MIPS64R5EB-NEXT:    sh $1, 0($sp)
3569 ; MIPS64R5EB-NEXT:    ld.h $w0, 0($sp)
3570 ; MIPS64R5EB-NEXT:    copy_s.h $1, $w0[0]
3571 ; MIPS64R5EB-NEXT:    copy_s.h $2, $w0[1]
3572 ; MIPS64R5EB-NEXT:    sw $2, 28($sp)
3573 ; MIPS64R5EB-NEXT:    sw $1, 20($sp)
3574 ; MIPS64R5EB-NEXT:    ld.d $w0, 16($sp)
3575 ; MIPS64R5EB-NEXT:    copy_s.d $1, $w0[0]
3576 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[1]
3577 ; MIPS64R5EB-NEXT:    ld $3, %got_disp(gv2i8)($gp)
3578 ; MIPS64R5EB-NEXT:    sb $2, 1($3)
3579 ; MIPS64R5EB-NEXT:    sb $1, 0($3)
3580 ; MIPS64R5EB-NEXT:    ld $gp, 48($sp) # 8-byte Folded Reload
3581 ; MIPS64R5EB-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
3582 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 64
3583 ; MIPS64R5EB-NEXT:    jr $ra
3584 ; MIPS64R5EB-NEXT:    nop
3586 ; MIPS32EL-LABEL: call_i8_2:
3587 ; MIPS32EL:       # %bb.0: # %entry
3588 ; MIPS32EL-NEXT:    addiu $sp, $sp, -24
3589 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 24
3590 ; MIPS32EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3591 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
3592 ; MIPS32EL-NEXT:    addiu $4, $zero, 1798
3593 ; MIPS32EL-NEXT:    addiu $5, $zero, 2060
3594 ; MIPS32EL-NEXT:    jal i8_2
3595 ; MIPS32EL-NEXT:    nop
3596 ; MIPS32EL-NEXT:    lui $1, %hi(gv2i8)
3597 ; MIPS32EL-NEXT:    sb $2, %lo(gv2i8)($1)
3598 ; MIPS32EL-NEXT:    srl $2, $2, 8
3599 ; MIPS32EL-NEXT:    addiu $1, $1, %lo(gv2i8)
3600 ; MIPS32EL-NEXT:    sb $2, 1($1)
3601 ; MIPS32EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3602 ; MIPS32EL-NEXT:    addiu $sp, $sp, 24
3603 ; MIPS32EL-NEXT:    jr $ra
3604 ; MIPS32EL-NEXT:    nop
3606 ; MIPS64EL-LABEL: call_i8_2:
3607 ; MIPS64EL:       # %bb.0: # %entry
3608 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
3609 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
3610 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
3611 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
3612 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
3613 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
3614 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3615 ; MIPS64EL-NEXT:    daddu $1, $1, $25
3616 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3617 ; MIPS64EL-NEXT:    ld $25, %call16(i8_2)($gp)
3618 ; MIPS64EL-NEXT:    daddiu $4, $zero, 1798
3619 ; MIPS64EL-NEXT:    daddiu $5, $zero, 2060
3620 ; MIPS64EL-NEXT:    jalr $25
3621 ; MIPS64EL-NEXT:    nop
3622 ; MIPS64EL-NEXT:    sll $1, $2, 0
3623 ; MIPS64EL-NEXT:    ld $2, %got_disp(gv2i8)($gp)
3624 ; MIPS64EL-NEXT:    sb $1, 0($2)
3625 ; MIPS64EL-NEXT:    srl $1, $1, 8
3626 ; MIPS64EL-NEXT:    sb $1, 1($2)
3627 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
3628 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
3629 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
3630 ; MIPS64EL-NEXT:    jr $ra
3631 ; MIPS64EL-NEXT:    nop
3633 ; MIPS32R5EL-LABEL: call_i8_2:
3634 ; MIPS32R5EL:       # %bb.0: # %entry
3635 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
3636 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
3637 ; MIPS32R5EL-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
3638 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
3639 ; MIPS32R5EL-NEXT:    addiu $4, $zero, 1798
3640 ; MIPS32R5EL-NEXT:    addiu $5, $zero, 2060
3641 ; MIPS32R5EL-NEXT:    jal i8_2
3642 ; MIPS32R5EL-NEXT:    nop
3643 ; MIPS32R5EL-NEXT:    sw $2, 16($sp)
3644 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv2i8)
3645 ; MIPS32R5EL-NEXT:    lhu $2, 16($sp)
3646 ; MIPS32R5EL-NEXT:    sh $2, %lo(gv2i8)($1)
3647 ; MIPS32R5EL-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
3648 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
3649 ; MIPS32R5EL-NEXT:    jr $ra
3650 ; MIPS32R5EL-NEXT:    nop
3652 ; MIPS64R5EL-LABEL: call_i8_2:
3653 ; MIPS64R5EL:       # %bb.0: # %entry
3654 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -64
3655 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 64
3656 ; MIPS64R5EL-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
3657 ; MIPS64R5EL-NEXT:    sd $gp, 48($sp) # 8-byte Folded Spill
3658 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
3659 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
3660 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3661 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
3662 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3663 ; MIPS64R5EL-NEXT:    addiu $1, $zero, 1798
3664 ; MIPS64R5EL-NEXT:    sh $1, 40($sp)
3665 ; MIPS64R5EL-NEXT:    addiu $1, $zero, 2060
3666 ; MIPS64R5EL-NEXT:    sh $1, 44($sp)
3667 ; MIPS64R5EL-NEXT:    ld $25, %call16(i8_2)($gp)
3668 ; MIPS64R5EL-NEXT:    lh $4, 40($sp)
3669 ; MIPS64R5EL-NEXT:    lh $5, 44($sp)
3670 ; MIPS64R5EL-NEXT:    jalr $25
3671 ; MIPS64R5EL-NEXT:    nop
3672 ; MIPS64R5EL-NEXT:    sd $2, 32($sp)
3673 ; MIPS64R5EL-NEXT:    lbu $1, 33($sp)
3674 ; MIPS64R5EL-NEXT:    sh $1, 2($sp)
3675 ; MIPS64R5EL-NEXT:    lbu $1, 32($sp)
3676 ; MIPS64R5EL-NEXT:    sh $1, 0($sp)
3677 ; MIPS64R5EL-NEXT:    ld.h $w0, 0($sp)
3678 ; MIPS64R5EL-NEXT:    copy_s.h $1, $w0[0]
3679 ; MIPS64R5EL-NEXT:    copy_s.h $2, $w0[1]
3680 ; MIPS64R5EL-NEXT:    sw $2, 24($sp)
3681 ; MIPS64R5EL-NEXT:    sw $1, 16($sp)
3682 ; MIPS64R5EL-NEXT:    ld.d $w0, 16($sp)
3683 ; MIPS64R5EL-NEXT:    copy_s.d $1, $w0[0]
3684 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[1]
3685 ; MIPS64R5EL-NEXT:    ld $3, %got_disp(gv2i8)($gp)
3686 ; MIPS64R5EL-NEXT:    sb $2, 1($3)
3687 ; MIPS64R5EL-NEXT:    sb $1, 0($3)
3688 ; MIPS64R5EL-NEXT:    ld $gp, 48($sp) # 8-byte Folded Reload
3689 ; MIPS64R5EL-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
3690 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 64
3691 ; MIPS64R5EL-NEXT:    jr $ra
3692 ; MIPS64R5EL-NEXT:    nop
3693 entry:
3694   %0 = call <2 x i8> @i8_2(<2 x i8> <i8 6, i8 7>, <2 x i8> <i8 12, i8 8>)
3695   store <2 x i8> %0, <2 x i8> * @gv2i8
3696   ret void
3699 define void @call_i8_4() {
3700 ; MIPS32EB-LABEL: call_i8_4:
3701 ; MIPS32EB:       # %bb.0: # %entry
3702 ; MIPS32EB-NEXT:    addiu $sp, $sp, -24
3703 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 24
3704 ; MIPS32EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3705 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
3706 ; MIPS32EB-NEXT:    lui $1, 1543
3707 ; MIPS32EB-NEXT:    ori $4, $1, 2314
3708 ; MIPS32EB-NEXT:    lui $1, 3080
3709 ; MIPS32EB-NEXT:    ori $5, $1, 2314
3710 ; MIPS32EB-NEXT:    jal i8_4
3711 ; MIPS32EB-NEXT:    nop
3712 ; MIPS32EB-NEXT:    lui $1, %hi(gv4i8)
3713 ; MIPS32EB-NEXT:    sw $2, %lo(gv4i8)($1)
3714 ; MIPS32EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3715 ; MIPS32EB-NEXT:    addiu $sp, $sp, 24
3716 ; MIPS32EB-NEXT:    jr $ra
3717 ; MIPS32EB-NEXT:    nop
3719 ; MIPS64EB-LABEL: call_i8_4:
3720 ; MIPS64EB:       # %bb.0: # %entry
3721 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
3722 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
3723 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
3724 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
3725 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
3726 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
3727 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3728 ; MIPS64EB-NEXT:    daddu $1, $1, $25
3729 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3730 ; MIPS64EB-NEXT:    lui $1, 1543
3731 ; MIPS64EB-NEXT:    ori $4, $1, 2314
3732 ; MIPS64EB-NEXT:    lui $1, 3080
3733 ; MIPS64EB-NEXT:    ori $5, $1, 2314
3734 ; MIPS64EB-NEXT:    ld $25, %call16(i8_4)($gp)
3735 ; MIPS64EB-NEXT:    jalr $25
3736 ; MIPS64EB-NEXT:    nop
3737 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv4i8)($gp)
3738 ; MIPS64EB-NEXT:    sw $2, 0($1)
3739 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
3740 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
3741 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
3742 ; MIPS64EB-NEXT:    jr $ra
3743 ; MIPS64EB-NEXT:    nop
3745 ; MIPS32R5EB-LABEL: call_i8_4:
3746 ; MIPS32R5EB:       # %bb.0: # %entry
3747 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
3748 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
3749 ; MIPS32R5EB-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
3750 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
3751 ; MIPS32R5EB-NEXT:    lui $1, 1543
3752 ; MIPS32R5EB-NEXT:    ori $4, $1, 2314
3753 ; MIPS32R5EB-NEXT:    lui $1, 3080
3754 ; MIPS32R5EB-NEXT:    ori $5, $1, 2314
3755 ; MIPS32R5EB-NEXT:    jal i8_4
3756 ; MIPS32R5EB-NEXT:    nop
3757 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv4i8)
3758 ; MIPS32R5EB-NEXT:    sw $2, %lo(gv4i8)($1)
3759 ; MIPS32R5EB-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
3760 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
3761 ; MIPS32R5EB-NEXT:    jr $ra
3762 ; MIPS32R5EB-NEXT:    nop
3764 ; MIPS64R5EB-LABEL: call_i8_4:
3765 ; MIPS64R5EB:       # %bb.0: # %entry
3766 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
3767 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
3768 ; MIPS64R5EB-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
3769 ; MIPS64R5EB-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
3770 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
3771 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
3772 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3773 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
3774 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3775 ; MIPS64R5EB-NEXT:    lui $1, 1543
3776 ; MIPS64R5EB-NEXT:    ori $4, $1, 2314
3777 ; MIPS64R5EB-NEXT:    lui $1, 3080
3778 ; MIPS64R5EB-NEXT:    ori $5, $1, 2314
3779 ; MIPS64R5EB-NEXT:    ld $25, %call16(i8_4)($gp)
3780 ; MIPS64R5EB-NEXT:    jalr $25
3781 ; MIPS64R5EB-NEXT:    nop
3782 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv4i8)($gp)
3783 ; MIPS64R5EB-NEXT:    sw $2, 0($1)
3784 ; MIPS64R5EB-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
3785 ; MIPS64R5EB-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
3786 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
3787 ; MIPS64R5EB-NEXT:    jr $ra
3788 ; MIPS64R5EB-NEXT:    nop
3790 ; MIPS32EL-LABEL: call_i8_4:
3791 ; MIPS32EL:       # %bb.0: # %entry
3792 ; MIPS32EL-NEXT:    addiu $sp, $sp, -24
3793 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 24
3794 ; MIPS32EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3795 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
3796 ; MIPS32EL-NEXT:    lui $1, 2569
3797 ; MIPS32EL-NEXT:    ori $4, $1, 1798
3798 ; MIPS32EL-NEXT:    ori $5, $1, 2060
3799 ; MIPS32EL-NEXT:    jal i8_4
3800 ; MIPS32EL-NEXT:    nop
3801 ; MIPS32EL-NEXT:    lui $1, %hi(gv4i8)
3802 ; MIPS32EL-NEXT:    sw $2, %lo(gv4i8)($1)
3803 ; MIPS32EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3804 ; MIPS32EL-NEXT:    addiu $sp, $sp, 24
3805 ; MIPS32EL-NEXT:    jr $ra
3806 ; MIPS32EL-NEXT:    nop
3808 ; MIPS64EL-LABEL: call_i8_4:
3809 ; MIPS64EL:       # %bb.0: # %entry
3810 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
3811 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
3812 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
3813 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
3814 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
3815 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
3816 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3817 ; MIPS64EL-NEXT:    daddu $1, $1, $25
3818 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3819 ; MIPS64EL-NEXT:    lui $1, 2569
3820 ; MIPS64EL-NEXT:    ori $4, $1, 1798
3821 ; MIPS64EL-NEXT:    ori $5, $1, 2060
3822 ; MIPS64EL-NEXT:    ld $25, %call16(i8_4)($gp)
3823 ; MIPS64EL-NEXT:    jalr $25
3824 ; MIPS64EL-NEXT:    nop
3825 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv4i8)($gp)
3826 ; MIPS64EL-NEXT:    sw $2, 0($1)
3827 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
3828 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
3829 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
3830 ; MIPS64EL-NEXT:    jr $ra
3831 ; MIPS64EL-NEXT:    nop
3833 ; MIPS32R5EL-LABEL: call_i8_4:
3834 ; MIPS32R5EL:       # %bb.0: # %entry
3835 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
3836 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
3837 ; MIPS32R5EL-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
3838 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
3839 ; MIPS32R5EL-NEXT:    lui $1, 2569
3840 ; MIPS32R5EL-NEXT:    ori $4, $1, 1798
3841 ; MIPS32R5EL-NEXT:    ori $5, $1, 2060
3842 ; MIPS32R5EL-NEXT:    jal i8_4
3843 ; MIPS32R5EL-NEXT:    nop
3844 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv4i8)
3845 ; MIPS32R5EL-NEXT:    sw $2, %lo(gv4i8)($1)
3846 ; MIPS32R5EL-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
3847 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
3848 ; MIPS32R5EL-NEXT:    jr $ra
3849 ; MIPS32R5EL-NEXT:    nop
3851 ; MIPS64R5EL-LABEL: call_i8_4:
3852 ; MIPS64R5EL:       # %bb.0: # %entry
3853 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
3854 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
3855 ; MIPS64R5EL-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
3856 ; MIPS64R5EL-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
3857 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
3858 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
3859 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3860 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
3861 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3862 ; MIPS64R5EL-NEXT:    lui $1, 2569
3863 ; MIPS64R5EL-NEXT:    ori $4, $1, 1798
3864 ; MIPS64R5EL-NEXT:    ori $5, $1, 2060
3865 ; MIPS64R5EL-NEXT:    ld $25, %call16(i8_4)($gp)
3866 ; MIPS64R5EL-NEXT:    jalr $25
3867 ; MIPS64R5EL-NEXT:    nop
3868 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv4i8)($gp)
3869 ; MIPS64R5EL-NEXT:    sw $2, 0($1)
3870 ; MIPS64R5EL-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
3871 ; MIPS64R5EL-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
3872 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
3873 ; MIPS64R5EL-NEXT:    jr $ra
3874 ; MIPS64R5EL-NEXT:    nop
3875 entry:
3876   %0 = call <4 x i8> @i8_4(<4 x i8> <i8 6, i8 7, i8 9, i8 10>, <4 x i8> <i8 12, i8 8, i8 9, i8 10>)
3877   store <4 x i8> %0, <4 x i8> * @gv4i8
3878   ret void
3881 define void @call_i8_8() {
3882 ; MIPS32EB-LABEL: call_i8_8:
3883 ; MIPS32EB:       # %bb.0: # %entry
3884 ; MIPS32EB-NEXT:    addiu $sp, $sp, -24
3885 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 24
3886 ; MIPS32EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3887 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
3888 ; MIPS32EB-NEXT:    lui $1, 3080
3889 ; MIPS32EB-NEXT:    ori $6, $1, 2314
3890 ; MIPS32EB-NEXT:    lui $1, 1543
3891 ; MIPS32EB-NEXT:    ori $4, $1, 2314
3892 ; MIPS32EB-NEXT:    move $5, $4
3893 ; MIPS32EB-NEXT:    move $7, $4
3894 ; MIPS32EB-NEXT:    jal i8_8
3895 ; MIPS32EB-NEXT:    nop
3896 ; MIPS32EB-NEXT:    lui $1, %hi(gv8i8)
3897 ; MIPS32EB-NEXT:    addiu $4, $1, %lo(gv8i8)
3898 ; MIPS32EB-NEXT:    sw $3, 4($4)
3899 ; MIPS32EB-NEXT:    sw $2, %lo(gv8i8)($1)
3900 ; MIPS32EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3901 ; MIPS32EB-NEXT:    addiu $sp, $sp, 24
3902 ; MIPS32EB-NEXT:    jr $ra
3903 ; MIPS32EB-NEXT:    nop
3905 ; MIPS64EB-LABEL: call_i8_8:
3906 ; MIPS64EB:       # %bb.0: # %entry
3907 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
3908 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
3909 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
3910 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
3911 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
3912 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
3913 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_8)))
3914 ; MIPS64EB-NEXT:    daddu $1, $1, $25
3915 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
3916 ; MIPS64EB-NEXT:    lui $1, 772
3917 ; MIPS64EB-NEXT:    daddiu $1, $1, -31611
3918 ; MIPS64EB-NEXT:    dsll $1, $1, 17
3919 ; MIPS64EB-NEXT:    daddiu $1, $1, 1543
3920 ; MIPS64EB-NEXT:    dsll $1, $1, 16
3921 ; MIPS64EB-NEXT:    daddiu $4, $1, 2314
3922 ; MIPS64EB-NEXT:    lui $1, 1540
3923 ; MIPS64EB-NEXT:    daddiu $1, $1, 1157
3924 ; MIPS64EB-NEXT:    dsll $1, $1, 17
3925 ; MIPS64EB-NEXT:    daddiu $1, $1, 1543
3926 ; MIPS64EB-NEXT:    dsll $1, $1, 16
3927 ; MIPS64EB-NEXT:    daddiu $5, $1, 2314
3928 ; MIPS64EB-NEXT:    ld $25, %call16(i8_8)($gp)
3929 ; MIPS64EB-NEXT:    jalr $25
3930 ; MIPS64EB-NEXT:    nop
3931 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv8i8)($gp)
3932 ; MIPS64EB-NEXT:    sd $2, 0($1)
3933 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
3934 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
3935 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
3936 ; MIPS64EB-NEXT:    jr $ra
3937 ; MIPS64EB-NEXT:    nop
3939 ; MIPS32R5EB-LABEL: call_i8_8:
3940 ; MIPS32R5EB:       # %bb.0: # %entry
3941 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -24
3942 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 24
3943 ; MIPS32R5EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
3944 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
3945 ; MIPS32R5EB-NEXT:    lui $1, 3080
3946 ; MIPS32R5EB-NEXT:    ori $6, $1, 2314
3947 ; MIPS32R5EB-NEXT:    lui $1, 1543
3948 ; MIPS32R5EB-NEXT:    ori $4, $1, 2314
3949 ; MIPS32R5EB-NEXT:    move $5, $4
3950 ; MIPS32R5EB-NEXT:    move $7, $4
3951 ; MIPS32R5EB-NEXT:    jal i8_8
3952 ; MIPS32R5EB-NEXT:    nop
3953 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv8i8)
3954 ; MIPS32R5EB-NEXT:    addiu $4, $1, %lo(gv8i8)
3955 ; MIPS32R5EB-NEXT:    sw $3, 4($4)
3956 ; MIPS32R5EB-NEXT:    sw $2, %lo(gv8i8)($1)
3957 ; MIPS32R5EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
3958 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 24
3959 ; MIPS32R5EB-NEXT:    jr $ra
3960 ; MIPS32R5EB-NEXT:    nop
3962 ; MIPS64R5EB-LABEL: call_i8_8:
3963 ; MIPS64R5EB:       # %bb.0: # %entry
3964 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
3965 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
3966 ; MIPS64R5EB-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
3967 ; MIPS64R5EB-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
3968 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
3969 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
3970 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_8)))
3971 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
3972 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
3973 ; MIPS64R5EB-NEXT:    lui $1, 772
3974 ; MIPS64R5EB-NEXT:    daddiu $1, $1, -31611
3975 ; MIPS64R5EB-NEXT:    dsll $1, $1, 17
3976 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 1543
3977 ; MIPS64R5EB-NEXT:    dsll $1, $1, 16
3978 ; MIPS64R5EB-NEXT:    daddiu $4, $1, 2314
3979 ; MIPS64R5EB-NEXT:    lui $1, 1540
3980 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 1157
3981 ; MIPS64R5EB-NEXT:    dsll $1, $1, 17
3982 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 1543
3983 ; MIPS64R5EB-NEXT:    dsll $1, $1, 16
3984 ; MIPS64R5EB-NEXT:    daddiu $5, $1, 2314
3985 ; MIPS64R5EB-NEXT:    ld $25, %call16(i8_8)($gp)
3986 ; MIPS64R5EB-NEXT:    jalr $25
3987 ; MIPS64R5EB-NEXT:    nop
3988 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv8i8)($gp)
3989 ; MIPS64R5EB-NEXT:    sd $2, 0($1)
3990 ; MIPS64R5EB-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
3991 ; MIPS64R5EB-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
3992 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
3993 ; MIPS64R5EB-NEXT:    jr $ra
3994 ; MIPS64R5EB-NEXT:    nop
3996 ; MIPS32EL-LABEL: call_i8_8:
3997 ; MIPS32EL:       # %bb.0: # %entry
3998 ; MIPS32EL-NEXT:    addiu $sp, $sp, -24
3999 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 24
4000 ; MIPS32EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4001 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
4002 ; MIPS32EL-NEXT:    lui $1, 2569
4003 ; MIPS32EL-NEXT:    ori $6, $1, 2060
4004 ; MIPS32EL-NEXT:    ori $4, $1, 1798
4005 ; MIPS32EL-NEXT:    move $5, $4
4006 ; MIPS32EL-NEXT:    move $7, $4
4007 ; MIPS32EL-NEXT:    jal i8_8
4008 ; MIPS32EL-NEXT:    nop
4009 ; MIPS32EL-NEXT:    lui $1, %hi(gv8i8)
4010 ; MIPS32EL-NEXT:    addiu $4, $1, %lo(gv8i8)
4011 ; MIPS32EL-NEXT:    sw $3, 4($4)
4012 ; MIPS32EL-NEXT:    sw $2, %lo(gv8i8)($1)
4013 ; MIPS32EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4014 ; MIPS32EL-NEXT:    addiu $sp, $sp, 24
4015 ; MIPS32EL-NEXT:    jr $ra
4016 ; MIPS32EL-NEXT:    nop
4018 ; MIPS64EL-LABEL: call_i8_8:
4019 ; MIPS64EL:       # %bb.0: # %entry
4020 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4021 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4022 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4023 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4024 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
4025 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
4026 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_8)))
4027 ; MIPS64EL-NEXT:    daddu $1, $1, $25
4028 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
4029 ; MIPS64EL-NEXT:    lui $1, 1285
4030 ; MIPS64EL-NEXT:    daddiu $1, $1, -31869
4031 ; MIPS64EL-NEXT:    dsll $1, $1, 17
4032 ; MIPS64EL-NEXT:    daddiu $1, $1, 2569
4033 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4034 ; MIPS64EL-NEXT:    daddiu $4, $1, 1798
4035 ; MIPS64EL-NEXT:    daddiu $5, $1, 2060
4036 ; MIPS64EL-NEXT:    ld $25, %call16(i8_8)($gp)
4037 ; MIPS64EL-NEXT:    jalr $25
4038 ; MIPS64EL-NEXT:    nop
4039 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv8i8)($gp)
4040 ; MIPS64EL-NEXT:    sd $2, 0($1)
4041 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4042 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4043 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4044 ; MIPS64EL-NEXT:    jr $ra
4045 ; MIPS64EL-NEXT:    nop
4047 ; MIPS32R5EL-LABEL: call_i8_8:
4048 ; MIPS32R5EL:       # %bb.0: # %entry
4049 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -24
4050 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 24
4051 ; MIPS32R5EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4052 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
4053 ; MIPS32R5EL-NEXT:    lui $1, 2569
4054 ; MIPS32R5EL-NEXT:    ori $6, $1, 2060
4055 ; MIPS32R5EL-NEXT:    ori $4, $1, 1798
4056 ; MIPS32R5EL-NEXT:    move $5, $4
4057 ; MIPS32R5EL-NEXT:    move $7, $4
4058 ; MIPS32R5EL-NEXT:    jal i8_8
4059 ; MIPS32R5EL-NEXT:    nop
4060 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv8i8)
4061 ; MIPS32R5EL-NEXT:    addiu $4, $1, %lo(gv8i8)
4062 ; MIPS32R5EL-NEXT:    sw $3, 4($4)
4063 ; MIPS32R5EL-NEXT:    sw $2, %lo(gv8i8)($1)
4064 ; MIPS32R5EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4065 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 24
4066 ; MIPS32R5EL-NEXT:    jr $ra
4067 ; MIPS32R5EL-NEXT:    nop
4069 ; MIPS64R5EL-LABEL: call_i8_8:
4070 ; MIPS64R5EL:       # %bb.0: # %entry
4071 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
4072 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
4073 ; MIPS64R5EL-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
4074 ; MIPS64R5EL-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
4075 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
4076 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
4077 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(call_i8_8)))
4078 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
4079 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
4080 ; MIPS64R5EL-NEXT:    lui $1, 1285
4081 ; MIPS64R5EL-NEXT:    daddiu $1, $1, -31869
4082 ; MIPS64R5EL-NEXT:    dsll $1, $1, 17
4083 ; MIPS64R5EL-NEXT:    daddiu $1, $1, 2569
4084 ; MIPS64R5EL-NEXT:    dsll $1, $1, 16
4085 ; MIPS64R5EL-NEXT:    daddiu $4, $1, 1798
4086 ; MIPS64R5EL-NEXT:    daddiu $5, $1, 2060
4087 ; MIPS64R5EL-NEXT:    ld $25, %call16(i8_8)($gp)
4088 ; MIPS64R5EL-NEXT:    jalr $25
4089 ; MIPS64R5EL-NEXT:    nop
4090 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv8i8)($gp)
4091 ; MIPS64R5EL-NEXT:    sd $2, 0($1)
4092 ; MIPS64R5EL-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
4093 ; MIPS64R5EL-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
4094 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
4095 ; MIPS64R5EL-NEXT:    jr $ra
4096 ; MIPS64R5EL-NEXT:    nop
4097 entry:
4098   %0 = call <8 x i8> @i8_8(<8 x i8> <i8 6, i8 7, i8 9, i8 10, i8 6, i8 7, i8 9, i8 10>, <8 x i8> <i8 12, i8 8, i8 9, i8 10, i8 6, i8 7, i8 9, i8 10>)
4099   store <8 x i8> %0, <8 x i8> * @gv8i8
4100   ret void
4103 define void @calli8_16() {
4104 ; MIPS32EB-LABEL: calli8_16:
4105 ; MIPS32EB:       # %bb.0: # %entry
4106 ; MIPS32EB-NEXT:    addiu $sp, $sp, -40
4107 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 40
4108 ; MIPS32EB-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4109 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
4110 ; MIPS32EB-NEXT:    lui $1, 3080
4111 ; MIPS32EB-NEXT:    ori $1, $1, 2314
4112 ; MIPS32EB-NEXT:    lui $2, 1801
4113 ; MIPS32EB-NEXT:    sw $1, 28($sp)
4114 ; MIPS32EB-NEXT:    ori $1, $2, 1801
4115 ; MIPS32EB-NEXT:    sw $1, 24($sp)
4116 ; MIPS32EB-NEXT:    sw $1, 20($sp)
4117 ; MIPS32EB-NEXT:    sw $1, 16($sp)
4118 ; MIPS32EB-NEXT:    lui $1, 1543
4119 ; MIPS32EB-NEXT:    ori $4, $1, 1543
4120 ; MIPS32EB-NEXT:    ori $7, $1, 2314
4121 ; MIPS32EB-NEXT:    move $5, $4
4122 ; MIPS32EB-NEXT:    move $6, $4
4123 ; MIPS32EB-NEXT:    jal i8_16
4124 ; MIPS32EB-NEXT:    nop
4125 ; MIPS32EB-NEXT:    lui $1, %hi(gv16i8)
4126 ; MIPS32EB-NEXT:    addiu $6, $1, %lo(gv16i8)
4127 ; MIPS32EB-NEXT:    sw $5, 12($6)
4128 ; MIPS32EB-NEXT:    sw $4, 8($6)
4129 ; MIPS32EB-NEXT:    sw $3, 4($6)
4130 ; MIPS32EB-NEXT:    sw $2, %lo(gv16i8)($1)
4131 ; MIPS32EB-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4132 ; MIPS32EB-NEXT:    addiu $sp, $sp, 40
4133 ; MIPS32EB-NEXT:    jr $ra
4134 ; MIPS32EB-NEXT:    nop
4136 ; MIPS64EB-LABEL: calli8_16:
4137 ; MIPS64EB:       # %bb.0: # %entry
4138 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
4139 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
4140 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4141 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4142 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
4143 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
4144 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli8_16)))
4145 ; MIPS64EB-NEXT:    daddu $1, $1, $25
4146 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4147 ; MIPS64EB-NEXT:    lui $1, 1801
4148 ; MIPS64EB-NEXT:    daddiu $1, $1, 1801
4149 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4150 ; MIPS64EB-NEXT:    daddiu $1, $1, 1801
4151 ; MIPS64EB-NEXT:    lui $2, 1543
4152 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4153 ; MIPS64EB-NEXT:    daddiu $2, $2, 1543
4154 ; MIPS64EB-NEXT:    dsll $2, $2, 16
4155 ; MIPS64EB-NEXT:    daddiu $2, $2, 1543
4156 ; MIPS64EB-NEXT:    dsll $2, $2, 16
4157 ; MIPS64EB-NEXT:    daddiu $4, $2, 1543
4158 ; MIPS64EB-NEXT:    daddiu $5, $2, 2314
4159 ; MIPS64EB-NEXT:    daddiu $6, $1, 1801
4160 ; MIPS64EB-NEXT:    lui $1, 225
4161 ; MIPS64EB-NEXT:    daddiu $1, $1, 8417
4162 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4163 ; MIPS64EB-NEXT:    daddiu $1, $1, 8577
4164 ; MIPS64EB-NEXT:    dsll $1, $1, 19
4165 ; MIPS64EB-NEXT:    daddiu $7, $1, 2314
4166 ; MIPS64EB-NEXT:    ld $25, %call16(i8_16)($gp)
4167 ; MIPS64EB-NEXT:    jalr $25
4168 ; MIPS64EB-NEXT:    nop
4169 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv16i8)($gp)
4170 ; MIPS64EB-NEXT:    sd $3, 8($1)
4171 ; MIPS64EB-NEXT:    sd $2, 0($1)
4172 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4173 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4174 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
4175 ; MIPS64EB-NEXT:    jr $ra
4176 ; MIPS64EB-NEXT:    nop
4178 ; MIPS32R5-LABEL: calli8_16:
4179 ; MIPS32R5:       # %bb.0: # %entry
4180 ; MIPS32R5-NEXT:    addiu $sp, $sp, -40
4181 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 40
4182 ; MIPS32R5-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4183 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
4184 ; MIPS32R5-NEXT:    lui $1, %hi($CPI30_0)
4185 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI30_0)
4186 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
4187 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[0]
4188 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[1]
4189 ; MIPS32R5-NEXT:    copy_s.w $6, $w0[2]
4190 ; MIPS32R5-NEXT:    copy_s.w $7, $w0[3]
4191 ; MIPS32R5-NEXT:    lui $1, %hi($CPI30_1)
4192 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI30_1)
4193 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
4194 ; MIPS32R5-NEXT:    copy_s.w $1, $w0[0]
4195 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[1]
4196 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[2]
4197 ; MIPS32R5-NEXT:    copy_s.w $8, $w0[3]
4198 ; MIPS32R5-NEXT:    sw $8, 28($sp)
4199 ; MIPS32R5-NEXT:    sw $3, 24($sp)
4200 ; MIPS32R5-NEXT:    sw $2, 20($sp)
4201 ; MIPS32R5-NEXT:    sw $1, 16($sp)
4202 ; MIPS32R5-NEXT:    jal i8_16
4203 ; MIPS32R5-NEXT:    nop
4204 ; MIPS32R5-NEXT:    ldi.b $w0, 0
4205 ; MIPS32R5-NEXT:    insert.w $w0[0], $2
4206 ; MIPS32R5-NEXT:    lui $1, %hi(gv16i8)
4207 ; MIPS32R5-NEXT:    insert.w $w0[1], $3
4208 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv16i8)
4209 ; MIPS32R5-NEXT:    insert.w $w0[2], $4
4210 ; MIPS32R5-NEXT:    insert.w $w0[3], $5
4211 ; MIPS32R5-NEXT:    st.w $w0, 0($1)
4212 ; MIPS32R5-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4213 ; MIPS32R5-NEXT:    addiu $sp, $sp, 40
4214 ; MIPS32R5-NEXT:    jr $ra
4215 ; MIPS32R5-NEXT:    nop
4217 ; MIPS64R5-LABEL: calli8_16:
4218 ; MIPS64R5:       # %bb.0: # %entry
4219 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
4220 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
4221 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4222 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4223 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
4224 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
4225 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(calli8_16)))
4226 ; MIPS64R5-NEXT:    daddu $1, $1, $25
4227 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4228 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI30_0)($gp)
4229 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI30_0)
4230 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
4231 ; MIPS64R5-NEXT:    copy_s.d $4, $w0[0]
4232 ; MIPS64R5-NEXT:    copy_s.d $5, $w0[1]
4233 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI30_1)($gp)
4234 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI30_1)
4235 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
4236 ; MIPS64R5-NEXT:    copy_s.d $6, $w0[0]
4237 ; MIPS64R5-NEXT:    copy_s.d $7, $w0[1]
4238 ; MIPS64R5-NEXT:    ld $25, %call16(i8_16)($gp)
4239 ; MIPS64R5-NEXT:    jalr $25
4240 ; MIPS64R5-NEXT:    nop
4241 ; MIPS64R5-NEXT:    ldi.b $w0, 0
4242 ; MIPS64R5-NEXT:    insert.d $w0[0], $2
4243 ; MIPS64R5-NEXT:    insert.d $w0[1], $3
4244 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv16i8)($gp)
4245 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
4246 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4247 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4248 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
4249 ; MIPS64R5-NEXT:    jr $ra
4250 ; MIPS64R5-NEXT:    nop
4252 ; MIPS32EL-LABEL: calli8_16:
4253 ; MIPS32EL:       # %bb.0: # %entry
4254 ; MIPS32EL-NEXT:    addiu $sp, $sp, -40
4255 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 40
4256 ; MIPS32EL-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4257 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
4258 ; MIPS32EL-NEXT:    lui $1, 2569
4259 ; MIPS32EL-NEXT:    ori $2, $1, 2060
4260 ; MIPS32EL-NEXT:    lui $3, 2311
4261 ; MIPS32EL-NEXT:    sw $2, 28($sp)
4262 ; MIPS32EL-NEXT:    ori $2, $3, 2311
4263 ; MIPS32EL-NEXT:    sw $2, 24($sp)
4264 ; MIPS32EL-NEXT:    sw $2, 20($sp)
4265 ; MIPS32EL-NEXT:    sw $2, 16($sp)
4266 ; MIPS32EL-NEXT:    lui $2, 1798
4267 ; MIPS32EL-NEXT:    ori $4, $2, 1798
4268 ; MIPS32EL-NEXT:    ori $7, $1, 1798
4269 ; MIPS32EL-NEXT:    move $5, $4
4270 ; MIPS32EL-NEXT:    move $6, $4
4271 ; MIPS32EL-NEXT:    jal i8_16
4272 ; MIPS32EL-NEXT:    nop
4273 ; MIPS32EL-NEXT:    lui $1, %hi(gv16i8)
4274 ; MIPS32EL-NEXT:    addiu $6, $1, %lo(gv16i8)
4275 ; MIPS32EL-NEXT:    sw $5, 12($6)
4276 ; MIPS32EL-NEXT:    sw $4, 8($6)
4277 ; MIPS32EL-NEXT:    sw $3, 4($6)
4278 ; MIPS32EL-NEXT:    sw $2, %lo(gv16i8)($1)
4279 ; MIPS32EL-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4280 ; MIPS32EL-NEXT:    addiu $sp, $sp, 40
4281 ; MIPS32EL-NEXT:    jr $ra
4282 ; MIPS32EL-NEXT:    nop
4284 ; MIPS64EL-LABEL: calli8_16:
4285 ; MIPS64EL:       # %bb.0: # %entry
4286 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4287 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4288 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4289 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4290 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
4291 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
4292 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli8_16)))
4293 ; MIPS64EL-NEXT:    daddu $1, $1, $25
4294 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4295 ; MIPS64EL-NEXT:    lui $1, 1285
4296 ; MIPS64EL-NEXT:    daddiu $1, $1, -31869
4297 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4298 ; MIPS64EL-NEXT:    daddiu $1, $1, 899
4299 ; MIPS64EL-NEXT:    lui $2, 2311
4300 ; MIPS64EL-NEXT:    daddiu $2, $2, 2311
4301 ; MIPS64EL-NEXT:    dsll $2, $2, 16
4302 ; MIPS64EL-NEXT:    daddiu $2, $2, 2311
4303 ; MIPS64EL-NEXT:    dsll $2, $2, 16
4304 ; MIPS64EL-NEXT:    dsll $1, $1, 17
4305 ; MIPS64EL-NEXT:    lui $3, 899
4306 ; MIPS64EL-NEXT:    daddiu $3, $3, 899
4307 ; MIPS64EL-NEXT:    dsll $3, $3, 16
4308 ; MIPS64EL-NEXT:    daddiu $3, $3, 899
4309 ; MIPS64EL-NEXT:    dsll $3, $3, 17
4310 ; MIPS64EL-NEXT:    daddiu $4, $3, 1798
4311 ; MIPS64EL-NEXT:    daddiu $5, $1, 1798
4312 ; MIPS64EL-NEXT:    daddiu $6, $2, 2311
4313 ; MIPS64EL-NEXT:    lui $1, 642
4314 ; MIPS64EL-NEXT:    daddiu $1, $1, 16899
4315 ; MIPS64EL-NEXT:    dsll $1, $1, 18
4316 ; MIPS64EL-NEXT:    daddiu $1, $1, 2311
4317 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4318 ; MIPS64EL-NEXT:    daddiu $7, $1, 2311
4319 ; MIPS64EL-NEXT:    ld $25, %call16(i8_16)($gp)
4320 ; MIPS64EL-NEXT:    jalr $25
4321 ; MIPS64EL-NEXT:    nop
4322 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv16i8)($gp)
4323 ; MIPS64EL-NEXT:    sd $3, 8($1)
4324 ; MIPS64EL-NEXT:    sd $2, 0($1)
4325 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4326 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4327 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4328 ; MIPS64EL-NEXT:    jr $ra
4329 ; MIPS64EL-NEXT:    nop
4330 entry:
4331   %0 = call <16 x i8> @i8_16(<16 x i8> <i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7, i8 6, i8 7, i8 9, i8 10>, <16 x i8> <i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 12, i8 8, i8 9, i8 10>)
4332   store <16 x i8> %0, <16 x i8> * @gv16i8
4333   ret void
4336 define void @calli16_2() {
4337 ; MIPS32EB-LABEL: calli16_2:
4338 ; MIPS32EB:       # %bb.0: # %entry
4339 ; MIPS32EB-NEXT:    addiu $sp, $sp, -24
4340 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 24
4341 ; MIPS32EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4342 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
4343 ; MIPS32EB-NEXT:    lui $1, 6
4344 ; MIPS32EB-NEXT:    ori $4, $1, 7
4345 ; MIPS32EB-NEXT:    lui $1, 12
4346 ; MIPS32EB-NEXT:    ori $5, $1, 8
4347 ; MIPS32EB-NEXT:    jal i16_2
4348 ; MIPS32EB-NEXT:    nop
4349 ; MIPS32EB-NEXT:    lui $1, %hi(gv2i16)
4350 ; MIPS32EB-NEXT:    sw $2, %lo(gv2i16)($1)
4351 ; MIPS32EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4352 ; MIPS32EB-NEXT:    addiu $sp, $sp, 24
4353 ; MIPS32EB-NEXT:    jr $ra
4354 ; MIPS32EB-NEXT:    nop
4356 ; MIPS64EB-LABEL: calli16_2:
4357 ; MIPS64EB:       # %bb.0: # %entry
4358 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
4359 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
4360 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4361 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4362 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
4363 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
4364 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_2)))
4365 ; MIPS64EB-NEXT:    daddu $1, $1, $25
4366 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4367 ; MIPS64EB-NEXT:    lui $1, 6
4368 ; MIPS64EB-NEXT:    ori $4, $1, 7
4369 ; MIPS64EB-NEXT:    lui $1, 12
4370 ; MIPS64EB-NEXT:    ori $5, $1, 8
4371 ; MIPS64EB-NEXT:    ld $25, %call16(i16_2)($gp)
4372 ; MIPS64EB-NEXT:    jalr $25
4373 ; MIPS64EB-NEXT:    nop
4374 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv2i16)($gp)
4375 ; MIPS64EB-NEXT:    sw $2, 0($1)
4376 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4377 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4378 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
4379 ; MIPS64EB-NEXT:    jr $ra
4380 ; MIPS64EB-NEXT:    nop
4382 ; MIPS32R5EB-LABEL: calli16_2:
4383 ; MIPS32R5EB:       # %bb.0: # %entry
4384 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -32
4385 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 32
4386 ; MIPS32R5EB-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
4387 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
4388 ; MIPS32R5EB-NEXT:    lui $1, 6
4389 ; MIPS32R5EB-NEXT:    ori $4, $1, 7
4390 ; MIPS32R5EB-NEXT:    lui $1, 12
4391 ; MIPS32R5EB-NEXT:    ori $5, $1, 8
4392 ; MIPS32R5EB-NEXT:    jal i16_2
4393 ; MIPS32R5EB-NEXT:    nop
4394 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv2i16)
4395 ; MIPS32R5EB-NEXT:    sw $2, %lo(gv2i16)($1)
4396 ; MIPS32R5EB-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
4397 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 32
4398 ; MIPS32R5EB-NEXT:    jr $ra
4399 ; MIPS32R5EB-NEXT:    nop
4401 ; MIPS64R5EB-LABEL: calli16_2:
4402 ; MIPS64R5EB:       # %bb.0: # %entry
4403 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
4404 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
4405 ; MIPS64R5EB-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
4406 ; MIPS64R5EB-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
4407 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
4408 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
4409 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_2)))
4410 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
4411 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4412 ; MIPS64R5EB-NEXT:    lui $1, 6
4413 ; MIPS64R5EB-NEXT:    ori $4, $1, 7
4414 ; MIPS64R5EB-NEXT:    lui $1, 12
4415 ; MIPS64R5EB-NEXT:    ori $5, $1, 8
4416 ; MIPS64R5EB-NEXT:    ld $25, %call16(i16_2)($gp)
4417 ; MIPS64R5EB-NEXT:    jalr $25
4418 ; MIPS64R5EB-NEXT:    nop
4419 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv2i16)($gp)
4420 ; MIPS64R5EB-NEXT:    sw $2, 0($1)
4421 ; MIPS64R5EB-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
4422 ; MIPS64R5EB-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
4423 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
4424 ; MIPS64R5EB-NEXT:    jr $ra
4425 ; MIPS64R5EB-NEXT:    nop
4427 ; MIPS32EL-LABEL: calli16_2:
4428 ; MIPS32EL:       # %bb.0: # %entry
4429 ; MIPS32EL-NEXT:    addiu $sp, $sp, -24
4430 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 24
4431 ; MIPS32EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4432 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
4433 ; MIPS32EL-NEXT:    lui $1, 7
4434 ; MIPS32EL-NEXT:    ori $4, $1, 6
4435 ; MIPS32EL-NEXT:    lui $1, 8
4436 ; MIPS32EL-NEXT:    ori $5, $1, 12
4437 ; MIPS32EL-NEXT:    jal i16_2
4438 ; MIPS32EL-NEXT:    nop
4439 ; MIPS32EL-NEXT:    lui $1, %hi(gv2i16)
4440 ; MIPS32EL-NEXT:    sw $2, %lo(gv2i16)($1)
4441 ; MIPS32EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4442 ; MIPS32EL-NEXT:    addiu $sp, $sp, 24
4443 ; MIPS32EL-NEXT:    jr $ra
4444 ; MIPS32EL-NEXT:    nop
4446 ; MIPS64EL-LABEL: calli16_2:
4447 ; MIPS64EL:       # %bb.0: # %entry
4448 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4449 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4450 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4451 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4452 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
4453 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
4454 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_2)))
4455 ; MIPS64EL-NEXT:    daddu $1, $1, $25
4456 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4457 ; MIPS64EL-NEXT:    lui $1, 7
4458 ; MIPS64EL-NEXT:    ori $4, $1, 6
4459 ; MIPS64EL-NEXT:    lui $1, 8
4460 ; MIPS64EL-NEXT:    ori $5, $1, 12
4461 ; MIPS64EL-NEXT:    ld $25, %call16(i16_2)($gp)
4462 ; MIPS64EL-NEXT:    jalr $25
4463 ; MIPS64EL-NEXT:    nop
4464 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv2i16)($gp)
4465 ; MIPS64EL-NEXT:    sw $2, 0($1)
4466 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4467 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4468 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4469 ; MIPS64EL-NEXT:    jr $ra
4470 ; MIPS64EL-NEXT:    nop
4472 ; MIPS32R5EL-LABEL: calli16_2:
4473 ; MIPS32R5EL:       # %bb.0: # %entry
4474 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -32
4475 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 32
4476 ; MIPS32R5EL-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
4477 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
4478 ; MIPS32R5EL-NEXT:    lui $1, 7
4479 ; MIPS32R5EL-NEXT:    ori $4, $1, 6
4480 ; MIPS32R5EL-NEXT:    lui $1, 8
4481 ; MIPS32R5EL-NEXT:    ori $5, $1, 12
4482 ; MIPS32R5EL-NEXT:    jal i16_2
4483 ; MIPS32R5EL-NEXT:    nop
4484 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv2i16)
4485 ; MIPS32R5EL-NEXT:    sw $2, %lo(gv2i16)($1)
4486 ; MIPS32R5EL-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
4487 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 32
4488 ; MIPS32R5EL-NEXT:    jr $ra
4489 ; MIPS32R5EL-NEXT:    nop
4491 ; MIPS64R5EL-LABEL: calli16_2:
4492 ; MIPS64R5EL:       # %bb.0: # %entry
4493 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
4494 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
4495 ; MIPS64R5EL-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
4496 ; MIPS64R5EL-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
4497 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
4498 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
4499 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_2)))
4500 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
4501 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4502 ; MIPS64R5EL-NEXT:    lui $1, 7
4503 ; MIPS64R5EL-NEXT:    ori $4, $1, 6
4504 ; MIPS64R5EL-NEXT:    lui $1, 8
4505 ; MIPS64R5EL-NEXT:    ori $5, $1, 12
4506 ; MIPS64R5EL-NEXT:    ld $25, %call16(i16_2)($gp)
4507 ; MIPS64R5EL-NEXT:    jalr $25
4508 ; MIPS64R5EL-NEXT:    nop
4509 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv2i16)($gp)
4510 ; MIPS64R5EL-NEXT:    sw $2, 0($1)
4511 ; MIPS64R5EL-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
4512 ; MIPS64R5EL-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
4513 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
4514 ; MIPS64R5EL-NEXT:    jr $ra
4515 ; MIPS64R5EL-NEXT:    nop
4516 entry:
4517   %0 = call <2 x i16> @i16_2(<2 x i16> <i16 6, i16 7>, <2 x i16> <i16 12, i16 8>)
4518   store <2 x i16> %0, <2 x i16> * @gv2i16
4519   ret void
4522 define void @calli16_4() {
4523 ; MIPS32EB-LABEL: calli16_4:
4524 ; MIPS32EB:       # %bb.0: # %entry
4525 ; MIPS32EB-NEXT:    addiu $sp, $sp, -24
4526 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 24
4527 ; MIPS32EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4528 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
4529 ; MIPS32EB-NEXT:    lui $1, 6
4530 ; MIPS32EB-NEXT:    ori $4, $1, 7
4531 ; MIPS32EB-NEXT:    lui $1, 12
4532 ; MIPS32EB-NEXT:    ori $6, $1, 8
4533 ; MIPS32EB-NEXT:    lui $1, 9
4534 ; MIPS32EB-NEXT:    ori $5, $1, 10
4535 ; MIPS32EB-NEXT:    move $7, $5
4536 ; MIPS32EB-NEXT:    jal i16_4
4537 ; MIPS32EB-NEXT:    nop
4538 ; MIPS32EB-NEXT:    lui $1, %hi(gv4i16)
4539 ; MIPS32EB-NEXT:    addiu $4, $1, %lo(gv4i16)
4540 ; MIPS32EB-NEXT:    sw $3, 4($4)
4541 ; MIPS32EB-NEXT:    sw $2, %lo(gv4i16)($1)
4542 ; MIPS32EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4543 ; MIPS32EB-NEXT:    addiu $sp, $sp, 24
4544 ; MIPS32EB-NEXT:    jr $ra
4545 ; MIPS32EB-NEXT:    nop
4547 ; MIPS64EB-LABEL: calli16_4:
4548 ; MIPS64EB:       # %bb.0: # %entry
4549 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
4550 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
4551 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4552 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4553 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
4554 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
4555 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_4)))
4556 ; MIPS64EB-NEXT:    daddu $1, $1, $25
4557 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4558 ; MIPS64EB-NEXT:    lui $1, 6
4559 ; MIPS64EB-NEXT:    daddiu $1, $1, 7
4560 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4561 ; MIPS64EB-NEXT:    daddiu $1, $1, 9
4562 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4563 ; MIPS64EB-NEXT:    daddiu $4, $1, 10
4564 ; MIPS64EB-NEXT:    lui $1, 2
4565 ; MIPS64EB-NEXT:    daddiu $1, $1, -32767
4566 ; MIPS64EB-NEXT:    dsll $1, $1, 19
4567 ; MIPS64EB-NEXT:    daddiu $1, $1, 9
4568 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4569 ; MIPS64EB-NEXT:    daddiu $5, $1, 10
4570 ; MIPS64EB-NEXT:    ld $25, %call16(i16_4)($gp)
4571 ; MIPS64EB-NEXT:    jalr $25
4572 ; MIPS64EB-NEXT:    nop
4573 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv4i16)($gp)
4574 ; MIPS64EB-NEXT:    sd $2, 0($1)
4575 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4576 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4577 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
4578 ; MIPS64EB-NEXT:    jr $ra
4579 ; MIPS64EB-NEXT:    nop
4581 ; MIPS32R5EB-LABEL: calli16_4:
4582 ; MIPS32R5EB:       # %bb.0: # %entry
4583 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -24
4584 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 24
4585 ; MIPS32R5EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4586 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
4587 ; MIPS32R5EB-NEXT:    lui $1, 6
4588 ; MIPS32R5EB-NEXT:    ori $4, $1, 7
4589 ; MIPS32R5EB-NEXT:    lui $1, 12
4590 ; MIPS32R5EB-NEXT:    ori $6, $1, 8
4591 ; MIPS32R5EB-NEXT:    lui $1, 9
4592 ; MIPS32R5EB-NEXT:    ori $5, $1, 10
4593 ; MIPS32R5EB-NEXT:    move $7, $5
4594 ; MIPS32R5EB-NEXT:    jal i16_4
4595 ; MIPS32R5EB-NEXT:    nop
4596 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv4i16)
4597 ; MIPS32R5EB-NEXT:    addiu $4, $1, %lo(gv4i16)
4598 ; MIPS32R5EB-NEXT:    sw $3, 4($4)
4599 ; MIPS32R5EB-NEXT:    sw $2, %lo(gv4i16)($1)
4600 ; MIPS32R5EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4601 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 24
4602 ; MIPS32R5EB-NEXT:    jr $ra
4603 ; MIPS32R5EB-NEXT:    nop
4605 ; MIPS64R5EB-LABEL: calli16_4:
4606 ; MIPS64R5EB:       # %bb.0: # %entry
4607 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
4608 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
4609 ; MIPS64R5EB-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
4610 ; MIPS64R5EB-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
4611 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
4612 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
4613 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_4)))
4614 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
4615 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4616 ; MIPS64R5EB-NEXT:    lui $1, 6
4617 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 7
4618 ; MIPS64R5EB-NEXT:    dsll $1, $1, 16
4619 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 9
4620 ; MIPS64R5EB-NEXT:    dsll $1, $1, 16
4621 ; MIPS64R5EB-NEXT:    daddiu $4, $1, 10
4622 ; MIPS64R5EB-NEXT:    lui $1, 2
4623 ; MIPS64R5EB-NEXT:    daddiu $1, $1, -32767
4624 ; MIPS64R5EB-NEXT:    dsll $1, $1, 19
4625 ; MIPS64R5EB-NEXT:    daddiu $1, $1, 9
4626 ; MIPS64R5EB-NEXT:    dsll $1, $1, 16
4627 ; MIPS64R5EB-NEXT:    daddiu $5, $1, 10
4628 ; MIPS64R5EB-NEXT:    ld $25, %call16(i16_4)($gp)
4629 ; MIPS64R5EB-NEXT:    jalr $25
4630 ; MIPS64R5EB-NEXT:    nop
4631 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv4i16)($gp)
4632 ; MIPS64R5EB-NEXT:    sd $2, 0($1)
4633 ; MIPS64R5EB-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
4634 ; MIPS64R5EB-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
4635 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
4636 ; MIPS64R5EB-NEXT:    jr $ra
4637 ; MIPS64R5EB-NEXT:    nop
4639 ; MIPS32EL-LABEL: calli16_4:
4640 ; MIPS32EL:       # %bb.0: # %entry
4641 ; MIPS32EL-NEXT:    addiu $sp, $sp, -24
4642 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 24
4643 ; MIPS32EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4644 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
4645 ; MIPS32EL-NEXT:    lui $1, 7
4646 ; MIPS32EL-NEXT:    ori $4, $1, 6
4647 ; MIPS32EL-NEXT:    lui $1, 8
4648 ; MIPS32EL-NEXT:    ori $6, $1, 12
4649 ; MIPS32EL-NEXT:    lui $1, 10
4650 ; MIPS32EL-NEXT:    ori $5, $1, 9
4651 ; MIPS32EL-NEXT:    move $7, $5
4652 ; MIPS32EL-NEXT:    jal i16_4
4653 ; MIPS32EL-NEXT:    nop
4654 ; MIPS32EL-NEXT:    lui $1, %hi(gv4i16)
4655 ; MIPS32EL-NEXT:    addiu $4, $1, %lo(gv4i16)
4656 ; MIPS32EL-NEXT:    sw $3, 4($4)
4657 ; MIPS32EL-NEXT:    sw $2, %lo(gv4i16)($1)
4658 ; MIPS32EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4659 ; MIPS32EL-NEXT:    addiu $sp, $sp, 24
4660 ; MIPS32EL-NEXT:    jr $ra
4661 ; MIPS32EL-NEXT:    nop
4663 ; MIPS64EL-LABEL: calli16_4:
4664 ; MIPS64EL:       # %bb.0: # %entry
4665 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4666 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4667 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4668 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4669 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
4670 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
4671 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_4)))
4672 ; MIPS64EL-NEXT:    daddu $1, $1, $25
4673 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4674 ; MIPS64EL-NEXT:    lui $1, 10
4675 ; MIPS64EL-NEXT:    daddiu $1, $1, 9
4676 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4677 ; MIPS64EL-NEXT:    daddiu $1, $1, 7
4678 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4679 ; MIPS64EL-NEXT:    daddiu $4, $1, 6
4680 ; MIPS64EL-NEXT:    lui $1, 1
4681 ; MIPS64EL-NEXT:    daddiu $1, $1, 16385
4682 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4683 ; MIPS64EL-NEXT:    daddiu $1, $1, 8193
4684 ; MIPS64EL-NEXT:    dsll $1, $1, 19
4685 ; MIPS64EL-NEXT:    daddiu $5, $1, 12
4686 ; MIPS64EL-NEXT:    ld $25, %call16(i16_4)($gp)
4687 ; MIPS64EL-NEXT:    jalr $25
4688 ; MIPS64EL-NEXT:    nop
4689 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv4i16)($gp)
4690 ; MIPS64EL-NEXT:    sd $2, 0($1)
4691 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4692 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4693 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4694 ; MIPS64EL-NEXT:    jr $ra
4695 ; MIPS64EL-NEXT:    nop
4697 ; MIPS32R5EL-LABEL: calli16_4:
4698 ; MIPS32R5EL:       # %bb.0: # %entry
4699 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -24
4700 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 24
4701 ; MIPS32R5EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
4702 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
4703 ; MIPS32R5EL-NEXT:    lui $1, 7
4704 ; MIPS32R5EL-NEXT:    ori $4, $1, 6
4705 ; MIPS32R5EL-NEXT:    lui $1, 8
4706 ; MIPS32R5EL-NEXT:    ori $6, $1, 12
4707 ; MIPS32R5EL-NEXT:    lui $1, 10
4708 ; MIPS32R5EL-NEXT:    ori $5, $1, 9
4709 ; MIPS32R5EL-NEXT:    move $7, $5
4710 ; MIPS32R5EL-NEXT:    jal i16_4
4711 ; MIPS32R5EL-NEXT:    nop
4712 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv4i16)
4713 ; MIPS32R5EL-NEXT:    addiu $4, $1, %lo(gv4i16)
4714 ; MIPS32R5EL-NEXT:    sw $3, 4($4)
4715 ; MIPS32R5EL-NEXT:    sw $2, %lo(gv4i16)($1)
4716 ; MIPS32R5EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
4717 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 24
4718 ; MIPS32R5EL-NEXT:    jr $ra
4719 ; MIPS32R5EL-NEXT:    nop
4721 ; MIPS64R5EL-LABEL: calli16_4:
4722 ; MIPS64R5EL:       # %bb.0: # %entry
4723 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
4724 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
4725 ; MIPS64R5EL-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
4726 ; MIPS64R5EL-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
4727 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
4728 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
4729 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_4)))
4730 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
4731 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4732 ; MIPS64R5EL-NEXT:    lui $1, 10
4733 ; MIPS64R5EL-NEXT:    daddiu $1, $1, 9
4734 ; MIPS64R5EL-NEXT:    dsll $1, $1, 16
4735 ; MIPS64R5EL-NEXT:    daddiu $1, $1, 7
4736 ; MIPS64R5EL-NEXT:    dsll $1, $1, 16
4737 ; MIPS64R5EL-NEXT:    daddiu $4, $1, 6
4738 ; MIPS64R5EL-NEXT:    lui $1, 1
4739 ; MIPS64R5EL-NEXT:    daddiu $1, $1, 16385
4740 ; MIPS64R5EL-NEXT:    dsll $1, $1, 16
4741 ; MIPS64R5EL-NEXT:    daddiu $1, $1, 8193
4742 ; MIPS64R5EL-NEXT:    dsll $1, $1, 19
4743 ; MIPS64R5EL-NEXT:    daddiu $5, $1, 12
4744 ; MIPS64R5EL-NEXT:    ld $25, %call16(i16_4)($gp)
4745 ; MIPS64R5EL-NEXT:    jalr $25
4746 ; MIPS64R5EL-NEXT:    nop
4747 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv4i16)($gp)
4748 ; MIPS64R5EL-NEXT:    sd $2, 0($1)
4749 ; MIPS64R5EL-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
4750 ; MIPS64R5EL-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
4751 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
4752 ; MIPS64R5EL-NEXT:    jr $ra
4753 ; MIPS64R5EL-NEXT:    nop
4754 entry:
4755   %0 = call <4 x i16> @i16_4(<4 x i16> <i16 6, i16 7, i16 9, i16 10>, <4 x i16> <i16 12, i16 8, i16 9, i16 10>)
4756   store <4 x i16> %0, <4 x i16> * @gv4i16
4757   ret void
4760 define void @calli16_8() {
4761 ; MIPS32EB-LABEL: calli16_8:
4762 ; MIPS32EB:       # %bb.0: # %entry
4763 ; MIPS32EB-NEXT:    addiu $sp, $sp, -40
4764 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 40
4765 ; MIPS32EB-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4766 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
4767 ; MIPS32EB-NEXT:    lui $1, 9
4768 ; MIPS32EB-NEXT:    ori $5, $1, 10
4769 ; MIPS32EB-NEXT:    sw $5, 28($sp)
4770 ; MIPS32EB-NEXT:    lui $1, 12
4771 ; MIPS32EB-NEXT:    ori $1, $1, 8
4772 ; MIPS32EB-NEXT:    sw $1, 24($sp)
4773 ; MIPS32EB-NEXT:    sw $5, 20($sp)
4774 ; MIPS32EB-NEXT:    lui $1, 6
4775 ; MIPS32EB-NEXT:    ori $4, $1, 7
4776 ; MIPS32EB-NEXT:    sw $4, 16($sp)
4777 ; MIPS32EB-NEXT:    move $6, $4
4778 ; MIPS32EB-NEXT:    move $7, $5
4779 ; MIPS32EB-NEXT:    jal i16_8
4780 ; MIPS32EB-NEXT:    nop
4781 ; MIPS32EB-NEXT:    lui $1, %hi(gv8i16)
4782 ; MIPS32EB-NEXT:    addiu $6, $1, %lo(gv8i16)
4783 ; MIPS32EB-NEXT:    sw $5, 12($6)
4784 ; MIPS32EB-NEXT:    sw $4, 8($6)
4785 ; MIPS32EB-NEXT:    sw $3, 4($6)
4786 ; MIPS32EB-NEXT:    sw $2, %lo(gv8i16)($1)
4787 ; MIPS32EB-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4788 ; MIPS32EB-NEXT:    addiu $sp, $sp, 40
4789 ; MIPS32EB-NEXT:    jr $ra
4790 ; MIPS32EB-NEXT:    nop
4792 ; MIPS64EB-LABEL: calli16_8:
4793 ; MIPS64EB:       # %bb.0: # %entry
4794 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
4795 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
4796 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4797 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4798 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
4799 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
4800 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_8)))
4801 ; MIPS64EB-NEXT:    daddu $1, $1, $25
4802 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4803 ; MIPS64EB-NEXT:    lui $1, 6
4804 ; MIPS64EB-NEXT:    daddiu $1, $1, 7
4805 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4806 ; MIPS64EB-NEXT:    daddiu $1, $1, 9
4807 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4808 ; MIPS64EB-NEXT:    daddiu $4, $1, 10
4809 ; MIPS64EB-NEXT:    lui $1, 2
4810 ; MIPS64EB-NEXT:    daddiu $1, $1, -32767
4811 ; MIPS64EB-NEXT:    dsll $1, $1, 19
4812 ; MIPS64EB-NEXT:    daddiu $1, $1, 9
4813 ; MIPS64EB-NEXT:    dsll $1, $1, 16
4814 ; MIPS64EB-NEXT:    daddiu $7, $1, 10
4815 ; MIPS64EB-NEXT:    ld $25, %call16(i16_8)($gp)
4816 ; MIPS64EB-NEXT:    move $5, $4
4817 ; MIPS64EB-NEXT:    move $6, $4
4818 ; MIPS64EB-NEXT:    jalr $25
4819 ; MIPS64EB-NEXT:    nop
4820 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv8i16)($gp)
4821 ; MIPS64EB-NEXT:    sd $3, 8($1)
4822 ; MIPS64EB-NEXT:    sd $2, 0($1)
4823 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4824 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4825 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
4826 ; MIPS64EB-NEXT:    jr $ra
4827 ; MIPS64EB-NEXT:    nop
4829 ; MIPS32R5EB-LABEL: calli16_8:
4830 ; MIPS32R5EB:       # %bb.0: # %entry
4831 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -40
4832 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 40
4833 ; MIPS32R5EB-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4834 ; MIPS32R5EB-NEXT:    .cfi_offset 31, -4
4835 ; MIPS32R5EB-NEXT:    lui $1, 6
4836 ; MIPS32R5EB-NEXT:    ori $1, $1, 7
4837 ; MIPS32R5EB-NEXT:    lui $2, 9
4838 ; MIPS32R5EB-NEXT:    ori $2, $2, 10
4839 ; MIPS32R5EB-NEXT:    fill.w $w0, $2
4840 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $1
4841 ; MIPS32R5EB-NEXT:    splati.d $w0, $w0[0]
4842 ; MIPS32R5EB-NEXT:    copy_s.w $4, $w0[0]
4843 ; MIPS32R5EB-NEXT:    copy_s.w $5, $w0[1]
4844 ; MIPS32R5EB-NEXT:    copy_s.w $6, $w0[2]
4845 ; MIPS32R5EB-NEXT:    copy_s.w $7, $w0[3]
4846 ; MIPS32R5EB-NEXT:    lui $1, %hi($CPI33_0)
4847 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo($CPI33_0)
4848 ; MIPS32R5EB-NEXT:    ld.w $w0, 0($1)
4849 ; MIPS32R5EB-NEXT:    copy_s.w $1, $w0[0]
4850 ; MIPS32R5EB-NEXT:    copy_s.w $2, $w0[1]
4851 ; MIPS32R5EB-NEXT:    copy_s.w $3, $w0[2]
4852 ; MIPS32R5EB-NEXT:    copy_s.w $8, $w0[3]
4853 ; MIPS32R5EB-NEXT:    sw $8, 28($sp)
4854 ; MIPS32R5EB-NEXT:    sw $3, 24($sp)
4855 ; MIPS32R5EB-NEXT:    sw $2, 20($sp)
4856 ; MIPS32R5EB-NEXT:    sw $1, 16($sp)
4857 ; MIPS32R5EB-NEXT:    jal i16_8
4858 ; MIPS32R5EB-NEXT:    nop
4859 ; MIPS32R5EB-NEXT:    lui $1, %hi(gv8i16)
4860 ; MIPS32R5EB-NEXT:    addiu $1, $1, %lo(gv8i16)
4861 ; MIPS32R5EB-NEXT:    ldi.b $w0, 0
4862 ; MIPS32R5EB-NEXT:    insert.w $w0[0], $2
4863 ; MIPS32R5EB-NEXT:    insert.w $w0[1], $3
4864 ; MIPS32R5EB-NEXT:    insert.w $w0[2], $4
4865 ; MIPS32R5EB-NEXT:    insert.w $w0[3], $5
4866 ; MIPS32R5EB-NEXT:    st.w $w0, 0($1)
4867 ; MIPS32R5EB-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4868 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 40
4869 ; MIPS32R5EB-NEXT:    jr $ra
4870 ; MIPS32R5EB-NEXT:    nop
4872 ; MIPS64R5EB-LABEL: calli16_8:
4873 ; MIPS64R5EB:       # %bb.0: # %entry
4874 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -16
4875 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 16
4876 ; MIPS64R5EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4877 ; MIPS64R5EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4878 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
4879 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
4880 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_8)))
4881 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
4882 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4883 ; MIPS64R5EB-NEXT:    lui $1, 9
4884 ; MIPS64R5EB-NEXT:    ori $1, $1, 10
4885 ; MIPS64R5EB-NEXT:    lui $2, 6
4886 ; MIPS64R5EB-NEXT:    ori $2, $2, 7
4887 ; MIPS64R5EB-NEXT:    dinsu $1, $2, 32, 32
4888 ; MIPS64R5EB-NEXT:    fill.d $w0, $1
4889 ; MIPS64R5EB-NEXT:    copy_s.d $4, $w0[0]
4890 ; MIPS64R5EB-NEXT:    copy_s.d $5, $w0[1]
4891 ; MIPS64R5EB-NEXT:    ld $1, %got_page(.LCPI33_0)($gp)
4892 ; MIPS64R5EB-NEXT:    daddiu $1, $1, %got_ofst(.LCPI33_0)
4893 ; MIPS64R5EB-NEXT:    ld.d $w0, 0($1)
4894 ; MIPS64R5EB-NEXT:    copy_s.d $6, $w0[0]
4895 ; MIPS64R5EB-NEXT:    copy_s.d $7, $w0[1]
4896 ; MIPS64R5EB-NEXT:    ld $25, %call16(i16_8)($gp)
4897 ; MIPS64R5EB-NEXT:    jalr $25
4898 ; MIPS64R5EB-NEXT:    nop
4899 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
4900 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv8i16)($gp)
4901 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $2
4902 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $3
4903 ; MIPS64R5EB-NEXT:    st.d $w0, 0($1)
4904 ; MIPS64R5EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4905 ; MIPS64R5EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4906 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 16
4907 ; MIPS64R5EB-NEXT:    jr $ra
4908 ; MIPS64R5EB-NEXT:    nop
4910 ; MIPS32EL-LABEL: calli16_8:
4911 ; MIPS32EL:       # %bb.0: # %entry
4912 ; MIPS32EL-NEXT:    addiu $sp, $sp, -40
4913 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 40
4914 ; MIPS32EL-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4915 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
4916 ; MIPS32EL-NEXT:    lui $1, 10
4917 ; MIPS32EL-NEXT:    ori $5, $1, 9
4918 ; MIPS32EL-NEXT:    sw $5, 28($sp)
4919 ; MIPS32EL-NEXT:    lui $1, 8
4920 ; MIPS32EL-NEXT:    ori $1, $1, 12
4921 ; MIPS32EL-NEXT:    sw $1, 24($sp)
4922 ; MIPS32EL-NEXT:    sw $5, 20($sp)
4923 ; MIPS32EL-NEXT:    lui $1, 7
4924 ; MIPS32EL-NEXT:    ori $4, $1, 6
4925 ; MIPS32EL-NEXT:    sw $4, 16($sp)
4926 ; MIPS32EL-NEXT:    move $6, $4
4927 ; MIPS32EL-NEXT:    move $7, $5
4928 ; MIPS32EL-NEXT:    jal i16_8
4929 ; MIPS32EL-NEXT:    nop
4930 ; MIPS32EL-NEXT:    lui $1, %hi(gv8i16)
4931 ; MIPS32EL-NEXT:    addiu $6, $1, %lo(gv8i16)
4932 ; MIPS32EL-NEXT:    sw $5, 12($6)
4933 ; MIPS32EL-NEXT:    sw $4, 8($6)
4934 ; MIPS32EL-NEXT:    sw $3, 4($6)
4935 ; MIPS32EL-NEXT:    sw $2, %lo(gv8i16)($1)
4936 ; MIPS32EL-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
4937 ; MIPS32EL-NEXT:    addiu $sp, $sp, 40
4938 ; MIPS32EL-NEXT:    jr $ra
4939 ; MIPS32EL-NEXT:    nop
4941 ; MIPS64EL-LABEL: calli16_8:
4942 ; MIPS64EL:       # %bb.0: # %entry
4943 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4944 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4945 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
4946 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
4947 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
4948 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
4949 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_8)))
4950 ; MIPS64EL-NEXT:    daddu $1, $1, $25
4951 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4952 ; MIPS64EL-NEXT:    lui $1, 10
4953 ; MIPS64EL-NEXT:    daddiu $1, $1, 9
4954 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4955 ; MIPS64EL-NEXT:    daddiu $1, $1, 7
4956 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4957 ; MIPS64EL-NEXT:    daddiu $4, $1, 6
4958 ; MIPS64EL-NEXT:    lui $1, 1
4959 ; MIPS64EL-NEXT:    daddiu $1, $1, 16385
4960 ; MIPS64EL-NEXT:    dsll $1, $1, 16
4961 ; MIPS64EL-NEXT:    daddiu $1, $1, 8193
4962 ; MIPS64EL-NEXT:    dsll $1, $1, 19
4963 ; MIPS64EL-NEXT:    daddiu $7, $1, 12
4964 ; MIPS64EL-NEXT:    ld $25, %call16(i16_8)($gp)
4965 ; MIPS64EL-NEXT:    move $5, $4
4966 ; MIPS64EL-NEXT:    move $6, $4
4967 ; MIPS64EL-NEXT:    jalr $25
4968 ; MIPS64EL-NEXT:    nop
4969 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv8i16)($gp)
4970 ; MIPS64EL-NEXT:    sd $3, 8($1)
4971 ; MIPS64EL-NEXT:    sd $2, 0($1)
4972 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
4973 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
4974 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4975 ; MIPS64EL-NEXT:    jr $ra
4976 ; MIPS64EL-NEXT:    nop
4978 ; MIPS32R5EL-LABEL: calli16_8:
4979 ; MIPS32R5EL:       # %bb.0: # %entry
4980 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -40
4981 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 40
4982 ; MIPS32R5EL-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
4983 ; MIPS32R5EL-NEXT:    .cfi_offset 31, -4
4984 ; MIPS32R5EL-NEXT:    lui $1, 10
4985 ; MIPS32R5EL-NEXT:    ori $1, $1, 9
4986 ; MIPS32R5EL-NEXT:    lui $2, 7
4987 ; MIPS32R5EL-NEXT:    ori $2, $2, 6
4988 ; MIPS32R5EL-NEXT:    fill.w $w0, $2
4989 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $1
4990 ; MIPS32R5EL-NEXT:    splati.d $w0, $w0[0]
4991 ; MIPS32R5EL-NEXT:    copy_s.w $4, $w0[0]
4992 ; MIPS32R5EL-NEXT:    copy_s.w $5, $w0[1]
4993 ; MIPS32R5EL-NEXT:    copy_s.w $6, $w0[2]
4994 ; MIPS32R5EL-NEXT:    copy_s.w $7, $w0[3]
4995 ; MIPS32R5EL-NEXT:    lui $1, %hi($CPI33_0)
4996 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo($CPI33_0)
4997 ; MIPS32R5EL-NEXT:    ld.w $w0, 0($1)
4998 ; MIPS32R5EL-NEXT:    copy_s.w $1, $w0[0]
4999 ; MIPS32R5EL-NEXT:    copy_s.w $2, $w0[1]
5000 ; MIPS32R5EL-NEXT:    copy_s.w $3, $w0[2]
5001 ; MIPS32R5EL-NEXT:    copy_s.w $8, $w0[3]
5002 ; MIPS32R5EL-NEXT:    sw $8, 28($sp)
5003 ; MIPS32R5EL-NEXT:    sw $3, 24($sp)
5004 ; MIPS32R5EL-NEXT:    sw $2, 20($sp)
5005 ; MIPS32R5EL-NEXT:    sw $1, 16($sp)
5006 ; MIPS32R5EL-NEXT:    jal i16_8
5007 ; MIPS32R5EL-NEXT:    nop
5008 ; MIPS32R5EL-NEXT:    lui $1, %hi(gv8i16)
5009 ; MIPS32R5EL-NEXT:    addiu $1, $1, %lo(gv8i16)
5010 ; MIPS32R5EL-NEXT:    ldi.b $w0, 0
5011 ; MIPS32R5EL-NEXT:    insert.w $w0[0], $2
5012 ; MIPS32R5EL-NEXT:    insert.w $w0[1], $3
5013 ; MIPS32R5EL-NEXT:    insert.w $w0[2], $4
5014 ; MIPS32R5EL-NEXT:    insert.w $w0[3], $5
5015 ; MIPS32R5EL-NEXT:    st.w $w0, 0($1)
5016 ; MIPS32R5EL-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5017 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 40
5018 ; MIPS32R5EL-NEXT:    jr $ra
5019 ; MIPS32R5EL-NEXT:    nop
5021 ; MIPS64R5EL-LABEL: calli16_8:
5022 ; MIPS64R5EL:       # %bb.0: # %entry
5023 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -16
5024 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 16
5025 ; MIPS64R5EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5026 ; MIPS64R5EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5027 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
5028 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
5029 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli16_8)))
5030 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
5031 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
5032 ; MIPS64R5EL-NEXT:    lui $1, 7
5033 ; MIPS64R5EL-NEXT:    ori $1, $1, 6
5034 ; MIPS64R5EL-NEXT:    lui $2, 10
5035 ; MIPS64R5EL-NEXT:    ori $2, $2, 9
5036 ; MIPS64R5EL-NEXT:    dinsu $1, $2, 32, 32
5037 ; MIPS64R5EL-NEXT:    fill.d $w0, $1
5038 ; MIPS64R5EL-NEXT:    copy_s.d $4, $w0[0]
5039 ; MIPS64R5EL-NEXT:    copy_s.d $5, $w0[1]
5040 ; MIPS64R5EL-NEXT:    ld $1, %got_page(.LCPI33_0)($gp)
5041 ; MIPS64R5EL-NEXT:    daddiu $1, $1, %got_ofst(.LCPI33_0)
5042 ; MIPS64R5EL-NEXT:    ld.d $w0, 0($1)
5043 ; MIPS64R5EL-NEXT:    copy_s.d $6, $w0[0]
5044 ; MIPS64R5EL-NEXT:    copy_s.d $7, $w0[1]
5045 ; MIPS64R5EL-NEXT:    ld $25, %call16(i16_8)($gp)
5046 ; MIPS64R5EL-NEXT:    jalr $25
5047 ; MIPS64R5EL-NEXT:    nop
5048 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
5049 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv8i16)($gp)
5050 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $2
5051 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $3
5052 ; MIPS64R5EL-NEXT:    st.d $w0, 0($1)
5053 ; MIPS64R5EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5054 ; MIPS64R5EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5055 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 16
5056 ; MIPS64R5EL-NEXT:    jr $ra
5057 ; MIPS64R5EL-NEXT:    nop
5058 entry:
5059   %0 = call <8 x i16> @i16_8(<8 x i16> <i16 6, i16 7, i16 9, i16 10, i16 6, i16 7, i16 9, i16 10>, <8 x i16> <i16 6, i16 7, i16 9, i16 10, i16 12, i16 8, i16 9, i16 10>)
5060   store <8 x i16> %0, <8 x i16> * @gv8i16
5061   ret void
5064 define void @calli32_2() {
5065 ; MIPS32-LABEL: calli32_2:
5066 ; MIPS32:       # %bb.0: # %entry
5067 ; MIPS32-NEXT:    addiu $sp, $sp, -24
5068 ; MIPS32-NEXT:    .cfi_def_cfa_offset 24
5069 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
5070 ; MIPS32-NEXT:    .cfi_offset 31, -4
5071 ; MIPS32-NEXT:    addiu $4, $zero, 6
5072 ; MIPS32-NEXT:    addiu $5, $zero, 7
5073 ; MIPS32-NEXT:    addiu $6, $zero, 12
5074 ; MIPS32-NEXT:    addiu $7, $zero, 8
5075 ; MIPS32-NEXT:    jal i32_2
5076 ; MIPS32-NEXT:    nop
5077 ; MIPS32-NEXT:    lui $1, %hi(gv2i32)
5078 ; MIPS32-NEXT:    addiu $4, $1, %lo(gv2i32)
5079 ; MIPS32-NEXT:    sw $3, 4($4)
5080 ; MIPS32-NEXT:    sw $2, %lo(gv2i32)($1)
5081 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
5082 ; MIPS32-NEXT:    addiu $sp, $sp, 24
5083 ; MIPS32-NEXT:    jr $ra
5084 ; MIPS32-NEXT:    nop
5086 ; MIPS64EB-LABEL: calli32_2:
5087 ; MIPS64EB:       # %bb.0: # %entry
5088 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
5089 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
5090 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5091 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5092 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
5093 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
5094 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_2)))
5095 ; MIPS64EB-NEXT:    daddu $1, $1, $25
5096 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5097 ; MIPS64EB-NEXT:    daddiu $1, $zero, 3
5098 ; MIPS64EB-NEXT:    dsll $2, $1, 33
5099 ; MIPS64EB-NEXT:    daddiu $4, $2, 7
5100 ; MIPS64EB-NEXT:    dsll $1, $1, 34
5101 ; MIPS64EB-NEXT:    daddiu $5, $1, 8
5102 ; MIPS64EB-NEXT:    ld $25, %call16(i32_2)($gp)
5103 ; MIPS64EB-NEXT:    jalr $25
5104 ; MIPS64EB-NEXT:    nop
5105 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv2i32)($gp)
5106 ; MIPS64EB-NEXT:    sd $2, 0($1)
5107 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5108 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5109 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
5110 ; MIPS64EB-NEXT:    jr $ra
5111 ; MIPS64EB-NEXT:    nop
5113 ; MIPS32R5-LABEL: calli32_2:
5114 ; MIPS32R5:       # %bb.0: # %entry
5115 ; MIPS32R5-NEXT:    addiu $sp, $sp, -24
5116 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 24
5117 ; MIPS32R5-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
5118 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5119 ; MIPS32R5-NEXT:    addiu $4, $zero, 6
5120 ; MIPS32R5-NEXT:    addiu $5, $zero, 7
5121 ; MIPS32R5-NEXT:    addiu $6, $zero, 12
5122 ; MIPS32R5-NEXT:    addiu $7, $zero, 8
5123 ; MIPS32R5-NEXT:    jal i32_2
5124 ; MIPS32R5-NEXT:    nop
5125 ; MIPS32R5-NEXT:    lui $1, %hi(gv2i32)
5126 ; MIPS32R5-NEXT:    addiu $4, $1, %lo(gv2i32)
5127 ; MIPS32R5-NEXT:    sw $3, 4($4)
5128 ; MIPS32R5-NEXT:    sw $2, %lo(gv2i32)($1)
5129 ; MIPS32R5-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
5130 ; MIPS32R5-NEXT:    addiu $sp, $sp, 24
5131 ; MIPS32R5-NEXT:    jr $ra
5132 ; MIPS32R5-NEXT:    nop
5134 ; MIPS64R5EB-LABEL: calli32_2:
5135 ; MIPS64R5EB:       # %bb.0: # %entry
5136 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -32
5137 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 32
5138 ; MIPS64R5EB-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
5139 ; MIPS64R5EB-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
5140 ; MIPS64R5EB-NEXT:    .cfi_offset 31, -8
5141 ; MIPS64R5EB-NEXT:    .cfi_offset 28, -16
5142 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_2)))
5143 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
5144 ; MIPS64R5EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5145 ; MIPS64R5EB-NEXT:    daddiu $1, $zero, 3
5146 ; MIPS64R5EB-NEXT:    dsll $2, $1, 33
5147 ; MIPS64R5EB-NEXT:    daddiu $4, $2, 7
5148 ; MIPS64R5EB-NEXT:    dsll $1, $1, 34
5149 ; MIPS64R5EB-NEXT:    daddiu $5, $1, 8
5150 ; MIPS64R5EB-NEXT:    ld $25, %call16(i32_2)($gp)
5151 ; MIPS64R5EB-NEXT:    jalr $25
5152 ; MIPS64R5EB-NEXT:    nop
5153 ; MIPS64R5EB-NEXT:    ld $1, %got_disp(gv2i32)($gp)
5154 ; MIPS64R5EB-NEXT:    sd $2, 0($1)
5155 ; MIPS64R5EB-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
5156 ; MIPS64R5EB-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
5157 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 32
5158 ; MIPS64R5EB-NEXT:    jr $ra
5159 ; MIPS64R5EB-NEXT:    nop
5161 ; MIPS64EL-LABEL: calli32_2:
5162 ; MIPS64EL:       # %bb.0: # %entry
5163 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
5164 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
5165 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5166 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5167 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
5168 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
5169 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_2)))
5170 ; MIPS64EL-NEXT:    daddu $1, $1, $25
5171 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5172 ; MIPS64EL-NEXT:    daddiu $1, $zero, 7
5173 ; MIPS64EL-NEXT:    dsll $1, $1, 32
5174 ; MIPS64EL-NEXT:    daddiu $4, $1, 6
5175 ; MIPS64EL-NEXT:    daddiu $1, $zero, 1
5176 ; MIPS64EL-NEXT:    dsll $1, $1, 35
5177 ; MIPS64EL-NEXT:    daddiu $5, $1, 12
5178 ; MIPS64EL-NEXT:    ld $25, %call16(i32_2)($gp)
5179 ; MIPS64EL-NEXT:    jalr $25
5180 ; MIPS64EL-NEXT:    nop
5181 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv2i32)($gp)
5182 ; MIPS64EL-NEXT:    sd $2, 0($1)
5183 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5184 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5185 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
5186 ; MIPS64EL-NEXT:    jr $ra
5187 ; MIPS64EL-NEXT:    nop
5189 ; MIPS64R5EL-LABEL: calli32_2:
5190 ; MIPS64R5EL:       # %bb.0: # %entry
5191 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -32
5192 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 32
5193 ; MIPS64R5EL-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill
5194 ; MIPS64R5EL-NEXT:    sd $gp, 16($sp) # 8-byte Folded Spill
5195 ; MIPS64R5EL-NEXT:    .cfi_offset 31, -8
5196 ; MIPS64R5EL-NEXT:    .cfi_offset 28, -16
5197 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_2)))
5198 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
5199 ; MIPS64R5EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5200 ; MIPS64R5EL-NEXT:    daddiu $1, $zero, 7
5201 ; MIPS64R5EL-NEXT:    dsll $1, $1, 32
5202 ; MIPS64R5EL-NEXT:    daddiu $4, $1, 6
5203 ; MIPS64R5EL-NEXT:    daddiu $1, $zero, 1
5204 ; MIPS64R5EL-NEXT:    dsll $1, $1, 35
5205 ; MIPS64R5EL-NEXT:    daddiu $5, $1, 12
5206 ; MIPS64R5EL-NEXT:    ld $25, %call16(i32_2)($gp)
5207 ; MIPS64R5EL-NEXT:    jalr $25
5208 ; MIPS64R5EL-NEXT:    nop
5209 ; MIPS64R5EL-NEXT:    ld $1, %got_disp(gv2i32)($gp)
5210 ; MIPS64R5EL-NEXT:    sd $2, 0($1)
5211 ; MIPS64R5EL-NEXT:    ld $gp, 16($sp) # 8-byte Folded Reload
5212 ; MIPS64R5EL-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload
5213 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 32
5214 ; MIPS64R5EL-NEXT:    jr $ra
5215 ; MIPS64R5EL-NEXT:    nop
5216 entry:
5217   %0 = call <2 x i32> @i32_2(<2 x i32> <i32 6, i32 7>, <2 x i32> <i32 12, i32 8>)
5218   store <2 x i32> %0, <2 x i32> * @gv2i32
5219   ret void
5222 define void @calli32_4() {
5223 ; MIPS32-LABEL: calli32_4:
5224 ; MIPS32:       # %bb.0: # %entry
5225 ; MIPS32-NEXT:    addiu $sp, $sp, -40
5226 ; MIPS32-NEXT:    .cfi_def_cfa_offset 40
5227 ; MIPS32-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5228 ; MIPS32-NEXT:    .cfi_offset 31, -4
5229 ; MIPS32-NEXT:    addiu $1, $zero, 9
5230 ; MIPS32-NEXT:    addiu $2, $zero, 10
5231 ; MIPS32-NEXT:    sw $2, 28($sp)
5232 ; MIPS32-NEXT:    sw $1, 24($sp)
5233 ; MIPS32-NEXT:    addiu $1, $zero, 8
5234 ; MIPS32-NEXT:    sw $1, 20($sp)
5235 ; MIPS32-NEXT:    addiu $1, $zero, 12
5236 ; MIPS32-NEXT:    sw $1, 16($sp)
5237 ; MIPS32-NEXT:    addiu $4, $zero, 6
5238 ; MIPS32-NEXT:    addiu $5, $zero, 7
5239 ; MIPS32-NEXT:    addiu $6, $zero, 9
5240 ; MIPS32-NEXT:    addiu $7, $zero, 10
5241 ; MIPS32-NEXT:    jal i32_4
5242 ; MIPS32-NEXT:    nop
5243 ; MIPS32-NEXT:    lui $1, %hi(gv4i32)
5244 ; MIPS32-NEXT:    addiu $6, $1, %lo(gv4i32)
5245 ; MIPS32-NEXT:    sw $5, 12($6)
5246 ; MIPS32-NEXT:    sw $4, 8($6)
5247 ; MIPS32-NEXT:    sw $3, 4($6)
5248 ; MIPS32-NEXT:    sw $2, %lo(gv4i32)($1)
5249 ; MIPS32-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5250 ; MIPS32-NEXT:    addiu $sp, $sp, 40
5251 ; MIPS32-NEXT:    jr $ra
5252 ; MIPS32-NEXT:    nop
5254 ; MIPS64EB-LABEL: calli32_4:
5255 ; MIPS64EB:       # %bb.0: # %entry
5256 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
5257 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
5258 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5259 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5260 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
5261 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
5262 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_4)))
5263 ; MIPS64EB-NEXT:    daddu $1, $1, $25
5264 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5265 ; MIPS64EB-NEXT:    daddiu $1, $zero, 3
5266 ; MIPS64EB-NEXT:    dsll $2, $1, 33
5267 ; MIPS64EB-NEXT:    daddiu $4, $2, 7
5268 ; MIPS64EB-NEXT:    dsll $1, $1, 34
5269 ; MIPS64EB-NEXT:    daddiu $6, $1, 8
5270 ; MIPS64EB-NEXT:    daddiu $1, $zero, 9
5271 ; MIPS64EB-NEXT:    dsll $1, $1, 32
5272 ; MIPS64EB-NEXT:    daddiu $5, $1, 10
5273 ; MIPS64EB-NEXT:    ld $25, %call16(i32_4)($gp)
5274 ; MIPS64EB-NEXT:    move $7, $5
5275 ; MIPS64EB-NEXT:    jalr $25
5276 ; MIPS64EB-NEXT:    nop
5277 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv4i32)($gp)
5278 ; MIPS64EB-NEXT:    sd $3, 8($1)
5279 ; MIPS64EB-NEXT:    sd $2, 0($1)
5280 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5281 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5282 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
5283 ; MIPS64EB-NEXT:    jr $ra
5284 ; MIPS64EB-NEXT:    nop
5286 ; MIPS32R5-LABEL: calli32_4:
5287 ; MIPS32R5:       # %bb.0: # %entry
5288 ; MIPS32R5-NEXT:    addiu $sp, $sp, -40
5289 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 40
5290 ; MIPS32R5-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5291 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5292 ; MIPS32R5-NEXT:    addiu $1, $zero, 9
5293 ; MIPS32R5-NEXT:    addiu $2, $zero, 10
5294 ; MIPS32R5-NEXT:    sw $2, 28($sp)
5295 ; MIPS32R5-NEXT:    sw $1, 24($sp)
5296 ; MIPS32R5-NEXT:    addiu $1, $zero, 8
5297 ; MIPS32R5-NEXT:    sw $1, 20($sp)
5298 ; MIPS32R5-NEXT:    addiu $1, $zero, 12
5299 ; MIPS32R5-NEXT:    sw $1, 16($sp)
5300 ; MIPS32R5-NEXT:    addiu $4, $zero, 6
5301 ; MIPS32R5-NEXT:    addiu $5, $zero, 7
5302 ; MIPS32R5-NEXT:    addiu $6, $zero, 9
5303 ; MIPS32R5-NEXT:    addiu $7, $zero, 10
5304 ; MIPS32R5-NEXT:    jal i32_4
5305 ; MIPS32R5-NEXT:    nop
5306 ; MIPS32R5-NEXT:    ldi.b $w0, 0
5307 ; MIPS32R5-NEXT:    insert.w $w0[0], $2
5308 ; MIPS32R5-NEXT:    insert.w $w0[1], $3
5309 ; MIPS32R5-NEXT:    insert.w $w0[2], $4
5310 ; MIPS32R5-NEXT:    lui $1, %hi(gv4i32)
5311 ; MIPS32R5-NEXT:    insert.w $w0[3], $5
5312 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv4i32)
5313 ; MIPS32R5-NEXT:    st.w $w0, 0($1)
5314 ; MIPS32R5-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5315 ; MIPS32R5-NEXT:    addiu $sp, $sp, 40
5316 ; MIPS32R5-NEXT:    jr $ra
5317 ; MIPS32R5-NEXT:    nop
5319 ; MIPS64R5-LABEL: calli32_4:
5320 ; MIPS64R5:       # %bb.0: # %entry
5321 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
5322 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
5323 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5324 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5325 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
5326 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
5327 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_4)))
5328 ; MIPS64R5-NEXT:    daddu $1, $1, $25
5329 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5330 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI35_0)($gp)
5331 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI35_0)
5332 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5333 ; MIPS64R5-NEXT:    copy_s.d $4, $w0[0]
5334 ; MIPS64R5-NEXT:    copy_s.d $5, $w0[1]
5335 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI35_1)($gp)
5336 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI35_1)
5337 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5338 ; MIPS64R5-NEXT:    copy_s.d $6, $w0[0]
5339 ; MIPS64R5-NEXT:    copy_s.d $7, $w0[1]
5340 ; MIPS64R5-NEXT:    ld $25, %call16(i32_4)($gp)
5341 ; MIPS64R5-NEXT:    jalr $25
5342 ; MIPS64R5-NEXT:    nop
5343 ; MIPS64R5-NEXT:    ldi.b $w0, 0
5344 ; MIPS64R5-NEXT:    insert.d $w0[0], $2
5345 ; MIPS64R5-NEXT:    insert.d $w0[1], $3
5346 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4i32)($gp)
5347 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
5348 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5349 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5350 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
5351 ; MIPS64R5-NEXT:    jr $ra
5352 ; MIPS64R5-NEXT:    nop
5354 ; MIPS64EL-LABEL: calli32_4:
5355 ; MIPS64EL:       # %bb.0: # %entry
5356 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
5357 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
5358 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5359 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5360 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
5361 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
5362 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(calli32_4)))
5363 ; MIPS64EL-NEXT:    daddu $1, $1, $25
5364 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5365 ; MIPS64EL-NEXT:    daddiu $1, $zero, 7
5366 ; MIPS64EL-NEXT:    dsll $1, $1, 32
5367 ; MIPS64EL-NEXT:    daddiu $4, $1, 6
5368 ; MIPS64EL-NEXT:    daddiu $1, $zero, 1
5369 ; MIPS64EL-NEXT:    dsll $1, $1, 35
5370 ; MIPS64EL-NEXT:    daddiu $6, $1, 12
5371 ; MIPS64EL-NEXT:    daddiu $1, $zero, 5
5372 ; MIPS64EL-NEXT:    dsll $1, $1, 33
5373 ; MIPS64EL-NEXT:    daddiu $5, $1, 9
5374 ; MIPS64EL-NEXT:    ld $25, %call16(i32_4)($gp)
5375 ; MIPS64EL-NEXT:    move $7, $5
5376 ; MIPS64EL-NEXT:    jalr $25
5377 ; MIPS64EL-NEXT:    nop
5378 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv4i32)($gp)
5379 ; MIPS64EL-NEXT:    sd $3, 8($1)
5380 ; MIPS64EL-NEXT:    sd $2, 0($1)
5381 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5382 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5383 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
5384 ; MIPS64EL-NEXT:    jr $ra
5385 ; MIPS64EL-NEXT:    nop
5386 entry:
5387   %0 = call <4 x i32> @i32_4(<4 x i32> <i32 6, i32 7, i32 9, i32 10>, <4 x i32> <i32 12, i32 8, i32 9, i32 10>)
5388   store <4 x i32> %0, <4 x i32> * @gv4i32
5389   ret void
5392 define void @calli64_2() {
5393 ; MIPS32EB-LABEL: calli64_2:
5394 ; MIPS32EB:       # %bb.0: # %entry
5395 ; MIPS32EB-NEXT:    addiu $sp, $sp, -40
5396 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 40
5397 ; MIPS32EB-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5398 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
5399 ; MIPS32EB-NEXT:    addiu $1, $zero, 8
5400 ; MIPS32EB-NEXT:    sw $1, 28($sp)
5401 ; MIPS32EB-NEXT:    addiu $1, $zero, 12
5402 ; MIPS32EB-NEXT:    sw $1, 20($sp)
5403 ; MIPS32EB-NEXT:    sw $zero, 24($sp)
5404 ; MIPS32EB-NEXT:    sw $zero, 16($sp)
5405 ; MIPS32EB-NEXT:    addiu $4, $zero, 0
5406 ; MIPS32EB-NEXT:    addiu $5, $zero, 6
5407 ; MIPS32EB-NEXT:    addiu $6, $zero, 0
5408 ; MIPS32EB-NEXT:    addiu $7, $zero, 7
5409 ; MIPS32EB-NEXT:    jal i64_2
5410 ; MIPS32EB-NEXT:    nop
5411 ; MIPS32EB-NEXT:    lui $1, %hi(gv2i64)
5412 ; MIPS32EB-NEXT:    addiu $6, $1, %lo(gv2i64)
5413 ; MIPS32EB-NEXT:    sw $5, 12($6)
5414 ; MIPS32EB-NEXT:    sw $4, 8($6)
5415 ; MIPS32EB-NEXT:    sw $3, 4($6)
5416 ; MIPS32EB-NEXT:    sw $2, %lo(gv2i64)($1)
5417 ; MIPS32EB-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5418 ; MIPS32EB-NEXT:    addiu $sp, $sp, 40
5419 ; MIPS32EB-NEXT:    jr $ra
5420 ; MIPS32EB-NEXT:    nop
5422 ; MIPS64-LABEL: calli64_2:
5423 ; MIPS64:       # %bb.0: # %entry
5424 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
5425 ; MIPS64-NEXT:    .cfi_def_cfa_offset 16
5426 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5427 ; MIPS64-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5428 ; MIPS64-NEXT:    .cfi_offset 31, -8
5429 ; MIPS64-NEXT:    .cfi_offset 28, -16
5430 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(calli64_2)))
5431 ; MIPS64-NEXT:    daddu $1, $1, $25
5432 ; MIPS64-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2)))
5433 ; MIPS64-NEXT:    ld $25, %call16(i64_2)($gp)
5434 ; MIPS64-NEXT:    daddiu $4, $zero, 6
5435 ; MIPS64-NEXT:    daddiu $5, $zero, 7
5436 ; MIPS64-NEXT:    daddiu $6, $zero, 12
5437 ; MIPS64-NEXT:    daddiu $7, $zero, 8
5438 ; MIPS64-NEXT:    jalr $25
5439 ; MIPS64-NEXT:    nop
5440 ; MIPS64-NEXT:    ld $1, %got_disp(gv2i64)($gp)
5441 ; MIPS64-NEXT:    sd $3, 8($1)
5442 ; MIPS64-NEXT:    sd $2, 0($1)
5443 ; MIPS64-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5444 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5445 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
5446 ; MIPS64-NEXT:    jr $ra
5447 ; MIPS64-NEXT:    nop
5449 ; MIPS32R5-LABEL: calli64_2:
5450 ; MIPS32R5:       # %bb.0: # %entry
5451 ; MIPS32R5-NEXT:    addiu $sp, $sp, -40
5452 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 40
5453 ; MIPS32R5-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5454 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5455 ; MIPS32R5-NEXT:    lui $1, %hi($CPI36_0)
5456 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI36_0)
5457 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
5458 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[0]
5459 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[1]
5460 ; MIPS32R5-NEXT:    copy_s.w $6, $w0[2]
5461 ; MIPS32R5-NEXT:    copy_s.w $7, $w0[3]
5462 ; MIPS32R5-NEXT:    lui $1, %hi($CPI36_1)
5463 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI36_1)
5464 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
5465 ; MIPS32R5-NEXT:    copy_s.w $1, $w0[0]
5466 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[1]
5467 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[2]
5468 ; MIPS32R5-NEXT:    copy_s.w $8, $w0[3]
5469 ; MIPS32R5-NEXT:    sw $8, 28($sp)
5470 ; MIPS32R5-NEXT:    sw $3, 24($sp)
5471 ; MIPS32R5-NEXT:    sw $2, 20($sp)
5472 ; MIPS32R5-NEXT:    sw $1, 16($sp)
5473 ; MIPS32R5-NEXT:    jal i64_2
5474 ; MIPS32R5-NEXT:    nop
5475 ; MIPS32R5-NEXT:    ldi.b $w0, 0
5476 ; MIPS32R5-NEXT:    insert.w $w0[0], $2
5477 ; MIPS32R5-NEXT:    lui $1, %hi(gv2i64)
5478 ; MIPS32R5-NEXT:    insert.w $w0[1], $3
5479 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv2i64)
5480 ; MIPS32R5-NEXT:    insert.w $w0[2], $4
5481 ; MIPS32R5-NEXT:    insert.w $w0[3], $5
5482 ; MIPS32R5-NEXT:    st.w $w0, 0($1)
5483 ; MIPS32R5-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5484 ; MIPS32R5-NEXT:    addiu $sp, $sp, 40
5485 ; MIPS32R5-NEXT:    jr $ra
5486 ; MIPS32R5-NEXT:    nop
5488 ; MIPS64R5-LABEL: calli64_2:
5489 ; MIPS64R5:       # %bb.0: # %entry
5490 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
5491 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
5492 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5493 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5494 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
5495 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
5496 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(calli64_2)))
5497 ; MIPS64R5-NEXT:    daddu $1, $1, $25
5498 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2)))
5499 ; MIPS64R5-NEXT:    ld $25, %call16(i64_2)($gp)
5500 ; MIPS64R5-NEXT:    daddiu $4, $zero, 6
5501 ; MIPS64R5-NEXT:    daddiu $5, $zero, 7
5502 ; MIPS64R5-NEXT:    daddiu $6, $zero, 12
5503 ; MIPS64R5-NEXT:    daddiu $7, $zero, 8
5504 ; MIPS64R5-NEXT:    jalr $25
5505 ; MIPS64R5-NEXT:    nop
5506 ; MIPS64R5-NEXT:    ldi.b $w0, 0
5507 ; MIPS64R5-NEXT:    insert.d $w0[0], $2
5508 ; MIPS64R5-NEXT:    insert.d $w0[1], $3
5509 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2i64)($gp)
5510 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
5511 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5512 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5513 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
5514 ; MIPS64R5-NEXT:    jr $ra
5515 ; MIPS64R5-NEXT:    nop
5517 ; MIPS32EL-LABEL: calli64_2:
5518 ; MIPS32EL:       # %bb.0: # %entry
5519 ; MIPS32EL-NEXT:    addiu $sp, $sp, -40
5520 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 40
5521 ; MIPS32EL-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5522 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
5523 ; MIPS32EL-NEXT:    addiu $1, $zero, 8
5524 ; MIPS32EL-NEXT:    sw $1, 24($sp)
5525 ; MIPS32EL-NEXT:    addiu $1, $zero, 12
5526 ; MIPS32EL-NEXT:    sw $1, 16($sp)
5527 ; MIPS32EL-NEXT:    sw $zero, 28($sp)
5528 ; MIPS32EL-NEXT:    sw $zero, 20($sp)
5529 ; MIPS32EL-NEXT:    addiu $4, $zero, 6
5530 ; MIPS32EL-NEXT:    addiu $5, $zero, 0
5531 ; MIPS32EL-NEXT:    addiu $6, $zero, 7
5532 ; MIPS32EL-NEXT:    addiu $7, $zero, 0
5533 ; MIPS32EL-NEXT:    jal i64_2
5534 ; MIPS32EL-NEXT:    nop
5535 ; MIPS32EL-NEXT:    lui $1, %hi(gv2i64)
5536 ; MIPS32EL-NEXT:    addiu $6, $1, %lo(gv2i64)
5537 ; MIPS32EL-NEXT:    sw $5, 12($6)
5538 ; MIPS32EL-NEXT:    sw $4, 8($6)
5539 ; MIPS32EL-NEXT:    sw $3, 4($6)
5540 ; MIPS32EL-NEXT:    sw $2, %lo(gv2i64)($1)
5541 ; MIPS32EL-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5542 ; MIPS32EL-NEXT:    addiu $sp, $sp, 40
5543 ; MIPS32EL-NEXT:    jr $ra
5544 ; MIPS32EL-NEXT:    nop
5545 entry:
5546   %0 = call <2 x i64> @i64_2(<2 x i64> <i64 6, i64 7>, <2 x i64> <i64 12, i64 8>)
5547   store <2 x i64> %0, <2 x i64> * @gv2i64
5548   ret void
5551 declare <2 x float> @float2_extern(<2 x float>, <2 x float>)
5552 declare <4 x float> @float4_extern(<4 x float>, <4 x float>)
5553 declare <2 x double> @double2_extern(<2 x double>, <2 x double>)
5555 define void @callfloat_2() {
5556 ; MIPS32-LABEL: callfloat_2:
5557 ; MIPS32:       # %bb.0: # %entry
5558 ; MIPS32-NEXT:    addiu $sp, $sp, -40
5559 ; MIPS32-NEXT:    .cfi_def_cfa_offset 40
5560 ; MIPS32-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5561 ; MIPS32-NEXT:    .cfi_offset 31, -4
5562 ; MIPS32-NEXT:    lui $1, 16736
5563 ; MIPS32-NEXT:    sw $1, 20($sp)
5564 ; MIPS32-NEXT:    lui $1, 16704
5565 ; MIPS32-NEXT:    sw $1, 16($sp)
5566 ; MIPS32-NEXT:    addiu $4, $sp, 24
5567 ; MIPS32-NEXT:    addiu $6, $zero, 0
5568 ; MIPS32-NEXT:    lui $7, 49024
5569 ; MIPS32-NEXT:    jal float2_extern
5570 ; MIPS32-NEXT:    nop
5571 ; MIPS32-NEXT:    lui $1, %hi(gv2f32)
5572 ; MIPS32-NEXT:    addiu $2, $1, %lo(gv2f32)
5573 ; MIPS32-NEXT:    lwc1 $f0, 28($sp)
5574 ; MIPS32-NEXT:    swc1 $f0, 4($2)
5575 ; MIPS32-NEXT:    lwc1 $f0, 24($sp)
5576 ; MIPS32-NEXT:    swc1 $f0, %lo(gv2f32)($1)
5577 ; MIPS32-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5578 ; MIPS32-NEXT:    addiu $sp, $sp, 40
5579 ; MIPS32-NEXT:    jr $ra
5580 ; MIPS32-NEXT:    nop
5582 ; MIPS64EB-LABEL: callfloat_2:
5583 ; MIPS64EB:       # %bb.0: # %entry
5584 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
5585 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
5586 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5587 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5588 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
5589 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
5590 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5591 ; MIPS64EB-NEXT:    daddu $1, $1, $25
5592 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5593 ; MIPS64EB-NEXT:    daddiu $1, $zero, 383
5594 ; MIPS64EB-NEXT:    dsll $4, $1, 23
5595 ; MIPS64EB-NEXT:    daddiu $1, $zero, 261
5596 ; MIPS64EB-NEXT:    dsll $1, $1, 33
5597 ; MIPS64EB-NEXT:    daddiu $1, $1, 523
5598 ; MIPS64EB-NEXT:    dsll $5, $1, 21
5599 ; MIPS64EB-NEXT:    ld $25, %call16(float2_extern)($gp)
5600 ; MIPS64EB-NEXT:    jalr $25
5601 ; MIPS64EB-NEXT:    nop
5602 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv2f32)($gp)
5603 ; MIPS64EB-NEXT:    sd $2, 0($1)
5604 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5605 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5606 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
5607 ; MIPS64EB-NEXT:    jr $ra
5608 ; MIPS64EB-NEXT:    nop
5610 ; MIPS32R5-LABEL: callfloat_2:
5611 ; MIPS32R5:       # %bb.0: # %entry
5612 ; MIPS32R5-NEXT:    addiu $sp, $sp, -40
5613 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 40
5614 ; MIPS32R5-NEXT:    sw $ra, 36($sp) # 4-byte Folded Spill
5615 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5616 ; MIPS32R5-NEXT:    lui $1, 16736
5617 ; MIPS32R5-NEXT:    sw $1, 20($sp)
5618 ; MIPS32R5-NEXT:    lui $1, 16704
5619 ; MIPS32R5-NEXT:    sw $1, 16($sp)
5620 ; MIPS32R5-NEXT:    addiu $4, $sp, 24
5621 ; MIPS32R5-NEXT:    addiu $6, $zero, 0
5622 ; MIPS32R5-NEXT:    lui $7, 49024
5623 ; MIPS32R5-NEXT:    jal float2_extern
5624 ; MIPS32R5-NEXT:    nop
5625 ; MIPS32R5-NEXT:    lui $1, %hi(gv2f32)
5626 ; MIPS32R5-NEXT:    addiu $2, $1, %lo(gv2f32)
5627 ; MIPS32R5-NEXT:    lwc1 $f0, 28($sp)
5628 ; MIPS32R5-NEXT:    swc1 $f0, 4($2)
5629 ; MIPS32R5-NEXT:    lwc1 $f0, 24($sp)
5630 ; MIPS32R5-NEXT:    swc1 $f0, %lo(gv2f32)($1)
5631 ; MIPS32R5-NEXT:    lw $ra, 36($sp) # 4-byte Folded Reload
5632 ; MIPS32R5-NEXT:    addiu $sp, $sp, 40
5633 ; MIPS32R5-NEXT:    jr $ra
5634 ; MIPS32R5-NEXT:    nop
5636 ; MIPS64R5-LABEL: callfloat_2:
5637 ; MIPS64R5:       # %bb.0: # %entry
5638 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
5639 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
5640 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5641 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5642 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
5643 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
5644 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5645 ; MIPS64R5-NEXT:    daddu $1, $1, $25
5646 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5647 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI37_0)($gp)
5648 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI37_0)
5649 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5650 ; MIPS64R5-NEXT:    copy_s.d $4, $w0[0]
5651 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI37_1)($gp)
5652 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI37_1)
5653 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5654 ; MIPS64R5-NEXT:    copy_s.d $5, $w0[0]
5655 ; MIPS64R5-NEXT:    ld $25, %call16(float2_extern)($gp)
5656 ; MIPS64R5-NEXT:    jalr $25
5657 ; MIPS64R5-NEXT:    nop
5658 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2f32)($gp)
5659 ; MIPS64R5-NEXT:    sd $2, 0($1)
5660 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5661 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5662 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
5663 ; MIPS64R5-NEXT:    jr $ra
5664 ; MIPS64R5-NEXT:    nop
5666 ; MIPS64EL-LABEL: callfloat_2:
5667 ; MIPS64EL:       # %bb.0: # %entry
5668 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
5669 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
5670 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5671 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5672 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
5673 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
5674 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5675 ; MIPS64EL-NEXT:    daddu $1, $1, $25
5676 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5677 ; MIPS64EL-NEXT:    daddiu $1, $zero, 383
5678 ; MIPS64EL-NEXT:    dsll $4, $1, 55
5679 ; MIPS64EL-NEXT:    daddiu $1, $zero, 523
5680 ; MIPS64EL-NEXT:    dsll $1, $1, 31
5681 ; MIPS64EL-NEXT:    daddiu $1, $1, 261
5682 ; MIPS64EL-NEXT:    dsll $5, $1, 22
5683 ; MIPS64EL-NEXT:    ld $25, %call16(float2_extern)($gp)
5684 ; MIPS64EL-NEXT:    jalr $25
5685 ; MIPS64EL-NEXT:    nop
5686 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv2f32)($gp)
5687 ; MIPS64EL-NEXT:    sd $2, 0($1)
5688 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5689 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5690 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
5691 ; MIPS64EL-NEXT:    jr $ra
5692 ; MIPS64EL-NEXT:    nop
5693 entry:
5694   %0 = call <2 x float> @float2_extern(<2 x float> <float 0.0, float -1.0>, <2 x float> <float 12.0, float 14.0>)
5695   store <2 x float> %0, <2 x float> * @gv2f32
5696   ret void
5699 define void @callfloat_4() {
5700 ; MIPS32-LABEL: callfloat_4:
5701 ; MIPS32:       # %bb.0: # %entry
5702 ; MIPS32-NEXT:    addiu $sp, $sp, -80
5703 ; MIPS32-NEXT:    .cfi_def_cfa_offset 80
5704 ; MIPS32-NEXT:    sw $ra, 76($sp) # 4-byte Folded Spill
5705 ; MIPS32-NEXT:    sw $fp, 72($sp) # 4-byte Folded Spill
5706 ; MIPS32-NEXT:    .cfi_offset 31, -4
5707 ; MIPS32-NEXT:    .cfi_offset 30, -8
5708 ; MIPS32-NEXT:    move $fp, $sp
5709 ; MIPS32-NEXT:    .cfi_def_cfa_register 30
5710 ; MIPS32-NEXT:    addiu $1, $zero, -16
5711 ; MIPS32-NEXT:    and $sp, $sp, $1
5712 ; MIPS32-NEXT:    lui $1, 16704
5713 ; MIPS32-NEXT:    lui $2, 16736
5714 ; MIPS32-NEXT:    lui $3, 16752
5715 ; MIPS32-NEXT:    lui $4, 16768
5716 ; MIPS32-NEXT:    sw $4, 36($sp)
5717 ; MIPS32-NEXT:    sw $3, 32($sp)
5718 ; MIPS32-NEXT:    sw $2, 28($sp)
5719 ; MIPS32-NEXT:    sw $1, 24($sp)
5720 ; MIPS32-NEXT:    lui $1, 16512
5721 ; MIPS32-NEXT:    sw $1, 20($sp)
5722 ; MIPS32-NEXT:    lui $1, 16384
5723 ; MIPS32-NEXT:    sw $1, 16($sp)
5724 ; MIPS32-NEXT:    addiu $4, $sp, 48
5725 ; MIPS32-NEXT:    addiu $6, $zero, 0
5726 ; MIPS32-NEXT:    lui $7, 49024
5727 ; MIPS32-NEXT:    jal float4_extern
5728 ; MIPS32-NEXT:    nop
5729 ; MIPS32-NEXT:    lui $1, %hi(gv4f32)
5730 ; MIPS32-NEXT:    addiu $2, $1, %lo(gv4f32)
5731 ; MIPS32-NEXT:    lwc1 $f0, 60($sp)
5732 ; MIPS32-NEXT:    swc1 $f0, 12($2)
5733 ; MIPS32-NEXT:    lwc1 $f0, 56($sp)
5734 ; MIPS32-NEXT:    swc1 $f0, 8($2)
5735 ; MIPS32-NEXT:    lwc1 $f0, 52($sp)
5736 ; MIPS32-NEXT:    swc1 $f0, 4($2)
5737 ; MIPS32-NEXT:    lwc1 $f0, 48($sp)
5738 ; MIPS32-NEXT:    swc1 $f0, %lo(gv4f32)($1)
5739 ; MIPS32-NEXT:    move $sp, $fp
5740 ; MIPS32-NEXT:    lw $fp, 72($sp) # 4-byte Folded Reload
5741 ; MIPS32-NEXT:    lw $ra, 76($sp) # 4-byte Folded Reload
5742 ; MIPS32-NEXT:    addiu $sp, $sp, 80
5743 ; MIPS32-NEXT:    jr $ra
5744 ; MIPS32-NEXT:    nop
5746 ; MIPS64EB-LABEL: callfloat_4:
5747 ; MIPS64EB:       # %bb.0: # %entry
5748 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
5749 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
5750 ; MIPS64EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5751 ; MIPS64EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5752 ; MIPS64EB-NEXT:    .cfi_offset 31, -8
5753 ; MIPS64EB-NEXT:    .cfi_offset 28, -16
5754 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5755 ; MIPS64EB-NEXT:    daddu $1, $1, $25
5756 ; MIPS64EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5757 ; MIPS64EB-NEXT:    daddiu $1, $zero, 1
5758 ; MIPS64EB-NEXT:    dsll $1, $1, 39
5759 ; MIPS64EB-NEXT:    daddiu $1, $1, 129
5760 ; MIPS64EB-NEXT:    daddiu $2, $zero, 261
5761 ; MIPS64EB-NEXT:    dsll $2, $2, 33
5762 ; MIPS64EB-NEXT:    daddiu $3, $zero, 383
5763 ; MIPS64EB-NEXT:    dsll $4, $3, 23
5764 ; MIPS64EB-NEXT:    dsll $5, $1, 23
5765 ; MIPS64EB-NEXT:    daddiu $1, $2, 523
5766 ; MIPS64EB-NEXT:    dsll $6, $1, 21
5767 ; MIPS64EB-NEXT:    daddiu $1, $zero, 1047
5768 ; MIPS64EB-NEXT:    dsll $1, $1, 29
5769 ; MIPS64EB-NEXT:    daddiu $1, $1, 131
5770 ; MIPS64EB-NEXT:    dsll $7, $1, 23
5771 ; MIPS64EB-NEXT:    ld $25, %call16(float4_extern)($gp)
5772 ; MIPS64EB-NEXT:    jalr $25
5773 ; MIPS64EB-NEXT:    nop
5774 ; MIPS64EB-NEXT:    ld $1, %got_disp(gv4f32)($gp)
5775 ; MIPS64EB-NEXT:    sd $3, 8($1)
5776 ; MIPS64EB-NEXT:    sd $2, 0($1)
5777 ; MIPS64EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5778 ; MIPS64EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5779 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
5780 ; MIPS64EB-NEXT:    jr $ra
5781 ; MIPS64EB-NEXT:    nop
5783 ; MIPS32R5-LABEL: callfloat_4:
5784 ; MIPS32R5:       # %bb.0: # %entry
5785 ; MIPS32R5-NEXT:    addiu $sp, $sp, -80
5786 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 80
5787 ; MIPS32R5-NEXT:    sw $ra, 76($sp) # 4-byte Folded Spill
5788 ; MIPS32R5-NEXT:    sw $fp, 72($sp) # 4-byte Folded Spill
5789 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5790 ; MIPS32R5-NEXT:    .cfi_offset 30, -8
5791 ; MIPS32R5-NEXT:    move $fp, $sp
5792 ; MIPS32R5-NEXT:    .cfi_def_cfa_register 30
5793 ; MIPS32R5-NEXT:    addiu $1, $zero, -16
5794 ; MIPS32R5-NEXT:    and $sp, $sp, $1
5795 ; MIPS32R5-NEXT:    lui $1, %hi($CPI38_0)
5796 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI38_0)
5797 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
5798 ; MIPS32R5-NEXT:    copy_s.w $6, $w0[0]
5799 ; MIPS32R5-NEXT:    copy_s.w $7, $w0[1]
5800 ; MIPS32R5-NEXT:    copy_s.w $1, $w0[2]
5801 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[3]
5802 ; MIPS32R5-NEXT:    lui $3, %hi($CPI38_1)
5803 ; MIPS32R5-NEXT:    addiu $3, $3, %lo($CPI38_1)
5804 ; MIPS32R5-NEXT:    ld.w $w0, 0($3)
5805 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[0]
5806 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[1]
5807 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[2]
5808 ; MIPS32R5-NEXT:    copy_s.w $8, $w0[3]
5809 ; MIPS32R5-NEXT:    sw $8, 36($sp)
5810 ; MIPS32R5-NEXT:    sw $5, 32($sp)
5811 ; MIPS32R5-NEXT:    sw $4, 28($sp)
5812 ; MIPS32R5-NEXT:    sw $3, 24($sp)
5813 ; MIPS32R5-NEXT:    sw $2, 20($sp)
5814 ; MIPS32R5-NEXT:    sw $1, 16($sp)
5815 ; MIPS32R5-NEXT:    addiu $4, $sp, 48
5816 ; MIPS32R5-NEXT:    jal float4_extern
5817 ; MIPS32R5-NEXT:    nop
5818 ; MIPS32R5-NEXT:    lui $1, %hi(gv4f32)
5819 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv4f32)
5820 ; MIPS32R5-NEXT:    ld.w $w0, 48($sp)
5821 ; MIPS32R5-NEXT:    st.w $w0, 0($1)
5822 ; MIPS32R5-NEXT:    move $sp, $fp
5823 ; MIPS32R5-NEXT:    lw $fp, 72($sp) # 4-byte Folded Reload
5824 ; MIPS32R5-NEXT:    lw $ra, 76($sp) # 4-byte Folded Reload
5825 ; MIPS32R5-NEXT:    addiu $sp, $sp, 80
5826 ; MIPS32R5-NEXT:    jr $ra
5827 ; MIPS32R5-NEXT:    nop
5829 ; MIPS64R5-LABEL: callfloat_4:
5830 ; MIPS64R5:       # %bb.0: # %entry
5831 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
5832 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
5833 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5834 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5835 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
5836 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
5837 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5838 ; MIPS64R5-NEXT:    daddu $1, $1, $25
5839 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5840 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI38_0)($gp)
5841 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI38_0)
5842 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5843 ; MIPS64R5-NEXT:    copy_s.d $4, $w0[0]
5844 ; MIPS64R5-NEXT:    copy_s.d $5, $w0[1]
5845 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI38_1)($gp)
5846 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI38_1)
5847 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
5848 ; MIPS64R5-NEXT:    copy_s.d $6, $w0[0]
5849 ; MIPS64R5-NEXT:    copy_s.d $7, $w0[1]
5850 ; MIPS64R5-NEXT:    ld $25, %call16(float4_extern)($gp)
5851 ; MIPS64R5-NEXT:    jalr $25
5852 ; MIPS64R5-NEXT:    nop
5853 ; MIPS64R5-NEXT:    ldi.b $w0, 0
5854 ; MIPS64R5-NEXT:    insert.d $w0[0], $2
5855 ; MIPS64R5-NEXT:    insert.d $w0[1], $3
5856 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv4f32)($gp)
5857 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
5858 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5859 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5860 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
5861 ; MIPS64R5-NEXT:    jr $ra
5862 ; MIPS64R5-NEXT:    nop
5864 ; MIPS64EL-LABEL: callfloat_4:
5865 ; MIPS64EL:       # %bb.0: # %entry
5866 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
5867 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
5868 ; MIPS64EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5869 ; MIPS64EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5870 ; MIPS64EL-NEXT:    .cfi_offset 31, -8
5871 ; MIPS64EL-NEXT:    .cfi_offset 28, -16
5872 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5873 ; MIPS64EL-NEXT:    daddu $1, $1, $25
5874 ; MIPS64EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5875 ; MIPS64EL-NEXT:    daddiu $1, $zero, 129
5876 ; MIPS64EL-NEXT:    dsll $1, $1, 25
5877 ; MIPS64EL-NEXT:    daddiu $1, $1, 1
5878 ; MIPS64EL-NEXT:    daddiu $2, $zero, 523
5879 ; MIPS64EL-NEXT:    dsll $2, $2, 31
5880 ; MIPS64EL-NEXT:    daddiu $3, $zero, 383
5881 ; MIPS64EL-NEXT:    dsll $4, $3, 55
5882 ; MIPS64EL-NEXT:    dsll $5, $1, 30
5883 ; MIPS64EL-NEXT:    daddiu $1, $2, 261
5884 ; MIPS64EL-NEXT:    dsll $6, $1, 22
5885 ; MIPS64EL-NEXT:    daddiu $1, $zero, 131
5886 ; MIPS64EL-NEXT:    dsll $1, $1, 35
5887 ; MIPS64EL-NEXT:    daddiu $1, $1, 1047
5888 ; MIPS64EL-NEXT:    dsll $7, $1, 20
5889 ; MIPS64EL-NEXT:    ld $25, %call16(float4_extern)($gp)
5890 ; MIPS64EL-NEXT:    jalr $25
5891 ; MIPS64EL-NEXT:    nop
5892 ; MIPS64EL-NEXT:    ld $1, %got_disp(gv4f32)($gp)
5893 ; MIPS64EL-NEXT:    sd $3, 8($1)
5894 ; MIPS64EL-NEXT:    sd $2, 0($1)
5895 ; MIPS64EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5896 ; MIPS64EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5897 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
5898 ; MIPS64EL-NEXT:    jr $ra
5899 ; MIPS64EL-NEXT:    nop
5900 entry:
5901   %0 = call <4 x float> @float4_extern(<4 x float> <float 0.0, float -1.0, float 2.0, float 4.0>, <4 x float> <float 12.0, float 14.0, float 15.0, float 16.0>)
5902   store <4 x float> %0, <4 x float> * @gv4f32
5903   ret void
5906 define void @calldouble_2() {
5907 ; MIPS32EB-LABEL: calldouble_2:
5908 ; MIPS32EB:       # %bb.0: # %entry
5909 ; MIPS32EB-NEXT:    addiu $sp, $sp, -80
5910 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 80
5911 ; MIPS32EB-NEXT:    sw $ra, 76($sp) # 4-byte Folded Spill
5912 ; MIPS32EB-NEXT:    sw $fp, 72($sp) # 4-byte Folded Spill
5913 ; MIPS32EB-NEXT:    .cfi_offset 31, -4
5914 ; MIPS32EB-NEXT:    .cfi_offset 30, -8
5915 ; MIPS32EB-NEXT:    move $fp, $sp
5916 ; MIPS32EB-NEXT:    .cfi_def_cfa_register 30
5917 ; MIPS32EB-NEXT:    addiu $1, $zero, -16
5918 ; MIPS32EB-NEXT:    and $sp, $sp, $1
5919 ; MIPS32EB-NEXT:    lui $1, 16424
5920 ; MIPS32EB-NEXT:    lui $2, 16428
5921 ; MIPS32EB-NEXT:    sw $2, 32($sp)
5922 ; MIPS32EB-NEXT:    sw $1, 24($sp)
5923 ; MIPS32EB-NEXT:    lui $1, 49136
5924 ; MIPS32EB-NEXT:    sw $1, 16($sp)
5925 ; MIPS32EB-NEXT:    sw $zero, 36($sp)
5926 ; MIPS32EB-NEXT:    sw $zero, 28($sp)
5927 ; MIPS32EB-NEXT:    sw $zero, 20($sp)
5928 ; MIPS32EB-NEXT:    addiu $4, $sp, 48
5929 ; MIPS32EB-NEXT:    addiu $6, $zero, 0
5930 ; MIPS32EB-NEXT:    addiu $7, $zero, 0
5931 ; MIPS32EB-NEXT:    jal double2_extern
5932 ; MIPS32EB-NEXT:    nop
5933 ; MIPS32EB-NEXT:    lui $1, %hi(gv2f64)
5934 ; MIPS32EB-NEXT:    addiu $2, $1, %lo(gv2f64)
5935 ; MIPS32EB-NEXT:    ldc1 $f0, 56($sp)
5936 ; MIPS32EB-NEXT:    sdc1 $f0, 8($2)
5937 ; MIPS32EB-NEXT:    ldc1 $f0, 48($sp)
5938 ; MIPS32EB-NEXT:    sdc1 $f0, %lo(gv2f64)($1)
5939 ; MIPS32EB-NEXT:    move $sp, $fp
5940 ; MIPS32EB-NEXT:    lw $fp, 72($sp) # 4-byte Folded Reload
5941 ; MIPS32EB-NEXT:    lw $ra, 76($sp) # 4-byte Folded Reload
5942 ; MIPS32EB-NEXT:    addiu $sp, $sp, 80
5943 ; MIPS32EB-NEXT:    jr $ra
5944 ; MIPS32EB-NEXT:    nop
5946 ; MIPS64-LABEL: calldouble_2:
5947 ; MIPS64:       # %bb.0: # %entry
5948 ; MIPS64-NEXT:    daddiu $sp, $sp, -16
5949 ; MIPS64-NEXT:    .cfi_def_cfa_offset 16
5950 ; MIPS64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
5951 ; MIPS64-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
5952 ; MIPS64-NEXT:    .cfi_offset 31, -8
5953 ; MIPS64-NEXT:    .cfi_offset 28, -16
5954 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(calldouble_2)))
5955 ; MIPS64-NEXT:    daddu $1, $1, $25
5956 ; MIPS64-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2)))
5957 ; MIPS64-NEXT:    daddiu $1, $zero, 3071
5958 ; MIPS64-NEXT:    dsll $5, $1, 52
5959 ; MIPS64-NEXT:    daddiu $1, $zero, 2053
5960 ; MIPS64-NEXT:    dsll $6, $1, 51
5961 ; MIPS64-NEXT:    daddiu $1, $zero, 4107
5962 ; MIPS64-NEXT:    dsll $7, $1, 50
5963 ; MIPS64-NEXT:    ld $25, %call16(double2_extern)($gp)
5964 ; MIPS64-NEXT:    daddiu $4, $zero, 0
5965 ; MIPS64-NEXT:    jalr $25
5966 ; MIPS64-NEXT:    nop
5967 ; MIPS64-NEXT:    ld $1, %got_disp(gv2f64)($gp)
5968 ; MIPS64-NEXT:    sd $3, 8($1)
5969 ; MIPS64-NEXT:    sd $2, 0($1)
5970 ; MIPS64-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
5971 ; MIPS64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
5972 ; MIPS64-NEXT:    daddiu $sp, $sp, 16
5973 ; MIPS64-NEXT:    jr $ra
5974 ; MIPS64-NEXT:    nop
5976 ; MIPS32R5-LABEL: calldouble_2:
5977 ; MIPS32R5:       # %bb.0: # %entry
5978 ; MIPS32R5-NEXT:    addiu $sp, $sp, -80
5979 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 80
5980 ; MIPS32R5-NEXT:    sw $ra, 76($sp) # 4-byte Folded Spill
5981 ; MIPS32R5-NEXT:    sw $fp, 72($sp) # 4-byte Folded Spill
5982 ; MIPS32R5-NEXT:    .cfi_offset 31, -4
5983 ; MIPS32R5-NEXT:    .cfi_offset 30, -8
5984 ; MIPS32R5-NEXT:    move $fp, $sp
5985 ; MIPS32R5-NEXT:    .cfi_def_cfa_register 30
5986 ; MIPS32R5-NEXT:    addiu $1, $zero, -16
5987 ; MIPS32R5-NEXT:    and $sp, $sp, $1
5988 ; MIPS32R5-NEXT:    lui $1, %hi($CPI39_0)
5989 ; MIPS32R5-NEXT:    addiu $1, $1, %lo($CPI39_0)
5990 ; MIPS32R5-NEXT:    ld.w $w0, 0($1)
5991 ; MIPS32R5-NEXT:    copy_s.w $6, $w0[0]
5992 ; MIPS32R5-NEXT:    copy_s.w $7, $w0[1]
5993 ; MIPS32R5-NEXT:    copy_s.w $1, $w0[2]
5994 ; MIPS32R5-NEXT:    copy_s.w $2, $w0[3]
5995 ; MIPS32R5-NEXT:    lui $3, %hi($CPI39_1)
5996 ; MIPS32R5-NEXT:    addiu $3, $3, %lo($CPI39_1)
5997 ; MIPS32R5-NEXT:    ld.w $w0, 0($3)
5998 ; MIPS32R5-NEXT:    copy_s.w $3, $w0[0]
5999 ; MIPS32R5-NEXT:    copy_s.w $4, $w0[1]
6000 ; MIPS32R5-NEXT:    copy_s.w $5, $w0[2]
6001 ; MIPS32R5-NEXT:    copy_s.w $8, $w0[3]
6002 ; MIPS32R5-NEXT:    sw $8, 36($sp)
6003 ; MIPS32R5-NEXT:    sw $5, 32($sp)
6004 ; MIPS32R5-NEXT:    sw $4, 28($sp)
6005 ; MIPS32R5-NEXT:    sw $3, 24($sp)
6006 ; MIPS32R5-NEXT:    sw $2, 20($sp)
6007 ; MIPS32R5-NEXT:    sw $1, 16($sp)
6008 ; MIPS32R5-NEXT:    addiu $4, $sp, 48
6009 ; MIPS32R5-NEXT:    jal double2_extern
6010 ; MIPS32R5-NEXT:    nop
6011 ; MIPS32R5-NEXT:    lui $1, %hi(gv2f64)
6012 ; MIPS32R5-NEXT:    addiu $1, $1, %lo(gv2f64)
6013 ; MIPS32R5-NEXT:    ld.d $w0, 48($sp)
6014 ; MIPS32R5-NEXT:    st.d $w0, 0($1)
6015 ; MIPS32R5-NEXT:    move $sp, $fp
6016 ; MIPS32R5-NEXT:    lw $fp, 72($sp) # 4-byte Folded Reload
6017 ; MIPS32R5-NEXT:    lw $ra, 76($sp) # 4-byte Folded Reload
6018 ; MIPS32R5-NEXT:    addiu $sp, $sp, 80
6019 ; MIPS32R5-NEXT:    jr $ra
6020 ; MIPS32R5-NEXT:    nop
6022 ; MIPS64R5-LABEL: calldouble_2:
6023 ; MIPS64R5:       # %bb.0: # %entry
6024 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -16
6025 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 16
6026 ; MIPS64R5-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
6027 ; MIPS64R5-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
6028 ; MIPS64R5-NEXT:    .cfi_offset 31, -8
6029 ; MIPS64R5-NEXT:    .cfi_offset 28, -16
6030 ; MIPS64R5-NEXT:    lui $1, %hi(%neg(%gp_rel(calldouble_2)))
6031 ; MIPS64R5-NEXT:    daddu $1, $1, $25
6032 ; MIPS64R5-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2)))
6033 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI39_0)($gp)
6034 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI39_0)
6035 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
6036 ; MIPS64R5-NEXT:    copy_s.d $4, $w0[0]
6037 ; MIPS64R5-NEXT:    copy_s.d $5, $w0[1]
6038 ; MIPS64R5-NEXT:    ld $1, %got_page(.LCPI39_1)($gp)
6039 ; MIPS64R5-NEXT:    daddiu $1, $1, %got_ofst(.LCPI39_1)
6040 ; MIPS64R5-NEXT:    ld.d $w0, 0($1)
6041 ; MIPS64R5-NEXT:    copy_s.d $6, $w0[0]
6042 ; MIPS64R5-NEXT:    copy_s.d $7, $w0[1]
6043 ; MIPS64R5-NEXT:    ld $25, %call16(double2_extern)($gp)
6044 ; MIPS64R5-NEXT:    jalr $25
6045 ; MIPS64R5-NEXT:    nop
6046 ; MIPS64R5-NEXT:    ldi.b $w0, 0
6047 ; MIPS64R5-NEXT:    insert.d $w0[0], $2
6048 ; MIPS64R5-NEXT:    insert.d $w0[1], $3
6049 ; MIPS64R5-NEXT:    ld $1, %got_disp(gv2f64)($gp)
6050 ; MIPS64R5-NEXT:    st.d $w0, 0($1)
6051 ; MIPS64R5-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
6052 ; MIPS64R5-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
6053 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 16
6054 ; MIPS64R5-NEXT:    jr $ra
6055 ; MIPS64R5-NEXT:    nop
6057 ; MIPS32EL-LABEL: calldouble_2:
6058 ; MIPS32EL:       # %bb.0: # %entry
6059 ; MIPS32EL-NEXT:    addiu $sp, $sp, -80
6060 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 80
6061 ; MIPS32EL-NEXT:    sw $ra, 76($sp) # 4-byte Folded Spill
6062 ; MIPS32EL-NEXT:    sw $fp, 72($sp) # 4-byte Folded Spill
6063 ; MIPS32EL-NEXT:    .cfi_offset 31, -4
6064 ; MIPS32EL-NEXT:    .cfi_offset 30, -8
6065 ; MIPS32EL-NEXT:    move $fp, $sp
6066 ; MIPS32EL-NEXT:    .cfi_def_cfa_register 30
6067 ; MIPS32EL-NEXT:    addiu $1, $zero, -16
6068 ; MIPS32EL-NEXT:    and $sp, $sp, $1
6069 ; MIPS32EL-NEXT:    lui $1, 16424
6070 ; MIPS32EL-NEXT:    lui $2, 16428
6071 ; MIPS32EL-NEXT:    sw $2, 36($sp)
6072 ; MIPS32EL-NEXT:    sw $1, 28($sp)
6073 ; MIPS32EL-NEXT:    lui $1, 49136
6074 ; MIPS32EL-NEXT:    sw $1, 20($sp)
6075 ; MIPS32EL-NEXT:    sw $zero, 32($sp)
6076 ; MIPS32EL-NEXT:    sw $zero, 24($sp)
6077 ; MIPS32EL-NEXT:    sw $zero, 16($sp)
6078 ; MIPS32EL-NEXT:    addiu $4, $sp, 48
6079 ; MIPS32EL-NEXT:    addiu $6, $zero, 0
6080 ; MIPS32EL-NEXT:    addiu $7, $zero, 0
6081 ; MIPS32EL-NEXT:    jal double2_extern
6082 ; MIPS32EL-NEXT:    nop
6083 ; MIPS32EL-NEXT:    lui $1, %hi(gv2f64)
6084 ; MIPS32EL-NEXT:    addiu $2, $1, %lo(gv2f64)
6085 ; MIPS32EL-NEXT:    ldc1 $f0, 56($sp)
6086 ; MIPS32EL-NEXT:    sdc1 $f0, 8($2)
6087 ; MIPS32EL-NEXT:    ldc1 $f0, 48($sp)
6088 ; MIPS32EL-NEXT:    sdc1 $f0, %lo(gv2f64)($1)
6089 ; MIPS32EL-NEXT:    move $sp, $fp
6090 ; MIPS32EL-NEXT:    lw $fp, 72($sp) # 4-byte Folded Reload
6091 ; MIPS32EL-NEXT:    lw $ra, 76($sp) # 4-byte Folded Reload
6092 ; MIPS32EL-NEXT:    addiu $sp, $sp, 80
6093 ; MIPS32EL-NEXT:    jr $ra
6094 ; MIPS32EL-NEXT:    nop
6095 entry:
6096   %0 = call <2 x double> @double2_extern(<2 x double> <double 0.0, double -1.0>, <2 x double> <double 12.0, double 14.0>)
6097   store <2 x double> %0, <2 x double> * @gv2f64
6098   ret void
6101 ; The mixed tests show that due to alignment requirements, $5 is not used
6102 ; in argument passing.
6104 define float @mixed_i8(<2 x float> %a, i8 %b, <2 x float> %c) {
6105 ; MIPS32-LABEL: mixed_i8:
6106 ; MIPS32:       # %bb.0: # %entry
6107 ; MIPS32-NEXT:    mtc1 $5, $f0
6108 ; MIPS32-NEXT:    andi $1, $6, 255
6109 ; MIPS32-NEXT:    mtc1 $1, $f1
6110 ; MIPS32-NEXT:    cvt.s.w $f1, $f1
6111 ; MIPS32-NEXT:    add.s $f0, $f1, $f0
6112 ; MIPS32-NEXT:    lwc1 $f2, 20($sp)
6113 ; MIPS32-NEXT:    add.s $f0, $f0, $f2
6114 ; MIPS32-NEXT:    mtc1 $4, $f2
6115 ; MIPS32-NEXT:    add.s $f1, $f1, $f2
6116 ; MIPS32-NEXT:    lwc1 $f2, 16($sp)
6117 ; MIPS32-NEXT:    add.s $f1, $f1, $f2
6118 ; MIPS32-NEXT:    add.s $f0, $f1, $f0
6119 ; MIPS32-NEXT:    jr $ra
6120 ; MIPS32-NEXT:    nop
6122 ; MIPS64EB-LABEL: mixed_i8:
6123 ; MIPS64EB:       # %bb.0: # %entry
6124 ; MIPS64EB-NEXT:    sll $1, $4, 0
6125 ; MIPS64EB-NEXT:    mtc1 $1, $f0
6126 ; MIPS64EB-NEXT:    sll $1, $5, 0
6127 ; MIPS64EB-NEXT:    andi $1, $1, 255
6128 ; MIPS64EB-NEXT:    mtc1 $1, $f1
6129 ; MIPS64EB-NEXT:    cvt.s.w $f1, $f1
6130 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
6131 ; MIPS64EB-NEXT:    dsrl $1, $4, 32
6132 ; MIPS64EB-NEXT:    sll $1, $1, 0
6133 ; MIPS64EB-NEXT:    sll $2, $6, 0
6134 ; MIPS64EB-NEXT:    mtc1 $2, $f2
6135 ; MIPS64EB-NEXT:    add.s $f0, $f0, $f2
6136 ; MIPS64EB-NEXT:    mtc1 $1, $f2
6137 ; MIPS64EB-NEXT:    add.s $f1, $f1, $f2
6138 ; MIPS64EB-NEXT:    dsrl $1, $6, 32
6139 ; MIPS64EB-NEXT:    sll $1, $1, 0
6140 ; MIPS64EB-NEXT:    mtc1 $1, $f2
6141 ; MIPS64EB-NEXT:    add.s $f1, $f1, $f2
6142 ; MIPS64EB-NEXT:    add.s $f0, $f1, $f0
6143 ; MIPS64EB-NEXT:    jr $ra
6144 ; MIPS64EB-NEXT:    nop
6146 ; MIPS32R5-LABEL: mixed_i8:
6147 ; MIPS32R5:       # %bb.0: # %entry
6148 ; MIPS32R5-NEXT:    addiu $sp, $sp, -64
6149 ; MIPS32R5-NEXT:    .cfi_def_cfa_offset 64
6150 ; MIPS32R5-NEXT:    sw $fp, 60($sp) # 4-byte Folded Spill
6151 ; MIPS32R5-NEXT:    .cfi_offset 30, -4
6152 ; MIPS32R5-NEXT:    move $fp, $sp
6153 ; MIPS32R5-NEXT:    .cfi_def_cfa_register 30
6154 ; MIPS32R5-NEXT:    addiu $1, $zero, -16
6155 ; MIPS32R5-NEXT:    and $sp, $sp, $1
6156 ; MIPS32R5-NEXT:    andi $1, $6, 255
6157 ; MIPS32R5-NEXT:    mtc1 $1, $f0
6158 ; MIPS32R5-NEXT:    cvt.s.w $f0, $f0
6159 ; MIPS32R5-NEXT:    swc1 $f0, 36($sp)
6160 ; MIPS32R5-NEXT:    swc1 $f0, 32($sp)
6161 ; MIPS32R5-NEXT:    sw $5, 4($sp)
6162 ; MIPS32R5-NEXT:    sw $4, 0($sp)
6163 ; MIPS32R5-NEXT:    ld.w $w0, 0($sp)
6164 ; MIPS32R5-NEXT:    ld.w $w1, 32($sp)
6165 ; MIPS32R5-NEXT:    fadd.w $w0, $w1, $w0
6166 ; MIPS32R5-NEXT:    lw $1, 84($fp)
6167 ; MIPS32R5-NEXT:    sw $1, 20($sp)
6168 ; MIPS32R5-NEXT:    lw $1, 80($fp)
6169 ; MIPS32R5-NEXT:    sw $1, 16($sp)
6170 ; MIPS32R5-NEXT:    ld.w $w1, 16($sp)
6171 ; MIPS32R5-NEXT:    fadd.w $w0, $w0, $w1
6172 ; MIPS32R5-NEXT:    splati.w $w1, $w0[1]
6173 ; MIPS32R5-NEXT:    add.s $f0, $f0, $f1
6174 ; MIPS32R5-NEXT:    move $sp, $fp
6175 ; MIPS32R5-NEXT:    lw $fp, 60($sp) # 4-byte Folded Reload
6176 ; MIPS32R5-NEXT:    addiu $sp, $sp, 64
6177 ; MIPS32R5-NEXT:    jr $ra
6178 ; MIPS32R5-NEXT:    nop
6180 ; MIPS64R5-LABEL: mixed_i8:
6181 ; MIPS64R5:       # %bb.0: # %entry
6182 ; MIPS64R5-NEXT:    daddiu $sp, $sp, -48
6183 ; MIPS64R5-NEXT:    .cfi_def_cfa_offset 48
6184 ; MIPS64R5-NEXT:    sll $1, $5, 0
6185 ; MIPS64R5-NEXT:    andi $1, $1, 255
6186 ; MIPS64R5-NEXT:    mtc1 $1, $f0
6187 ; MIPS64R5-NEXT:    cvt.s.w $f0, $f0
6188 ; MIPS64R5-NEXT:    swc1 $f0, 36($sp)
6189 ; MIPS64R5-NEXT:    swc1 $f0, 32($sp)
6190 ; MIPS64R5-NEXT:    sd $4, 0($sp)
6191 ; MIPS64R5-NEXT:    ld.w $w0, 0($sp)
6192 ; MIPS64R5-NEXT:    ld.w $w1, 32($sp)
6193 ; MIPS64R5-NEXT:    fadd.w $w0, $w1, $w0
6194 ; MIPS64R5-NEXT:    sd $6, 16($sp)
6195 ; MIPS64R5-NEXT:    ld.w $w1, 16($sp)
6196 ; MIPS64R5-NEXT:    fadd.w $w0, $w0, $w1
6197 ; MIPS64R5-NEXT:    splati.w $w1, $w0[1]
6198 ; MIPS64R5-NEXT:    add.s $f0, $f0, $f1
6199 ; MIPS64R5-NEXT:    daddiu $sp, $sp, 48
6200 ; MIPS64R5-NEXT:    jr $ra
6201 ; MIPS64R5-NEXT:    nop
6203 ; MIPS64EL-LABEL: mixed_i8:
6204 ; MIPS64EL:       # %bb.0: # %entry
6205 ; MIPS64EL-NEXT:    dsrl $1, $4, 32
6206 ; MIPS64EL-NEXT:    sll $1, $1, 0
6207 ; MIPS64EL-NEXT:    mtc1 $1, $f0
6208 ; MIPS64EL-NEXT:    sll $1, $5, 0
6209 ; MIPS64EL-NEXT:    andi $1, $1, 255
6210 ; MIPS64EL-NEXT:    mtc1 $1, $f1
6211 ; MIPS64EL-NEXT:    cvt.s.w $f1, $f1
6212 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
6213 ; MIPS64EL-NEXT:    dsrl $1, $6, 32
6214 ; MIPS64EL-NEXT:    sll $1, $1, 0
6215 ; MIPS64EL-NEXT:    mtc1 $1, $f2
6216 ; MIPS64EL-NEXT:    add.s $f0, $f0, $f2
6217 ; MIPS64EL-NEXT:    sll $1, $4, 0
6218 ; MIPS64EL-NEXT:    mtc1 $1, $f2
6219 ; MIPS64EL-NEXT:    add.s $f1, $f1, $f2
6220 ; MIPS64EL-NEXT:    sll $1, $6, 0
6221 ; MIPS64EL-NEXT:    mtc1 $1, $f2
6222 ; MIPS64EL-NEXT:    add.s $f1, $f1, $f2
6223 ; MIPS64EL-NEXT:    add.s $f0, $f1, $f0
6224 ; MIPS64EL-NEXT:    jr $ra
6225 ; MIPS64EL-NEXT:    nop
6226 entry:
6227   %0 = zext i8 %b to i32
6228   %1 = uitofp i32 %0 to float
6229   %2 = insertelement <2 x float> undef, float %1, i32 0
6230   %3 = insertelement <2 x float> %2, float %1, i32 1
6231   %4 = fadd <2 x float> %3, %a
6232   %5 = fadd <2 x float> %4, %c
6233   %6 = extractelement <2 x float> %5, i32 0
6234   %7 = extractelement <2 x float> %5, i32 1
6235   %8 = fadd float %6, %7
6236   ret float %8
6239 define <4 x float> @mixed_32(<4 x float> %a, i32 %b) {
6240 ; MIPS32EB-LABEL: mixed_32:
6241 ; MIPS32EB:       # %bb.0: # %entry
6242 ; MIPS32EB-NEXT:    addiu $sp, $sp, -8
6243 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 8
6244 ; MIPS32EB-NEXT:    lui $1, 17200
6245 ; MIPS32EB-NEXT:    sw $1, 0($sp)
6246 ; MIPS32EB-NEXT:    lw $1, 32($sp)
6247 ; MIPS32EB-NEXT:    sw $1, 4($sp)
6248 ; MIPS32EB-NEXT:    lui $1, %hi($CPI41_0)
6249 ; MIPS32EB-NEXT:    ldc1 $f0, %lo($CPI41_0)($1)
6250 ; MIPS32EB-NEXT:    ldc1 $f2, 0($sp)
6251 ; MIPS32EB-NEXT:    sub.d $f0, $f2, $f0
6252 ; MIPS32EB-NEXT:    cvt.s.d $f0, $f0
6253 ; MIPS32EB-NEXT:    lwc1 $f1, 28($sp)
6254 ; MIPS32EB-NEXT:    lwc1 $f2, 24($sp)
6255 ; MIPS32EB-NEXT:    add.s $f2, $f0, $f2
6256 ; MIPS32EB-NEXT:    add.s $f1, $f0, $f1
6257 ; MIPS32EB-NEXT:    swc1 $f1, 12($4)
6258 ; MIPS32EB-NEXT:    swc1 $f2, 8($4)
6259 ; MIPS32EB-NEXT:    mtc1 $7, $f1
6260 ; MIPS32EB-NEXT:    add.s $f1, $f0, $f1
6261 ; MIPS32EB-NEXT:    swc1 $f1, 4($4)
6262 ; MIPS32EB-NEXT:    mtc1 $6, $f1
6263 ; MIPS32EB-NEXT:    add.s $f0, $f0, $f1
6264 ; MIPS32EB-NEXT:    swc1 $f0, 0($4)
6265 ; MIPS32EB-NEXT:    addiu $sp, $sp, 8
6266 ; MIPS32EB-NEXT:    jr $ra
6267 ; MIPS32EB-NEXT:    nop
6269 ; MIPS64EB-LABEL: mixed_32:
6270 ; MIPS64EB:       # %bb.0: # %entry
6271 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -16
6272 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 16
6273 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(mixed_32)))
6274 ; MIPS64EB-NEXT:    daddu $1, $1, $25
6275 ; MIPS64EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6276 ; MIPS64EB-NEXT:    lui $2, 17200
6277 ; MIPS64EB-NEXT:    sw $2, 8($sp)
6278 ; MIPS64EB-NEXT:    sll $2, $6, 0
6279 ; MIPS64EB-NEXT:    sw $2, 12($sp)
6280 ; MIPS64EB-NEXT:    ld $1, %got_page(.LCPI41_0)($1)
6281 ; MIPS64EB-NEXT:    ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6282 ; MIPS64EB-NEXT:    ldc1 $f1, 8($sp)
6283 ; MIPS64EB-NEXT:    sub.d $f0, $f1, $f0
6284 ; MIPS64EB-NEXT:    cvt.s.d $f0, $f0
6285 ; MIPS64EB-NEXT:    dsrl $1, $4, 32
6286 ; MIPS64EB-NEXT:    sll $1, $1, 0
6287 ; MIPS64EB-NEXT:    mtc1 $1, $f1
6288 ; MIPS64EB-NEXT:    add.s $f1, $f0, $f1
6289 ; MIPS64EB-NEXT:    dsrl $1, $5, 32
6290 ; MIPS64EB-NEXT:    mfc1 $2, $f1
6291 ; MIPS64EB-NEXT:    sll $3, $4, 0
6292 ; MIPS64EB-NEXT:    sll $1, $1, 0
6293 ; MIPS64EB-NEXT:    mtc1 $1, $f1
6294 ; MIPS64EB-NEXT:    add.s $f1, $f0, $f1
6295 ; MIPS64EB-NEXT:    mfc1 $1, $f1
6296 ; MIPS64EB-NEXT:    mtc1 $3, $f1
6297 ; MIPS64EB-NEXT:    sll $3, $5, 0
6298 ; MIPS64EB-NEXT:    mtc1 $3, $f2
6299 ; MIPS64EB-NEXT:    dsll $2, $2, 32
6300 ; MIPS64EB-NEXT:    add.s $f1, $f0, $f1
6301 ; MIPS64EB-NEXT:    mfc1 $3, $f1
6302 ; MIPS64EB-NEXT:    dsll $3, $3, 32
6303 ; MIPS64EB-NEXT:    dsrl $3, $3, 32
6304 ; MIPS64EB-NEXT:    or $2, $3, $2
6305 ; MIPS64EB-NEXT:    dsll $1, $1, 32
6306 ; MIPS64EB-NEXT:    add.s $f0, $f0, $f2
6307 ; MIPS64EB-NEXT:    mfc1 $3, $f0
6308 ; MIPS64EB-NEXT:    dsll $3, $3, 32
6309 ; MIPS64EB-NEXT:    dsrl $3, $3, 32
6310 ; MIPS64EB-NEXT:    or $3, $3, $1
6311 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 16
6312 ; MIPS64EB-NEXT:    jr $ra
6313 ; MIPS64EB-NEXT:    nop
6315 ; MIPS32R5EB-LABEL: mixed_32:
6316 ; MIPS32R5EB:       # %bb.0: # %entry
6317 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, -8
6318 ; MIPS32R5EB-NEXT:    .cfi_def_cfa_offset 8
6319 ; MIPS32R5EB-NEXT:    lui $1, 17200
6320 ; MIPS32R5EB-NEXT:    sw $1, 0($sp)
6321 ; MIPS32R5EB-NEXT:    lw $1, 32($sp)
6322 ; MIPS32R5EB-NEXT:    sw $1, 4($sp)
6323 ; MIPS32R5EB-NEXT:    lui $1, %hi($CPI41_0)
6324 ; MIPS32R5EB-NEXT:    ldc1 $f0, %lo($CPI41_0)($1)
6325 ; MIPS32R5EB-NEXT:    ldc1 $f1, 0($sp)
6326 ; MIPS32R5EB-NEXT:    sub.d $f0, $f1, $f0
6327 ; MIPS32R5EB-NEXT:    cvt.s.d $f0, $f0
6328 ; MIPS32R5EB-NEXT:    ldi.b $w1, 0
6329 ; MIPS32R5EB-NEXT:    splati.w $w0, $w0[0]
6330 ; MIPS32R5EB-NEXT:    insert.w $w1[0], $6
6331 ; MIPS32R5EB-NEXT:    insert.w $w1[1], $7
6332 ; MIPS32R5EB-NEXT:    lw $1, 24($sp)
6333 ; MIPS32R5EB-NEXT:    insert.w $w1[2], $1
6334 ; MIPS32R5EB-NEXT:    lw $1, 28($sp)
6335 ; MIPS32R5EB-NEXT:    insert.w $w1[3], $1
6336 ; MIPS32R5EB-NEXT:    fadd.w $w0, $w0, $w1
6337 ; MIPS32R5EB-NEXT:    st.w $w0, 0($4)
6338 ; MIPS32R5EB-NEXT:    addiu $sp, $sp, 8
6339 ; MIPS32R5EB-NEXT:    jr $ra
6340 ; MIPS32R5EB-NEXT:    nop
6342 ; MIPS64R5EB-LABEL: mixed_32:
6343 ; MIPS64R5EB:       # %bb.0: # %entry
6344 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, -16
6345 ; MIPS64R5EB-NEXT:    .cfi_def_cfa_offset 16
6346 ; MIPS64R5EB-NEXT:    lui $1, %hi(%neg(%gp_rel(mixed_32)))
6347 ; MIPS64R5EB-NEXT:    daddu $1, $1, $25
6348 ; MIPS64R5EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6349 ; MIPS64R5EB-NEXT:    lui $2, 17200
6350 ; MIPS64R5EB-NEXT:    sw $2, 8($sp)
6351 ; MIPS64R5EB-NEXT:    sll $2, $6, 0
6352 ; MIPS64R5EB-NEXT:    sw $2, 12($sp)
6353 ; MIPS64R5EB-NEXT:    ld $1, %got_page(.LCPI41_0)($1)
6354 ; MIPS64R5EB-NEXT:    ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6355 ; MIPS64R5EB-NEXT:    ldc1 $f1, 8($sp)
6356 ; MIPS64R5EB-NEXT:    sub.d $f0, $f1, $f0
6357 ; MIPS64R5EB-NEXT:    ldi.b $w1, 0
6358 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $4
6359 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $5
6360 ; MIPS64R5EB-NEXT:    shf.w $w1, $w1, 177
6361 ; MIPS64R5EB-NEXT:    cvt.s.d $f0, $f0
6362 ; MIPS64R5EB-NEXT:    splati.w $w0, $w0[0]
6363 ; MIPS64R5EB-NEXT:    fadd.w $w0, $w0, $w1
6364 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
6365 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
6366 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
6367 ; MIPS64R5EB-NEXT:    daddiu $sp, $sp, 16
6368 ; MIPS64R5EB-NEXT:    jr $ra
6369 ; MIPS64R5EB-NEXT:    nop
6371 ; MIPS32EL-LABEL: mixed_32:
6372 ; MIPS32EL:       # %bb.0: # %entry
6373 ; MIPS32EL-NEXT:    addiu $sp, $sp, -8
6374 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 8
6375 ; MIPS32EL-NEXT:    lui $1, 17200
6376 ; MIPS32EL-NEXT:    sw $1, 4($sp)
6377 ; MIPS32EL-NEXT:    lw $1, 32($sp)
6378 ; MIPS32EL-NEXT:    sw $1, 0($sp)
6379 ; MIPS32EL-NEXT:    lui $1, %hi($CPI41_0)
6380 ; MIPS32EL-NEXT:    ldc1 $f0, %lo($CPI41_0)($1)
6381 ; MIPS32EL-NEXT:    ldc1 $f2, 0($sp)
6382 ; MIPS32EL-NEXT:    sub.d $f0, $f2, $f0
6383 ; MIPS32EL-NEXT:    cvt.s.d $f0, $f0
6384 ; MIPS32EL-NEXT:    lwc1 $f1, 28($sp)
6385 ; MIPS32EL-NEXT:    lwc1 $f2, 24($sp)
6386 ; MIPS32EL-NEXT:    add.s $f2, $f0, $f2
6387 ; MIPS32EL-NEXT:    add.s $f1, $f0, $f1
6388 ; MIPS32EL-NEXT:    swc1 $f1, 12($4)
6389 ; MIPS32EL-NEXT:    swc1 $f2, 8($4)
6390 ; MIPS32EL-NEXT:    mtc1 $7, $f1
6391 ; MIPS32EL-NEXT:    add.s $f1, $f0, $f1
6392 ; MIPS32EL-NEXT:    swc1 $f1, 4($4)
6393 ; MIPS32EL-NEXT:    mtc1 $6, $f1
6394 ; MIPS32EL-NEXT:    add.s $f0, $f0, $f1
6395 ; MIPS32EL-NEXT:    swc1 $f0, 0($4)
6396 ; MIPS32EL-NEXT:    addiu $sp, $sp, 8
6397 ; MIPS32EL-NEXT:    jr $ra
6398 ; MIPS32EL-NEXT:    nop
6400 ; MIPS64EL-LABEL: mixed_32:
6401 ; MIPS64EL:       # %bb.0: # %entry
6402 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
6403 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
6404 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(mixed_32)))
6405 ; MIPS64EL-NEXT:    daddu $1, $1, $25
6406 ; MIPS64EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6407 ; MIPS64EL-NEXT:    lui $2, 17200
6408 ; MIPS64EL-NEXT:    sw $2, 12($sp)
6409 ; MIPS64EL-NEXT:    sll $2, $6, 0
6410 ; MIPS64EL-NEXT:    sw $2, 8($sp)
6411 ; MIPS64EL-NEXT:    ld $1, %got_page(.LCPI41_0)($1)
6412 ; MIPS64EL-NEXT:    ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6413 ; MIPS64EL-NEXT:    ldc1 $f1, 8($sp)
6414 ; MIPS64EL-NEXT:    sub.d $f0, $f1, $f0
6415 ; MIPS64EL-NEXT:    cvt.s.d $f0, $f0
6416 ; MIPS64EL-NEXT:    dsrl $1, $4, 32
6417 ; MIPS64EL-NEXT:    sll $1, $1, 0
6418 ; MIPS64EL-NEXT:    mtc1 $1, $f1
6419 ; MIPS64EL-NEXT:    add.s $f1, $f0, $f1
6420 ; MIPS64EL-NEXT:    dsrl $1, $5, 32
6421 ; MIPS64EL-NEXT:    mfc1 $2, $f1
6422 ; MIPS64EL-NEXT:    sll $3, $4, 0
6423 ; MIPS64EL-NEXT:    sll $1, $1, 0
6424 ; MIPS64EL-NEXT:    mtc1 $1, $f1
6425 ; MIPS64EL-NEXT:    add.s $f1, $f0, $f1
6426 ; MIPS64EL-NEXT:    mfc1 $1, $f1
6427 ; MIPS64EL-NEXT:    mtc1 $3, $f1
6428 ; MIPS64EL-NEXT:    sll $3, $5, 0
6429 ; MIPS64EL-NEXT:    mtc1 $3, $f2
6430 ; MIPS64EL-NEXT:    dsll $2, $2, 32
6431 ; MIPS64EL-NEXT:    add.s $f1, $f0, $f1
6432 ; MIPS64EL-NEXT:    mfc1 $3, $f1
6433 ; MIPS64EL-NEXT:    dsll $3, $3, 32
6434 ; MIPS64EL-NEXT:    dsrl $3, $3, 32
6435 ; MIPS64EL-NEXT:    or $2, $3, $2
6436 ; MIPS64EL-NEXT:    dsll $1, $1, 32
6437 ; MIPS64EL-NEXT:    add.s $f0, $f0, $f2
6438 ; MIPS64EL-NEXT:    mfc1 $3, $f0
6439 ; MIPS64EL-NEXT:    dsll $3, $3, 32
6440 ; MIPS64EL-NEXT:    dsrl $3, $3, 32
6441 ; MIPS64EL-NEXT:    or $3, $3, $1
6442 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
6443 ; MIPS64EL-NEXT:    jr $ra
6444 ; MIPS64EL-NEXT:    nop
6446 ; MIPS32R5EL-LABEL: mixed_32:
6447 ; MIPS32R5EL:       # %bb.0: # %entry
6448 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, -8
6449 ; MIPS32R5EL-NEXT:    .cfi_def_cfa_offset 8
6450 ; MIPS32R5EL-NEXT:    lui $1, 17200
6451 ; MIPS32R5EL-NEXT:    sw $1, 4($sp)
6452 ; MIPS32R5EL-NEXT:    lw $1, 32($sp)
6453 ; MIPS32R5EL-NEXT:    sw $1, 0($sp)
6454 ; MIPS32R5EL-NEXT:    lui $1, %hi($CPI41_0)
6455 ; MIPS32R5EL-NEXT:    ldc1 $f0, %lo($CPI41_0)($1)
6456 ; MIPS32R5EL-NEXT:    ldc1 $f1, 0($sp)
6457 ; MIPS32R5EL-NEXT:    sub.d $f0, $f1, $f0
6458 ; MIPS32R5EL-NEXT:    cvt.s.d $f0, $f0
6459 ; MIPS32R5EL-NEXT:    ldi.b $w1, 0
6460 ; MIPS32R5EL-NEXT:    splati.w $w0, $w0[0]
6461 ; MIPS32R5EL-NEXT:    insert.w $w1[0], $6
6462 ; MIPS32R5EL-NEXT:    insert.w $w1[1], $7
6463 ; MIPS32R5EL-NEXT:    lw $1, 24($sp)
6464 ; MIPS32R5EL-NEXT:    insert.w $w1[2], $1
6465 ; MIPS32R5EL-NEXT:    lw $1, 28($sp)
6466 ; MIPS32R5EL-NEXT:    insert.w $w1[3], $1
6467 ; MIPS32R5EL-NEXT:    fadd.w $w0, $w0, $w1
6468 ; MIPS32R5EL-NEXT:    st.w $w0, 0($4)
6469 ; MIPS32R5EL-NEXT:    addiu $sp, $sp, 8
6470 ; MIPS32R5EL-NEXT:    jr $ra
6471 ; MIPS32R5EL-NEXT:    nop
6473 ; MIPS64R5EL-LABEL: mixed_32:
6474 ; MIPS64R5EL:       # %bb.0: # %entry
6475 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, -16
6476 ; MIPS64R5EL-NEXT:    .cfi_def_cfa_offset 16
6477 ; MIPS64R5EL-NEXT:    lui $1, %hi(%neg(%gp_rel(mixed_32)))
6478 ; MIPS64R5EL-NEXT:    daddu $1, $1, $25
6479 ; MIPS64R5EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6480 ; MIPS64R5EL-NEXT:    lui $2, 17200
6481 ; MIPS64R5EL-NEXT:    sw $2, 12($sp)
6482 ; MIPS64R5EL-NEXT:    sll $2, $6, 0
6483 ; MIPS64R5EL-NEXT:    sw $2, 8($sp)
6484 ; MIPS64R5EL-NEXT:    ld $1, %got_page(.LCPI41_0)($1)
6485 ; MIPS64R5EL-NEXT:    ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6486 ; MIPS64R5EL-NEXT:    ldc1 $f1, 8($sp)
6487 ; MIPS64R5EL-NEXT:    sub.d $f0, $f1, $f0
6488 ; MIPS64R5EL-NEXT:    ldi.b $w1, 0
6489 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $4
6490 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $5
6491 ; MIPS64R5EL-NEXT:    cvt.s.d $f0, $f0
6492 ; MIPS64R5EL-NEXT:    splati.w $w0, $w0[0]
6493 ; MIPS64R5EL-NEXT:    fadd.w $w0, $w0, $w1
6494 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
6495 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
6496 ; MIPS64R5EL-NEXT:    daddiu $sp, $sp, 16
6497 ; MIPS64R5EL-NEXT:    jr $ra
6498 ; MIPS64R5EL-NEXT:    nop
6499 entry:
6500   %0 = uitofp i32 %b to float
6501   %1 = insertelement <4 x float> undef, float %0, i32 0
6502   %2 = insertelement <4 x float> %1, float %0, i32 1
6503   %3 = insertelement <4 x float> %2, float %0, i32 2
6504   %4 = insertelement <4 x float> %3, float %0, i32 3
6505   %5 = fadd <4 x float> %4, %a
6506   ret <4 x float> %5
6510 ; This test is slightly more fragile than I'd like as the offset into the
6511 ; outgoing arguments area is dependant on the size of the stack frame for
6512 ; this function.
6514 define <4 x float> @cast(<4 x i32> %a) {
6515 ; MIPS32EB-LABEL: cast:
6516 ; MIPS32EB:       # %bb.0: # %entry
6517 ; MIPS32EB-NEXT:    addiu $sp, $sp, -32
6518 ; MIPS32EB-NEXT:    .cfi_def_cfa_offset 32
6519 ; MIPS32EB-NEXT:    lw $1, 52($sp)
6520 ; MIPS32EB-NEXT:    lui $2, 17200
6521 ; MIPS32EB-NEXT:    sw $2, 24($sp)
6522 ; MIPS32EB-NEXT:    sw $1, 28($sp)
6523 ; MIPS32EB-NEXT:    lw $1, 48($sp)
6524 ; MIPS32EB-NEXT:    sw $2, 16($sp)
6525 ; MIPS32EB-NEXT:    sw $1, 20($sp)
6526 ; MIPS32EB-NEXT:    lui $1, %hi($CPI42_0)
6527 ; MIPS32EB-NEXT:    sw $2, 8($sp)
6528 ; MIPS32EB-NEXT:    sw $7, 12($sp)
6529 ; MIPS32EB-NEXT:    ldc1 $f0, %lo($CPI42_0)($1)
6530 ; MIPS32EB-NEXT:    ldc1 $f2, 24($sp)
6531 ; MIPS32EB-NEXT:    sub.d $f2, $f2, $f0
6532 ; MIPS32EB-NEXT:    ldc1 $f4, 16($sp)
6533 ; MIPS32EB-NEXT:    sub.d $f4, $f4, $f0
6534 ; MIPS32EB-NEXT:    ldc1 $f6, 8($sp)
6535 ; MIPS32EB-NEXT:    sub.d $f6, $f6, $f0
6536 ; MIPS32EB-NEXT:    cvt.s.d $f6, $f6
6537 ; MIPS32EB-NEXT:    cvt.s.d $f4, $f4
6538 ; MIPS32EB-NEXT:    cvt.s.d $f2, $f2
6539 ; MIPS32EB-NEXT:    swc1 $f2, 12($4)
6540 ; MIPS32EB-NEXT:    swc1 $f4, 8($4)
6541 ; MIPS32EB-NEXT:    swc1 $f6, 4($4)
6542 ; MIPS32EB-NEXT:    sw $2, 0($sp)
6543 ; MIPS32EB-NEXT:    sw $6, 4($sp)
6544 ; MIPS32EB-NEXT:    ldc1 $f2, 0($sp)
6545 ; MIPS32EB-NEXT:    sub.d $f0, $f2, $f0
6546 ; MIPS32EB-NEXT:    cvt.s.d $f0, $f0
6547 ; MIPS32EB-NEXT:    swc1 $f0, 0($4)
6548 ; MIPS32EB-NEXT:    addiu $sp, $sp, 32
6549 ; MIPS32EB-NEXT:    jr $ra
6550 ; MIPS32EB-NEXT:    nop
6552 ; MIPS64EB-LABEL: cast:
6553 ; MIPS64EB:       # %bb.0: # %entry
6554 ; MIPS64EB-NEXT:    daddiu $sp, $sp, -32
6555 ; MIPS64EB-NEXT:    .cfi_def_cfa_offset 32
6556 ; MIPS64EB-NEXT:    lui $1, %hi(%neg(%gp_rel(cast)))
6557 ; MIPS64EB-NEXT:    daddu $1, $1, $25
6558 ; MIPS64EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(cast)))
6559 ; MIPS64EB-NEXT:    sll $2, $4, 0
6560 ; MIPS64EB-NEXT:    lui $3, 17200
6561 ; MIPS64EB-NEXT:    sw $3, 0($sp)
6562 ; MIPS64EB-NEXT:    sw $2, 4($sp)
6563 ; MIPS64EB-NEXT:    sll $2, $5, 0
6564 ; MIPS64EB-NEXT:    sw $3, 8($sp)
6565 ; MIPS64EB-NEXT:    sw $2, 12($sp)
6566 ; MIPS64EB-NEXT:    ld $1, %got_page(.LCPI42_0)($1)
6567 ; MIPS64EB-NEXT:    ldc1 $f0, %got_ofst(.LCPI42_0)($1)
6568 ; MIPS64EB-NEXT:    ldc1 $f1, 0($sp)
6569 ; MIPS64EB-NEXT:    sub.d $f1, $f1, $f0
6570 ; MIPS64EB-NEXT:    cvt.s.d $f1, $f1
6571 ; MIPS64EB-NEXT:    ldc1 $f2, 8($sp)
6572 ; MIPS64EB-NEXT:    sub.d $f2, $f2, $f0
6573 ; MIPS64EB-NEXT:    mfc1 $1, $f1
6574 ; MIPS64EB-NEXT:    dsrl $2, $4, 32
6575 ; MIPS64EB-NEXT:    sll $2, $2, 0
6576 ; MIPS64EB-NEXT:    sw $3, 16($sp)
6577 ; MIPS64EB-NEXT:    sw $2, 20($sp)
6578 ; MIPS64EB-NEXT:    sw $3, 24($sp)
6579 ; MIPS64EB-NEXT:    dsll $1, $1, 32
6580 ; MIPS64EB-NEXT:    cvt.s.d $f1, $f2
6581 ; MIPS64EB-NEXT:    dsrl $2, $5, 32
6582 ; MIPS64EB-NEXT:    sll $2, $2, 0
6583 ; MIPS64EB-NEXT:    sw $2, 28($sp)
6584 ; MIPS64EB-NEXT:    mfc1 $2, $f1
6585 ; MIPS64EB-NEXT:    dsll $3, $2, 32
6586 ; MIPS64EB-NEXT:    dsrl $1, $1, 32
6587 ; MIPS64EB-NEXT:    ldc1 $f1, 16($sp)
6588 ; MIPS64EB-NEXT:    sub.d $f1, $f1, $f0
6589 ; MIPS64EB-NEXT:    cvt.s.d $f1, $f1
6590 ; MIPS64EB-NEXT:    mfc1 $2, $f1
6591 ; MIPS64EB-NEXT:    dsll $2, $2, 32
6592 ; MIPS64EB-NEXT:    or $2, $1, $2
6593 ; MIPS64EB-NEXT:    dsrl $1, $3, 32
6594 ; MIPS64EB-NEXT:    ldc1 $f1, 24($sp)
6595 ; MIPS64EB-NEXT:    sub.d $f0, $f1, $f0
6596 ; MIPS64EB-NEXT:    cvt.s.d $f0, $f0
6597 ; MIPS64EB-NEXT:    mfc1 $3, $f0
6598 ; MIPS64EB-NEXT:    dsll $3, $3, 32
6599 ; MIPS64EB-NEXT:    or $3, $1, $3
6600 ; MIPS64EB-NEXT:    daddiu $sp, $sp, 32
6601 ; MIPS64EB-NEXT:    jr $ra
6602 ; MIPS64EB-NEXT:    nop
6604 ; MIPS32R5-LABEL: cast:
6605 ; MIPS32R5:       # %bb.0: # %entry
6606 ; MIPS32R5-NEXT:    ldi.b $w0, 0
6607 ; MIPS32R5-NEXT:    insert.w $w0[0], $6
6608 ; MIPS32R5-NEXT:    insert.w $w0[1], $7
6609 ; MIPS32R5-NEXT:    lw $1, 16($sp)
6610 ; MIPS32R5-NEXT:    insert.w $w0[2], $1
6611 ; MIPS32R5-NEXT:    lw $1, 20($sp)
6612 ; MIPS32R5-NEXT:    insert.w $w0[3], $1
6613 ; MIPS32R5-NEXT:    ffint_u.w $w0, $w0
6614 ; MIPS32R5-NEXT:    st.w $w0, 0($4)
6615 ; MIPS32R5-NEXT:    jr $ra
6616 ; MIPS32R5-NEXT:    nop
6618 ; MIPS64R5EB-LABEL: cast:
6619 ; MIPS64R5EB:       # %bb.0: # %entry
6620 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
6621 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
6622 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
6623 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
6624 ; MIPS64R5EB-NEXT:    ffint_u.w $w0, $w0
6625 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
6626 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
6627 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
6628 ; MIPS64R5EB-NEXT:    jr $ra
6629 ; MIPS64R5EB-NEXT:    nop
6631 ; MIPS32EL-LABEL: cast:
6632 ; MIPS32EL:       # %bb.0: # %entry
6633 ; MIPS32EL-NEXT:    addiu $sp, $sp, -32
6634 ; MIPS32EL-NEXT:    .cfi_def_cfa_offset 32
6635 ; MIPS32EL-NEXT:    lw $1, 52($sp)
6636 ; MIPS32EL-NEXT:    lui $2, 17200
6637 ; MIPS32EL-NEXT:    sw $2, 28($sp)
6638 ; MIPS32EL-NEXT:    sw $1, 24($sp)
6639 ; MIPS32EL-NEXT:    lw $1, 48($sp)
6640 ; MIPS32EL-NEXT:    sw $2, 20($sp)
6641 ; MIPS32EL-NEXT:    sw $1, 16($sp)
6642 ; MIPS32EL-NEXT:    lui $1, %hi($CPI42_0)
6643 ; MIPS32EL-NEXT:    sw $2, 12($sp)
6644 ; MIPS32EL-NEXT:    sw $7, 8($sp)
6645 ; MIPS32EL-NEXT:    ldc1 $f0, %lo($CPI42_0)($1)
6646 ; MIPS32EL-NEXT:    ldc1 $f2, 24($sp)
6647 ; MIPS32EL-NEXT:    sub.d $f2, $f2, $f0
6648 ; MIPS32EL-NEXT:    ldc1 $f4, 16($sp)
6649 ; MIPS32EL-NEXT:    sub.d $f4, $f4, $f0
6650 ; MIPS32EL-NEXT:    ldc1 $f6, 8($sp)
6651 ; MIPS32EL-NEXT:    sub.d $f6, $f6, $f0
6652 ; MIPS32EL-NEXT:    cvt.s.d $f6, $f6
6653 ; MIPS32EL-NEXT:    cvt.s.d $f4, $f4
6654 ; MIPS32EL-NEXT:    cvt.s.d $f2, $f2
6655 ; MIPS32EL-NEXT:    swc1 $f2, 12($4)
6656 ; MIPS32EL-NEXT:    swc1 $f4, 8($4)
6657 ; MIPS32EL-NEXT:    swc1 $f6, 4($4)
6658 ; MIPS32EL-NEXT:    sw $2, 4($sp)
6659 ; MIPS32EL-NEXT:    sw $6, 0($sp)
6660 ; MIPS32EL-NEXT:    ldc1 $f2, 0($sp)
6661 ; MIPS32EL-NEXT:    sub.d $f0, $f2, $f0
6662 ; MIPS32EL-NEXT:    cvt.s.d $f0, $f0
6663 ; MIPS32EL-NEXT:    swc1 $f0, 0($4)
6664 ; MIPS32EL-NEXT:    addiu $sp, $sp, 32
6665 ; MIPS32EL-NEXT:    jr $ra
6666 ; MIPS32EL-NEXT:    nop
6668 ; MIPS64EL-LABEL: cast:
6669 ; MIPS64EL:       # %bb.0: # %entry
6670 ; MIPS64EL-NEXT:    daddiu $sp, $sp, -32
6671 ; MIPS64EL-NEXT:    .cfi_def_cfa_offset 32
6672 ; MIPS64EL-NEXT:    lui $1, %hi(%neg(%gp_rel(cast)))
6673 ; MIPS64EL-NEXT:    daddu $1, $1, $25
6674 ; MIPS64EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(cast)))
6675 ; MIPS64EL-NEXT:    sll $2, $4, 0
6676 ; MIPS64EL-NEXT:    lui $3, 17200
6677 ; MIPS64EL-NEXT:    sw $3, 4($sp)
6678 ; MIPS64EL-NEXT:    sw $2, 0($sp)
6679 ; MIPS64EL-NEXT:    sll $2, $5, 0
6680 ; MIPS64EL-NEXT:    sw $3, 12($sp)
6681 ; MIPS64EL-NEXT:    sw $2, 8($sp)
6682 ; MIPS64EL-NEXT:    ld $1, %got_page(.LCPI42_0)($1)
6683 ; MIPS64EL-NEXT:    ldc1 $f0, %got_ofst(.LCPI42_0)($1)
6684 ; MIPS64EL-NEXT:    ldc1 $f1, 0($sp)
6685 ; MIPS64EL-NEXT:    sub.d $f1, $f1, $f0
6686 ; MIPS64EL-NEXT:    cvt.s.d $f1, $f1
6687 ; MIPS64EL-NEXT:    ldc1 $f2, 8($sp)
6688 ; MIPS64EL-NEXT:    sub.d $f2, $f2, $f0
6689 ; MIPS64EL-NEXT:    mfc1 $1, $f1
6690 ; MIPS64EL-NEXT:    dsrl $2, $4, 32
6691 ; MIPS64EL-NEXT:    sll $2, $2, 0
6692 ; MIPS64EL-NEXT:    sw $3, 20($sp)
6693 ; MIPS64EL-NEXT:    sw $2, 16($sp)
6694 ; MIPS64EL-NEXT:    sw $3, 28($sp)
6695 ; MIPS64EL-NEXT:    dsll $1, $1, 32
6696 ; MIPS64EL-NEXT:    cvt.s.d $f1, $f2
6697 ; MIPS64EL-NEXT:    dsrl $2, $5, 32
6698 ; MIPS64EL-NEXT:    sll $2, $2, 0
6699 ; MIPS64EL-NEXT:    sw $2, 24($sp)
6700 ; MIPS64EL-NEXT:    mfc1 $2, $f1
6701 ; MIPS64EL-NEXT:    dsll $3, $2, 32
6702 ; MIPS64EL-NEXT:    dsrl $1, $1, 32
6703 ; MIPS64EL-NEXT:    ldc1 $f1, 16($sp)
6704 ; MIPS64EL-NEXT:    sub.d $f1, $f1, $f0
6705 ; MIPS64EL-NEXT:    cvt.s.d $f1, $f1
6706 ; MIPS64EL-NEXT:    mfc1 $2, $f1
6707 ; MIPS64EL-NEXT:    dsll $2, $2, 32
6708 ; MIPS64EL-NEXT:    or $2, $1, $2
6709 ; MIPS64EL-NEXT:    dsrl $1, $3, 32
6710 ; MIPS64EL-NEXT:    ldc1 $f1, 24($sp)
6711 ; MIPS64EL-NEXT:    sub.d $f0, $f1, $f0
6712 ; MIPS64EL-NEXT:    cvt.s.d $f0, $f0
6713 ; MIPS64EL-NEXT:    mfc1 $3, $f0
6714 ; MIPS64EL-NEXT:    dsll $3, $3, 32
6715 ; MIPS64EL-NEXT:    or $3, $1, $3
6716 ; MIPS64EL-NEXT:    daddiu $sp, $sp, 32
6717 ; MIPS64EL-NEXT:    jr $ra
6718 ; MIPS64EL-NEXT:    nop
6720 ; MIPS64R5EL-LABEL: cast:
6721 ; MIPS64R5EL:       # %bb.0: # %entry
6722 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
6723 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
6724 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
6725 ; MIPS64R5EL-NEXT:    ffint_u.w $w0, $w0
6726 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
6727 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
6728 ; MIPS64R5EL-NEXT:    jr $ra
6729 ; MIPS64R5EL-NEXT:    nop
6730 entry:
6731   %0 = uitofp <4 x i32> %a to <4 x float>
6732   ret <4 x float> %0
6735 define <4 x float> @select(<4 x i32> %cond, <4 x float> %arg1, <4 x float> %arg2) {
6736 ; MIPS32-LABEL: select:
6737 ; MIPS32:       # %bb.0: # %entry
6738 ; MIPS32-NEXT:    andi $1, $7, 1
6739 ; MIPS32-NEXT:    lw $2, 16($sp)
6740 ; MIPS32-NEXT:    andi $2, $2, 1
6741 ; MIPS32-NEXT:    addiu $3, $sp, 44
6742 ; MIPS32-NEXT:    addiu $5, $sp, 28
6743 ; MIPS32-NEXT:    addiu $7, $sp, 48
6744 ; MIPS32-NEXT:    addiu $8, $sp, 32
6745 ; MIPS32-NEXT:    movn $7, $8, $2
6746 ; MIPS32-NEXT:    movn $3, $5, $1
6747 ; MIPS32-NEXT:    andi $1, $6, 1
6748 ; MIPS32-NEXT:    addiu $2, $sp, 40
6749 ; MIPS32-NEXT:    addiu $5, $sp, 24
6750 ; MIPS32-NEXT:    movn $2, $5, $1
6751 ; MIPS32-NEXT:    lw $1, 20($sp)
6752 ; MIPS32-NEXT:    lwc1 $f0, 0($2)
6753 ; MIPS32-NEXT:    lwc1 $f1, 0($3)
6754 ; MIPS32-NEXT:    lwc1 $f2, 0($7)
6755 ; MIPS32-NEXT:    andi $1, $1, 1
6756 ; MIPS32-NEXT:    addiu $2, $sp, 52
6757 ; MIPS32-NEXT:    addiu $3, $sp, 36
6758 ; MIPS32-NEXT:    movn $2, $3, $1
6759 ; MIPS32-NEXT:    lwc1 $f3, 0($2)
6760 ; MIPS32-NEXT:    swc1 $f3, 12($4)
6761 ; MIPS32-NEXT:    swc1 $f2, 8($4)
6762 ; MIPS32-NEXT:    swc1 $f1, 4($4)
6763 ; MIPS32-NEXT:    swc1 $f0, 0($4)
6764 ; MIPS32-NEXT:    jr $ra
6765 ; MIPS32-NEXT:    nop
6767 ; MIPS64-LABEL: select:
6768 ; MIPS64:       # %bb.0: # %entry
6769 ; MIPS64-NEXT:    sll $1, $8, 0
6770 ; MIPS64-NEXT:    mtc1 $1, $f0
6771 ; MIPS64-NEXT:    sll $1, $4, 0
6772 ; MIPS64-NEXT:    andi $1, $1, 1
6773 ; MIPS64-NEXT:    sll $2, $6, 0
6774 ; MIPS64-NEXT:    mtc1 $2, $f1
6775 ; MIPS64-NEXT:    movn.s $f0, $f1, $1
6776 ; MIPS64-NEXT:    dsrl $1, $8, 32
6777 ; MIPS64-NEXT:    dsrl $2, $4, 32
6778 ; MIPS64-NEXT:    sll $1, $1, 0
6779 ; MIPS64-NEXT:    mfc1 $3, $f0
6780 ; MIPS64-NEXT:    sll $4, $9, 0
6781 ; MIPS64-NEXT:    mtc1 $1, $f0
6782 ; MIPS64-NEXT:    sll $1, $2, 0
6783 ; MIPS64-NEXT:    andi $1, $1, 1
6784 ; MIPS64-NEXT:    dsrl $2, $6, 32
6785 ; MIPS64-NEXT:    sll $2, $2, 0
6786 ; MIPS64-NEXT:    mtc1 $2, $f1
6787 ; MIPS64-NEXT:    movn.s $f0, $f1, $1
6788 ; MIPS64-NEXT:    dsll $1, $3, 32
6789 ; MIPS64-NEXT:    mtc1 $4, $f1
6790 ; MIPS64-NEXT:    sll $2, $5, 0
6791 ; MIPS64-NEXT:    andi $2, $2, 1
6792 ; MIPS64-NEXT:    sll $3, $7, 0
6793 ; MIPS64-NEXT:    mtc1 $3, $f2
6794 ; MIPS64-NEXT:    movn.s $f1, $f2, $2
6795 ; MIPS64-NEXT:    mfc1 $2, $f1
6796 ; MIPS64-NEXT:    dsll $3, $2, 32
6797 ; MIPS64-NEXT:    dsrl $1, $1, 32
6798 ; MIPS64-NEXT:    mfc1 $2, $f0
6799 ; MIPS64-NEXT:    dsrl $4, $5, 32
6800 ; MIPS64-NEXT:    dsrl $5, $9, 32
6801 ; MIPS64-NEXT:    dsll $2, $2, 32
6802 ; MIPS64-NEXT:    sll $5, $5, 0
6803 ; MIPS64-NEXT:    or $2, $1, $2
6804 ; MIPS64-NEXT:    dsrl $1, $3, 32
6805 ; MIPS64-NEXT:    mtc1 $5, $f0
6806 ; MIPS64-NEXT:    sll $3, $4, 0
6807 ; MIPS64-NEXT:    andi $3, $3, 1
6808 ; MIPS64-NEXT:    dsrl $4, $7, 32
6809 ; MIPS64-NEXT:    sll $4, $4, 0
6810 ; MIPS64-NEXT:    mtc1 $4, $f1
6811 ; MIPS64-NEXT:    movn.s $f0, $f1, $3
6812 ; MIPS64-NEXT:    mfc1 $3, $f0
6813 ; MIPS64-NEXT:    dsll $3, $3, 32
6814 ; MIPS64-NEXT:    or $3, $1, $3
6815 ; MIPS64-NEXT:    jr $ra
6816 ; MIPS64-NEXT:    nop
6818 ; MIPS32R5-LABEL: select:
6819 ; MIPS32R5:       # %bb.0: # %entry
6820 ; MIPS32R5-NEXT:    ldi.b $w0, 0
6821 ; MIPS32R5-NEXT:    lw $1, 44($sp)
6822 ; MIPS32R5-NEXT:    lw $2, 40($sp)
6823 ; MIPS32R5-NEXT:    move.v $w1, $w0
6824 ; MIPS32R5-NEXT:    insert.w $w1[0], $2
6825 ; MIPS32R5-NEXT:    insert.w $w1[1], $1
6826 ; MIPS32R5-NEXT:    lw $1, 48($sp)
6827 ; MIPS32R5-NEXT:    insert.w $w1[2], $1
6828 ; MIPS32R5-NEXT:    lw $1, 28($sp)
6829 ; MIPS32R5-NEXT:    lw $2, 52($sp)
6830 ; MIPS32R5-NEXT:    lw $3, 24($sp)
6831 ; MIPS32R5-NEXT:    move.v $w2, $w0
6832 ; MIPS32R5-NEXT:    insert.w $w2[0], $3
6833 ; MIPS32R5-NEXT:    insert.w $w0[0], $6
6834 ; MIPS32R5-NEXT:    insert.w $w1[3], $2
6835 ; MIPS32R5-NEXT:    insert.w $w2[1], $1
6836 ; MIPS32R5-NEXT:    lw $1, 32($sp)
6837 ; MIPS32R5-NEXT:    insert.w $w2[2], $1
6838 ; MIPS32R5-NEXT:    lw $1, 36($sp)
6839 ; MIPS32R5-NEXT:    insert.w $w2[3], $1
6840 ; MIPS32R5-NEXT:    insert.w $w0[1], $7
6841 ; MIPS32R5-NEXT:    lw $1, 16($sp)
6842 ; MIPS32R5-NEXT:    insert.w $w0[2], $1
6843 ; MIPS32R5-NEXT:    lw $1, 20($sp)
6844 ; MIPS32R5-NEXT:    insert.w $w0[3], $1
6845 ; MIPS32R5-NEXT:    slli.w $w0, $w0, 31
6846 ; MIPS32R5-NEXT:    srai.w $w0, $w0, 31
6847 ; MIPS32R5-NEXT:    bsel.v $w0, $w1, $w2
6848 ; MIPS32R5-NEXT:    st.w $w0, 0($4)
6849 ; MIPS32R5-NEXT:    jr $ra
6850 ; MIPS32R5-NEXT:    nop
6852 ; MIPS64R5EB-LABEL: select:
6853 ; MIPS64R5EB:       # %bb.0: # %entry
6854 ; MIPS64R5EB-NEXT:    ldi.b $w0, 0
6855 ; MIPS64R5EB-NEXT:    move.v $w1, $w0
6856 ; MIPS64R5EB-NEXT:    insert.d $w1[0], $8
6857 ; MIPS64R5EB-NEXT:    insert.d $w1[1], $9
6858 ; MIPS64R5EB-NEXT:    shf.w $w1, $w1, 177
6859 ; MIPS64R5EB-NEXT:    move.v $w2, $w0
6860 ; MIPS64R5EB-NEXT:    insert.d $w2[0], $6
6861 ; MIPS64R5EB-NEXT:    insert.d $w2[1], $7
6862 ; MIPS64R5EB-NEXT:    shf.w $w2, $w2, 177
6863 ; MIPS64R5EB-NEXT:    insert.d $w0[0], $4
6864 ; MIPS64R5EB-NEXT:    insert.d $w0[1], $5
6865 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
6866 ; MIPS64R5EB-NEXT:    slli.w $w0, $w0, 31
6867 ; MIPS64R5EB-NEXT:    srai.w $w0, $w0, 31
6868 ; MIPS64R5EB-NEXT:    bsel.v $w0, $w1, $w2
6869 ; MIPS64R5EB-NEXT:    shf.w $w0, $w0, 177
6870 ; MIPS64R5EB-NEXT:    copy_s.d $2, $w0[0]
6871 ; MIPS64R5EB-NEXT:    copy_s.d $3, $w0[1]
6872 ; MIPS64R5EB-NEXT:    jr $ra
6873 ; MIPS64R5EB-NEXT:    nop
6875 ; MIPS64R5EL-LABEL: select:
6876 ; MIPS64R5EL:       # %bb.0: # %entry
6877 ; MIPS64R5EL-NEXT:    ldi.b $w0, 0
6878 ; MIPS64R5EL-NEXT:    move.v $w1, $w0
6879 ; MIPS64R5EL-NEXT:    insert.d $w1[0], $8
6880 ; MIPS64R5EL-NEXT:    insert.d $w1[1], $9
6881 ; MIPS64R5EL-NEXT:    move.v $w2, $w0
6882 ; MIPS64R5EL-NEXT:    insert.d $w2[0], $6
6883 ; MIPS64R5EL-NEXT:    insert.d $w2[1], $7
6884 ; MIPS64R5EL-NEXT:    insert.d $w0[0], $4
6885 ; MIPS64R5EL-NEXT:    insert.d $w0[1], $5
6886 ; MIPS64R5EL-NEXT:    slli.w $w0, $w0, 31
6887 ; MIPS64R5EL-NEXT:    srai.w $w0, $w0, 31
6888 ; MIPS64R5EL-NEXT:    bsel.v $w0, $w1, $w2
6889 ; MIPS64R5EL-NEXT:    copy_s.d $2, $w0[0]
6890 ; MIPS64R5EL-NEXT:    copy_s.d $3, $w0[1]
6891 ; MIPS64R5EL-NEXT:    jr $ra
6892 ; MIPS64R5EL-NEXT:    nop
6893 entry:
6894   %cond.t = trunc <4 x i32> %cond to <4 x i1>
6895   %res = select <4 x i1> %cond.t, <4 x float> %arg1, <4 x float> %arg2
6896   ret <4 x float> %res