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