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