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