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