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