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