blob: 8cec16683ca7c470d82900e50d14a50f45780438 [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;
2048; MIPS64R5-LABEL: i32_2:
2049; MIPS64R5: # %bb.0:
2050; MIPS64R5-NEXT: daddiu $sp, $sp, -32
2051; MIPS64R5-NEXT: .cfi_def_cfa_offset 32
2052; MIPS64R5-NEXT: sd $5, 16($sp)
2053; MIPS64R5-NEXT: sd $4, 24($sp)
2054; MIPS64R5-NEXT: ldi.b $w0, 0
2055; MIPS64R5-NEXT: lw $1, 20($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002056; MIPS64R5-NEXT: move.v $w1, $w0
Nirav Dave07acc992018-10-10 14:15:52 +00002057; MIPS64R5-NEXT: insert.d $w1[0], $5
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002058; MIPS64R5-NEXT: insert.d $w1[1], $1
Nirav Dave07acc992018-10-10 14:15:52 +00002059; MIPS64R5-NEXT: insert.d $w0[0], $4
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002060; MIPS64R5-NEXT: lw $1, 28($sp)
2061; MIPS64R5-NEXT: insert.d $w0[1], $1
2062; MIPS64R5-NEXT: addv.d $w0, $w0, $w1
2063; MIPS64R5-NEXT: copy_s.d $1, $w0[0]
2064; MIPS64R5-NEXT: copy_s.d $2, $w0[1]
2065; MIPS64R5-NEXT: sw $2, 12($sp)
2066; MIPS64R5-NEXT: sw $1, 8($sp)
2067; MIPS64R5-NEXT: ld $2, 8($sp)
2068; MIPS64R5-NEXT: daddiu $sp, $sp, 32
2069; MIPS64R5-NEXT: jr $ra
2070; MIPS64R5-NEXT: nop
2071;
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
Simon Dardis212cccb2017-06-09 14:37:08 +00002096 %1 = add <2 x i32> %a, %b
Simon Dardis212cccb2017-06-09 14:37:08 +00002097 ret <2 x i32> %1
2098}
2099
2100define <4 x i32> @i32_4(<4 x i32> %a, <4 x i32> %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002101; MIPS32-LABEL: i32_4:
2102; MIPS32: # %bb.0:
2103; MIPS32-NEXT: lw $1, 20($sp)
2104; MIPS32-NEXT: lw $2, 16($sp)
2105; MIPS32-NEXT: addu $2, $4, $2
2106; MIPS32-NEXT: addu $3, $5, $1
2107; MIPS32-NEXT: lw $1, 24($sp)
2108; MIPS32-NEXT: addu $4, $6, $1
2109; MIPS32-NEXT: lw $1, 28($sp)
2110; MIPS32-NEXT: addu $5, $7, $1
2111; MIPS32-NEXT: jr $ra
2112; MIPS32-NEXT: nop
2113;
2114; MIPS64-LABEL: i32_4:
2115; MIPS64: # %bb.0:
2116; MIPS64-NEXT: sll $1, $6, 0
2117; MIPS64-NEXT: sll $2, $4, 0
2118; MIPS64-NEXT: addu $1, $2, $1
2119; MIPS64-NEXT: dsll $1, $1, 32
2120; MIPS64-NEXT: sll $2, $7, 0
2121; MIPS64-NEXT: sll $3, $5, 0
2122; MIPS64-NEXT: addu $2, $3, $2
2123; MIPS64-NEXT: dsrl $3, $6, 32
2124; MIPS64-NEXT: dsll $6, $2, 32
2125; MIPS64-NEXT: dsrl $1, $1, 32
2126; MIPS64-NEXT: sll $2, $3, 0
2127; MIPS64-NEXT: dsrl $3, $4, 32
2128; MIPS64-NEXT: sll $3, $3, 0
2129; MIPS64-NEXT: addu $2, $3, $2
2130; MIPS64-NEXT: dsll $2, $2, 32
2131; MIPS64-NEXT: dsrl $3, $7, 32
2132; MIPS64-NEXT: or $2, $1, $2
2133; MIPS64-NEXT: dsrl $1, $6, 32
2134; MIPS64-NEXT: sll $3, $3, 0
2135; MIPS64-NEXT: dsrl $4, $5, 32
2136; MIPS64-NEXT: sll $4, $4, 0
2137; MIPS64-NEXT: addu $3, $4, $3
2138; MIPS64-NEXT: dsll $3, $3, 32
2139; MIPS64-NEXT: or $3, $1, $3
2140; MIPS64-NEXT: jr $ra
2141; MIPS64-NEXT: nop
2142;
2143; MIPS32R5-LABEL: i32_4:
2144; MIPS32R5: # %bb.0:
2145; MIPS32R5-NEXT: ldi.b $w0, 0
2146; MIPS32R5-NEXT: lw $1, 20($sp)
2147; MIPS32R5-NEXT: lw $2, 16($sp)
2148; MIPS32R5-NEXT: move.v $w1, $w0
2149; MIPS32R5-NEXT: insert.w $w1[0], $2
2150; MIPS32R5-NEXT: insert.w $w1[1], $1
2151; MIPS32R5-NEXT: lw $1, 24($sp)
2152; MIPS32R5-NEXT: insert.w $w1[2], $1
2153; MIPS32R5-NEXT: lw $1, 28($sp)
2154; MIPS32R5-NEXT: insert.w $w1[3], $1
2155; MIPS32R5-NEXT: insert.w $w0[0], $4
2156; MIPS32R5-NEXT: insert.w $w0[1], $5
2157; MIPS32R5-NEXT: insert.w $w0[2], $6
2158; MIPS32R5-NEXT: insert.w $w0[3], $7
2159; MIPS32R5-NEXT: addv.w $w0, $w0, $w1
2160; MIPS32R5-NEXT: copy_s.w $2, $w0[0]
2161; MIPS32R5-NEXT: copy_s.w $3, $w0[1]
2162; MIPS32R5-NEXT: copy_s.w $4, $w0[2]
2163; MIPS32R5-NEXT: copy_s.w $5, $w0[3]
2164; MIPS32R5-NEXT: jr $ra
2165; MIPS32R5-NEXT: nop
2166;
2167; MIPS64R5EB-LABEL: i32_4:
2168; MIPS64R5EB: # %bb.0:
2169; MIPS64R5EB-NEXT: ldi.b $w0, 0
2170; MIPS64R5EB-NEXT: move.v $w1, $w0
2171; MIPS64R5EB-NEXT: insert.d $w1[0], $6
2172; MIPS64R5EB-NEXT: insert.d $w1[1], $7
2173; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177
2174; MIPS64R5EB-NEXT: insert.d $w0[0], $4
2175; MIPS64R5EB-NEXT: insert.d $w0[1], $5
2176; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
2177; MIPS64R5EB-NEXT: addv.w $w0, $w0, $w1
2178; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
2179; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0]
2180; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1]
2181; MIPS64R5EB-NEXT: jr $ra
2182; MIPS64R5EB-NEXT: nop
2183;
2184; MIPS64R5EL-LABEL: i32_4:
2185; MIPS64R5EL: # %bb.0:
2186; MIPS64R5EL-NEXT: ldi.b $w0, 0
2187; MIPS64R5EL-NEXT: move.v $w1, $w0
2188; MIPS64R5EL-NEXT: insert.d $w1[0], $6
2189; MIPS64R5EL-NEXT: insert.d $w1[1], $7
2190; MIPS64R5EL-NEXT: insert.d $w0[0], $4
2191; MIPS64R5EL-NEXT: insert.d $w0[1], $5
2192; MIPS64R5EL-NEXT: addv.w $w0, $w0, $w1
2193; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0]
2194; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1]
2195; MIPS64R5EL-NEXT: jr $ra
2196; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002197 %1 = add <4 x i32> %a, %b
2198 ret <4 x i32> %1
2199}
2200
2201define <2 x i64> @i64_2(<2 x i64> %a, <2 x i64> %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002202; MIPS32EB-LABEL: i64_2:
2203; MIPS32EB: # %bb.0:
2204; MIPS32EB-NEXT: lw $1, 16($sp)
2205; MIPS32EB-NEXT: addu $1, $4, $1
2206; MIPS32EB-NEXT: lw $2, 20($sp)
2207; MIPS32EB-NEXT: addu $3, $5, $2
2208; MIPS32EB-NEXT: sltu $2, $3, $5
2209; MIPS32EB-NEXT: lw $4, 24($sp)
2210; MIPS32EB-NEXT: addu $2, $1, $2
2211; MIPS32EB-NEXT: addu $1, $6, $4
2212; MIPS32EB-NEXT: lw $4, 28($sp)
2213; MIPS32EB-NEXT: addu $5, $7, $4
2214; MIPS32EB-NEXT: sltu $4, $5, $7
2215; MIPS32EB-NEXT: addu $4, $1, $4
2216; MIPS32EB-NEXT: jr $ra
2217; MIPS32EB-NEXT: nop
2218;
2219; MIPS64-LABEL: i64_2:
2220; MIPS64: # %bb.0:
2221; MIPS64-NEXT: daddu $2, $4, $6
2222; MIPS64-NEXT: daddu $3, $5, $7
2223; MIPS64-NEXT: jr $ra
2224; MIPS64-NEXT: nop
2225;
2226; MIPS32R5EB-LABEL: i64_2:
2227; MIPS32R5EB: # %bb.0:
2228; MIPS32R5EB-NEXT: ldi.b $w0, 0
2229; MIPS32R5EB-NEXT: lw $1, 20($sp)
2230; MIPS32R5EB-NEXT: lw $2, 16($sp)
2231; MIPS32R5EB-NEXT: move.v $w1, $w0
2232; MIPS32R5EB-NEXT: insert.w $w1[0], $2
2233; MIPS32R5EB-NEXT: insert.w $w1[1], $1
2234; MIPS32R5EB-NEXT: lw $1, 24($sp)
2235; MIPS32R5EB-NEXT: insert.w $w0[0], $4
2236; MIPS32R5EB-NEXT: insert.w $w1[2], $1
2237; MIPS32R5EB-NEXT: lw $1, 28($sp)
2238; MIPS32R5EB-NEXT: insert.w $w1[3], $1
2239; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177
2240; MIPS32R5EB-NEXT: insert.w $w0[1], $5
2241; MIPS32R5EB-NEXT: insert.w $w0[2], $6
2242; MIPS32R5EB-NEXT: insert.w $w0[3], $7
2243; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177
2244; MIPS32R5EB-NEXT: addv.d $w0, $w0, $w1
2245; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177
2246; MIPS32R5EB-NEXT: copy_s.w $2, $w0[0]
2247; MIPS32R5EB-NEXT: copy_s.w $3, $w0[1]
2248; MIPS32R5EB-NEXT: copy_s.w $4, $w0[2]
2249; MIPS32R5EB-NEXT: copy_s.w $5, $w0[3]
2250; MIPS32R5EB-NEXT: jr $ra
2251; MIPS32R5EB-NEXT: nop
2252;
2253; MIPS64R5-LABEL: i64_2:
2254; MIPS64R5: # %bb.0:
2255; MIPS64R5-NEXT: ldi.b $w0, 0
2256; MIPS64R5-NEXT: move.v $w1, $w0
2257; MIPS64R5-NEXT: insert.d $w1[0], $6
2258; MIPS64R5-NEXT: insert.d $w1[1], $7
2259; MIPS64R5-NEXT: insert.d $w0[0], $4
2260; MIPS64R5-NEXT: insert.d $w0[1], $5
2261; MIPS64R5-NEXT: addv.d $w0, $w0, $w1
2262; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
2263; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
2264; MIPS64R5-NEXT: jr $ra
2265; MIPS64R5-NEXT: nop
2266;
2267; MIPS32EL-LABEL: i64_2:
2268; MIPS32EL: # %bb.0:
2269; MIPS32EL-NEXT: lw $1, 20($sp)
2270; MIPS32EL-NEXT: addu $1, $5, $1
2271; MIPS32EL-NEXT: lw $2, 16($sp)
2272; MIPS32EL-NEXT: addu $2, $4, $2
2273; MIPS32EL-NEXT: sltu $3, $2, $4
2274; MIPS32EL-NEXT: lw $4, 28($sp)
2275; MIPS32EL-NEXT: addu $3, $1, $3
2276; MIPS32EL-NEXT: addu $1, $7, $4
2277; MIPS32EL-NEXT: lw $4, 24($sp)
2278; MIPS32EL-NEXT: addu $4, $6, $4
2279; MIPS32EL-NEXT: sltu $5, $4, $6
2280; MIPS32EL-NEXT: addu $5, $1, $5
2281; MIPS32EL-NEXT: jr $ra
2282; MIPS32EL-NEXT: nop
2283;
2284; MIPS32R5EL-LABEL: i64_2:
2285; MIPS32R5EL: # %bb.0:
2286; MIPS32R5EL-NEXT: ldi.b $w0, 0
2287; MIPS32R5EL-NEXT: lw $1, 20($sp)
2288; MIPS32R5EL-NEXT: lw $2, 16($sp)
2289; MIPS32R5EL-NEXT: move.v $w1, $w0
2290; MIPS32R5EL-NEXT: insert.w $w1[0], $2
2291; MIPS32R5EL-NEXT: insert.w $w1[1], $1
2292; MIPS32R5EL-NEXT: lw $1, 24($sp)
2293; MIPS32R5EL-NEXT: insert.w $w1[2], $1
2294; MIPS32R5EL-NEXT: lw $1, 28($sp)
2295; MIPS32R5EL-NEXT: insert.w $w1[3], $1
2296; MIPS32R5EL-NEXT: insert.w $w0[0], $4
2297; MIPS32R5EL-NEXT: insert.w $w0[1], $5
2298; MIPS32R5EL-NEXT: insert.w $w0[2], $6
2299; MIPS32R5EL-NEXT: insert.w $w0[3], $7
2300; MIPS32R5EL-NEXT: addv.d $w0, $w0, $w1
2301; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0]
2302; MIPS32R5EL-NEXT: copy_s.w $3, $w0[1]
2303; MIPS32R5EL-NEXT: copy_s.w $4, $w0[2]
2304; MIPS32R5EL-NEXT: copy_s.w $5, $w0[3]
2305; MIPS32R5EL-NEXT: jr $ra
2306; MIPS32R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002307 %1 = add <2 x i64> %a, %b
2308 ret <2 x i64> %1
2309}
2310
2311; The MIPS vector ABI treats vectors of floats differently to vectors of
2312; integers.
2313
2314; For arguments floating pointer vectors are bitcasted to integer vectors whose
2315; elements are of GPR width and where the element count is deduced from
2316; the length of the floating point vector divided by the size of the GPRs.
2317
2318; For returns, integer vectors are passed via the GPR register set, but
2319; floating point vectors are returned via a hidden sret pointer.
2320
2321; For testing purposes we skip returning values here and test them below
2322; instead.
2323@float_res_v2f32 = external global <2 x float>
2324
2325define void @float_2(<2 x float> %a, <2 x float> %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002326; MIPS32-LABEL: float_2:
2327; MIPS32: # %bb.0:
2328; MIPS32-NEXT: mtc1 $7, $f0
2329; MIPS32-NEXT: mtc1 $5, $f1
2330; MIPS32-NEXT: add.s $f0, $f1, $f0
2331; MIPS32-NEXT: lui $1, %hi(float_res_v2f32)
2332; MIPS32-NEXT: addiu $2, $1, %lo(float_res_v2f32)
2333; MIPS32-NEXT: swc1 $f0, 4($2)
2334; MIPS32-NEXT: mtc1 $6, $f0
2335; MIPS32-NEXT: mtc1 $4, $f1
2336; MIPS32-NEXT: add.s $f0, $f1, $f0
2337; MIPS32-NEXT: swc1 $f0, %lo(float_res_v2f32)($1)
2338; MIPS32-NEXT: jr $ra
2339; MIPS32-NEXT: nop
2340;
2341; MIPS64EB-LABEL: float_2:
2342; MIPS64EB: # %bb.0:
2343; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_2)))
2344; MIPS64EB-NEXT: daddu $1, $1, $25
2345; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2346; MIPS64EB-NEXT: sll $2, $5, 0
2347; MIPS64EB-NEXT: mtc1 $2, $f0
2348; MIPS64EB-NEXT: sll $2, $4, 0
2349; MIPS64EB-NEXT: mtc1 $2, $f1
2350; MIPS64EB-NEXT: add.s $f0, $f1, $f0
2351; MIPS64EB-NEXT: dsrl $2, $5, 32
2352; MIPS64EB-NEXT: sll $2, $2, 0
2353; MIPS64EB-NEXT: ld $1, %got_disp(float_res_v2f32)($1)
2354; MIPS64EB-NEXT: swc1 $f0, 4($1)
2355; MIPS64EB-NEXT: mtc1 $2, $f0
2356; MIPS64EB-NEXT: dsrl $2, $4, 32
2357; MIPS64EB-NEXT: sll $2, $2, 0
2358; MIPS64EB-NEXT: mtc1 $2, $f1
2359; MIPS64EB-NEXT: add.s $f0, $f1, $f0
2360; MIPS64EB-NEXT: swc1 $f0, 0($1)
2361; MIPS64EB-NEXT: jr $ra
2362; MIPS64EB-NEXT: nop
2363;
2364; MIPS32R5-LABEL: float_2:
2365; MIPS32R5: # %bb.0:
2366; MIPS32R5-NEXT: addiu $sp, $sp, -48
2367; MIPS32R5-NEXT: .cfi_def_cfa_offset 48
2368; MIPS32R5-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill
2369; MIPS32R5-NEXT: .cfi_offset 30, -4
2370; MIPS32R5-NEXT: move $fp, $sp
2371; MIPS32R5-NEXT: .cfi_def_cfa_register 30
2372; MIPS32R5-NEXT: addiu $1, $zero, -16
2373; MIPS32R5-NEXT: and $sp, $sp, $1
2374; MIPS32R5-NEXT: sw $7, 20($sp)
2375; MIPS32R5-NEXT: sw $6, 16($sp)
2376; MIPS32R5-NEXT: sw $5, 4($sp)
2377; MIPS32R5-NEXT: sw $4, 0($sp)
2378; MIPS32R5-NEXT: ld.w $w0, 16($sp)
2379; MIPS32R5-NEXT: ld.w $w1, 0($sp)
2380; MIPS32R5-NEXT: fadd.w $w0, $w1, $w0
2381; MIPS32R5-NEXT: lui $1, %hi(float_res_v2f32)
2382; MIPS32R5-NEXT: addiu $2, $1, %lo(float_res_v2f32)
2383; MIPS32R5-NEXT: splati.w $w1, $w0[1]
2384; MIPS32R5-NEXT: swc1 $f1, 4($2)
2385; MIPS32R5-NEXT: swc1 $f0, %lo(float_res_v2f32)($1)
2386; MIPS32R5-NEXT: move $sp, $fp
2387; MIPS32R5-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload
2388; MIPS32R5-NEXT: addiu $sp, $sp, 48
2389; MIPS32R5-NEXT: jr $ra
2390; MIPS32R5-NEXT: nop
2391;
2392; MIPS64R5EB-LABEL: float_2:
2393; MIPS64R5EB: # %bb.0:
2394; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
2395; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
2396; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_2)))
2397; MIPS64R5EB-NEXT: daddu $1, $1, $25
2398; MIPS64R5EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2399; MIPS64R5EB-NEXT: sd $5, 0($sp)
2400; MIPS64R5EB-NEXT: sd $4, 16($sp)
2401; MIPS64R5EB-NEXT: ld.w $w0, 0($sp)
2402; MIPS64R5EB-NEXT: ld.w $w1, 16($sp)
2403; MIPS64R5EB-NEXT: fadd.w $w0, $w1, $w0
2404; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
2405; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0]
2406; MIPS64R5EB-NEXT: ld $1, %got_disp(float_res_v2f32)($1)
2407; MIPS64R5EB-NEXT: sd $2, 0($1)
2408; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
2409; MIPS64R5EB-NEXT: jr $ra
2410; MIPS64R5EB-NEXT: nop
2411;
2412; MIPS64EL-LABEL: float_2:
2413; MIPS64EL: # %bb.0:
2414; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_2)))
2415; MIPS64EL-NEXT: daddu $1, $1, $25
2416; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2417; MIPS64EL-NEXT: sll $2, $5, 0
2418; MIPS64EL-NEXT: mtc1 $2, $f0
2419; MIPS64EL-NEXT: sll $2, $4, 0
2420; MIPS64EL-NEXT: mtc1 $2, $f1
2421; MIPS64EL-NEXT: add.s $f0, $f1, $f0
2422; MIPS64EL-NEXT: dsrl $2, $5, 32
2423; MIPS64EL-NEXT: sll $2, $2, 0
2424; MIPS64EL-NEXT: ld $1, %got_disp(float_res_v2f32)($1)
2425; MIPS64EL-NEXT: swc1 $f0, 0($1)
2426; MIPS64EL-NEXT: mtc1 $2, $f0
2427; MIPS64EL-NEXT: dsrl $2, $4, 32
2428; MIPS64EL-NEXT: sll $2, $2, 0
2429; MIPS64EL-NEXT: mtc1 $2, $f1
2430; MIPS64EL-NEXT: add.s $f0, $f1, $f0
2431; MIPS64EL-NEXT: swc1 $f0, 4($1)
2432; MIPS64EL-NEXT: jr $ra
2433; MIPS64EL-NEXT: nop
2434;
2435; MIPS64R5EL-LABEL: float_2:
2436; MIPS64R5EL: # %bb.0:
2437; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
2438; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
2439; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_2)))
2440; MIPS64R5EL-NEXT: daddu $1, $1, $25
2441; MIPS64R5EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2)))
2442; MIPS64R5EL-NEXT: sd $5, 0($sp)
2443; MIPS64R5EL-NEXT: sd $4, 16($sp)
2444; MIPS64R5EL-NEXT: ld.w $w0, 0($sp)
2445; MIPS64R5EL-NEXT: ld.w $w1, 16($sp)
2446; MIPS64R5EL-NEXT: fadd.w $w0, $w1, $w0
2447; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0]
2448; MIPS64R5EL-NEXT: ld $1, %got_disp(float_res_v2f32)($1)
2449; MIPS64R5EL-NEXT: sd $2, 0($1)
2450; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
2451; MIPS64R5EL-NEXT: jr $ra
2452; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002453 %1 = fadd <2 x float> %a, %b
2454 store <2 x float> %1, <2 x float> * @float_res_v2f32
2455 ret void
2456}
2457
2458@float_res_v4f32 = external global <4 x float>
2459
2460; For MSA this case is suboptimal, the 4 loads can be combined into a single
2461; ld.w.
2462
2463define void @float_4(<4 x float> %a, <4 x float> %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002464; MIPS32-LABEL: float_4:
2465; MIPS32: # %bb.0:
2466; MIPS32-NEXT: mtc1 $7, $f0
2467; MIPS32-NEXT: mtc1 $6, $f1
2468; MIPS32-NEXT: lwc1 $f2, 28($sp)
2469; MIPS32-NEXT: lwc1 $f3, 24($sp)
2470; MIPS32-NEXT: add.s $f1, $f1, $f3
2471; MIPS32-NEXT: add.s $f0, $f0, $f2
2472; MIPS32-NEXT: mtc1 $5, $f2
2473; MIPS32-NEXT: lui $1, %hi(float_res_v4f32)
2474; MIPS32-NEXT: addiu $2, $1, %lo(float_res_v4f32)
2475; MIPS32-NEXT: lwc1 $f3, 20($sp)
2476; MIPS32-NEXT: swc1 $f0, 12($2)
2477; MIPS32-NEXT: swc1 $f1, 8($2)
2478; MIPS32-NEXT: add.s $f0, $f2, $f3
2479; MIPS32-NEXT: swc1 $f0, 4($2)
2480; MIPS32-NEXT: mtc1 $4, $f0
2481; MIPS32-NEXT: lwc1 $f1, 16($sp)
2482; MIPS32-NEXT: add.s $f0, $f0, $f1
2483; MIPS32-NEXT: swc1 $f0, %lo(float_res_v4f32)($1)
2484; MIPS32-NEXT: jr $ra
2485; MIPS32-NEXT: nop
2486;
2487; MIPS64EB-LABEL: float_4:
2488; MIPS64EB: # %bb.0:
2489; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_4)))
2490; MIPS64EB-NEXT: daddu $1, $1, $25
2491; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2492; MIPS64EB-NEXT: dsrl $2, $7, 32
2493; MIPS64EB-NEXT: sll $2, $2, 0
2494; MIPS64EB-NEXT: sll $3, $4, 0
2495; MIPS64EB-NEXT: sll $8, $6, 0
2496; MIPS64EB-NEXT: sll $7, $7, 0
2497; MIPS64EB-NEXT: mtc1 $8, $f0
2498; MIPS64EB-NEXT: mtc1 $3, $f1
2499; MIPS64EB-NEXT: mtc1 $2, $f2
2500; MIPS64EB-NEXT: dsrl $2, $5, 32
2501; MIPS64EB-NEXT: sll $2, $2, 0
2502; MIPS64EB-NEXT: mtc1 $2, $f3
2503; MIPS64EB-NEXT: add.s $f2, $f3, $f2
2504; MIPS64EB-NEXT: add.s $f0, $f1, $f0
2505; MIPS64EB-NEXT: mtc1 $7, $f1
2506; MIPS64EB-NEXT: sll $2, $5, 0
2507; MIPS64EB-NEXT: mtc1 $2, $f3
2508; MIPS64EB-NEXT: add.s $f1, $f3, $f1
2509; MIPS64EB-NEXT: dsrl $2, $6, 32
2510; MIPS64EB-NEXT: sll $2, $2, 0
2511; MIPS64EB-NEXT: ld $1, %got_disp(float_res_v4f32)($1)
2512; MIPS64EB-NEXT: swc1 $f1, 12($1)
2513; MIPS64EB-NEXT: swc1 $f0, 4($1)
2514; MIPS64EB-NEXT: swc1 $f2, 8($1)
2515; MIPS64EB-NEXT: mtc1 $2, $f0
2516; MIPS64EB-NEXT: dsrl $2, $4, 32
2517; MIPS64EB-NEXT: sll $2, $2, 0
2518; MIPS64EB-NEXT: mtc1 $2, $f1
2519; MIPS64EB-NEXT: add.s $f0, $f1, $f0
2520; MIPS64EB-NEXT: swc1 $f0, 0($1)
2521; MIPS64EB-NEXT: jr $ra
2522; MIPS64EB-NEXT: nop
2523;
2524; MIPS32R5-LABEL: float_4:
2525; MIPS32R5: # %bb.0:
2526; MIPS32R5-NEXT: ldi.b $w0, 0
2527; MIPS32R5-NEXT: lw $1, 20($sp)
2528; MIPS32R5-NEXT: lw $2, 16($sp)
2529; MIPS32R5-NEXT: move.v $w1, $w0
2530; MIPS32R5-NEXT: insert.w $w1[0], $2
2531; MIPS32R5-NEXT: insert.w $w1[1], $1
2532; MIPS32R5-NEXT: lw $1, 24($sp)
2533; MIPS32R5-NEXT: insert.w $w1[2], $1
2534; MIPS32R5-NEXT: lw $1, 28($sp)
2535; MIPS32R5-NEXT: insert.w $w1[3], $1
2536; MIPS32R5-NEXT: insert.w $w0[0], $4
2537; MIPS32R5-NEXT: insert.w $w0[1], $5
2538; MIPS32R5-NEXT: insert.w $w0[2], $6
2539; MIPS32R5-NEXT: insert.w $w0[3], $7
2540; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1
2541; MIPS32R5-NEXT: lui $1, %hi(float_res_v4f32)
2542; MIPS32R5-NEXT: addiu $1, $1, %lo(float_res_v4f32)
2543; MIPS32R5-NEXT: st.w $w0, 0($1)
2544; MIPS32R5-NEXT: jr $ra
2545; MIPS32R5-NEXT: nop
2546;
2547; MIPS64R5EB-LABEL: float_4:
2548; MIPS64R5EB: # %bb.0:
2549; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_4)))
2550; MIPS64R5EB-NEXT: daddu $1, $1, $25
2551; MIPS64R5EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2552; MIPS64R5EB-NEXT: ldi.b $w0, 0
2553; MIPS64R5EB-NEXT: move.v $w1, $w0
2554; MIPS64R5EB-NEXT: insert.d $w1[0], $6
2555; MIPS64R5EB-NEXT: insert.d $w1[1], $7
2556; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177
2557; MIPS64R5EB-NEXT: insert.d $w0[0], $4
2558; MIPS64R5EB-NEXT: insert.d $w0[1], $5
2559; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
2560; MIPS64R5EB-NEXT: fadd.w $w0, $w0, $w1
2561; MIPS64R5EB-NEXT: ld $1, %got_disp(float_res_v4f32)($1)
2562; MIPS64R5EB-NEXT: st.w $w0, 0($1)
2563; MIPS64R5EB-NEXT: jr $ra
2564; MIPS64R5EB-NEXT: nop
2565;
2566; MIPS64EL-LABEL: float_4:
2567; MIPS64EL: # %bb.0:
2568; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_4)))
2569; MIPS64EL-NEXT: daddu $1, $1, $25
2570; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2571; MIPS64EL-NEXT: dsrl $2, $7, 32
2572; MIPS64EL-NEXT: sll $2, $2, 0
2573; MIPS64EL-NEXT: sll $3, $4, 0
2574; MIPS64EL-NEXT: sll $8, $6, 0
2575; MIPS64EL-NEXT: sll $7, $7, 0
2576; MIPS64EL-NEXT: mtc1 $8, $f0
2577; MIPS64EL-NEXT: mtc1 $3, $f1
2578; MIPS64EL-NEXT: mtc1 $2, $f2
2579; MIPS64EL-NEXT: dsrl $2, $5, 32
2580; MIPS64EL-NEXT: sll $2, $2, 0
2581; MIPS64EL-NEXT: mtc1 $2, $f3
2582; MIPS64EL-NEXT: add.s $f2, $f3, $f2
2583; MIPS64EL-NEXT: add.s $f0, $f1, $f0
2584; MIPS64EL-NEXT: mtc1 $7, $f1
2585; MIPS64EL-NEXT: sll $2, $5, 0
2586; MIPS64EL-NEXT: mtc1 $2, $f3
2587; MIPS64EL-NEXT: add.s $f1, $f3, $f1
2588; MIPS64EL-NEXT: dsrl $2, $6, 32
2589; MIPS64EL-NEXT: sll $2, $2, 0
2590; MIPS64EL-NEXT: ld $1, %got_disp(float_res_v4f32)($1)
2591; MIPS64EL-NEXT: swc1 $f1, 8($1)
2592; MIPS64EL-NEXT: swc1 $f0, 0($1)
2593; MIPS64EL-NEXT: swc1 $f2, 12($1)
2594; MIPS64EL-NEXT: mtc1 $2, $f0
2595; MIPS64EL-NEXT: dsrl $2, $4, 32
2596; MIPS64EL-NEXT: sll $2, $2, 0
2597; MIPS64EL-NEXT: mtc1 $2, $f1
2598; MIPS64EL-NEXT: add.s $f0, $f1, $f0
2599; MIPS64EL-NEXT: swc1 $f0, 4($1)
2600; MIPS64EL-NEXT: jr $ra
2601; MIPS64EL-NEXT: nop
2602;
2603; MIPS64R5EL-LABEL: float_4:
2604; MIPS64R5EL: # %bb.0:
2605; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_4)))
2606; MIPS64R5EL-NEXT: daddu $1, $1, $25
2607; MIPS64R5EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4)))
2608; MIPS64R5EL-NEXT: ldi.b $w0, 0
2609; MIPS64R5EL-NEXT: move.v $w1, $w0
2610; MIPS64R5EL-NEXT: insert.d $w1[0], $6
2611; MIPS64R5EL-NEXT: insert.d $w1[1], $7
2612; MIPS64R5EL-NEXT: insert.d $w0[0], $4
2613; MIPS64R5EL-NEXT: insert.d $w0[1], $5
2614; MIPS64R5EL-NEXT: fadd.w $w0, $w0, $w1
2615; MIPS64R5EL-NEXT: ld $1, %got_disp(float_res_v4f32)($1)
2616; MIPS64R5EL-NEXT: st.w $w0, 0($1)
2617; MIPS64R5EL-NEXT: jr $ra
2618; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002619 %1 = fadd <4 x float> %a, %b
2620 store <4 x float> %1, <4 x float> * @float_res_v4f32
2621 ret void
2622}
2623
2624@double_v2f64 = external global <2 x double>
2625
2626define void @double_2(<2 x double> %a, <2 x double> %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002627; MIPS32-LABEL: double_2:
2628; MIPS32: # %bb.0:
2629; MIPS32-NEXT: addiu $sp, $sp, -32
2630; MIPS32-NEXT: .cfi_def_cfa_offset 32
2631; MIPS32-NEXT: lw $1, 60($sp)
2632; MIPS32-NEXT: sw $1, 12($sp)
2633; MIPS32-NEXT: lw $1, 56($sp)
2634; MIPS32-NEXT: sw $1, 8($sp)
2635; MIPS32-NEXT: sw $7, 28($sp)
2636; MIPS32-NEXT: sw $6, 24($sp)
2637; MIPS32-NEXT: ldc1 $f0, 8($sp)
2638; MIPS32-NEXT: ldc1 $f2, 24($sp)
2639; MIPS32-NEXT: add.d $f0, $f2, $f0
2640; MIPS32-NEXT: lui $1, %hi(double_v2f64)
2641; MIPS32-NEXT: addiu $2, $1, %lo(double_v2f64)
2642; MIPS32-NEXT: lw $3, 52($sp)
2643; MIPS32-NEXT: sdc1 $f0, 8($2)
2644; MIPS32-NEXT: sw $3, 4($sp)
2645; MIPS32-NEXT: lw $2, 48($sp)
2646; MIPS32-NEXT: sw $2, 0($sp)
2647; MIPS32-NEXT: sw $5, 20($sp)
2648; MIPS32-NEXT: sw $4, 16($sp)
2649; MIPS32-NEXT: ldc1 $f0, 0($sp)
2650; MIPS32-NEXT: ldc1 $f2, 16($sp)
2651; MIPS32-NEXT: add.d $f0, $f2, $f0
2652; MIPS32-NEXT: sdc1 $f0, %lo(double_v2f64)($1)
2653; MIPS32-NEXT: addiu $sp, $sp, 32
2654; MIPS32-NEXT: jr $ra
2655; MIPS32-NEXT: nop
2656;
2657; MIPS64-LABEL: double_2:
2658; MIPS64: # %bb.0:
2659; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(double_2)))
2660; MIPS64-NEXT: daddu $1, $1, $25
2661; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(double_2)))
2662; MIPS64-NEXT: dmtc1 $7, $f0
2663; MIPS64-NEXT: dmtc1 $5, $f1
2664; MIPS64-NEXT: add.d $f0, $f1, $f0
2665; MIPS64-NEXT: ld $1, %got_disp(double_v2f64)($1)
2666; MIPS64-NEXT: sdc1 $f0, 8($1)
2667; MIPS64-NEXT: dmtc1 $6, $f0
2668; MIPS64-NEXT: dmtc1 $4, $f1
2669; MIPS64-NEXT: add.d $f0, $f1, $f0
2670; MIPS64-NEXT: sdc1 $f0, 0($1)
2671; MIPS64-NEXT: jr $ra
2672; MIPS64-NEXT: nop
2673;
2674; MIPS32R5EB-LABEL: double_2:
2675; MIPS32R5EB: # %bb.0:
2676; MIPS32R5EB-NEXT: ldi.b $w0, 0
2677; MIPS32R5EB-NEXT: lw $1, 20($sp)
2678; MIPS32R5EB-NEXT: lw $2, 16($sp)
2679; MIPS32R5EB-NEXT: move.v $w1, $w0
2680; MIPS32R5EB-NEXT: insert.w $w1[0], $2
2681; MIPS32R5EB-NEXT: insert.w $w1[1], $1
2682; MIPS32R5EB-NEXT: lw $1, 24($sp)
2683; MIPS32R5EB-NEXT: insert.w $w0[0], $4
2684; MIPS32R5EB-NEXT: insert.w $w1[2], $1
2685; MIPS32R5EB-NEXT: lw $1, 28($sp)
2686; MIPS32R5EB-NEXT: insert.w $w1[3], $1
2687; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177
2688; MIPS32R5EB-NEXT: insert.w $w0[1], $5
2689; MIPS32R5EB-NEXT: insert.w $w0[2], $6
2690; MIPS32R5EB-NEXT: insert.w $w0[3], $7
2691; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177
2692; MIPS32R5EB-NEXT: fadd.d $w0, $w0, $w1
2693; MIPS32R5EB-NEXT: lui $1, %hi(double_v2f64)
2694; MIPS32R5EB-NEXT: addiu $1, $1, %lo(double_v2f64)
2695; MIPS32R5EB-NEXT: st.d $w0, 0($1)
2696; MIPS32R5EB-NEXT: jr $ra
2697; MIPS32R5EB-NEXT: nop
2698;
2699; MIPS64R5-LABEL: double_2:
2700; MIPS64R5: # %bb.0:
2701; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(double_2)))
2702; MIPS64R5-NEXT: daddu $1, $1, $25
2703; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(double_2)))
2704; MIPS64R5-NEXT: ldi.b $w0, 0
2705; MIPS64R5-NEXT: move.v $w1, $w0
2706; MIPS64R5-NEXT: insert.d $w1[0], $6
2707; MIPS64R5-NEXT: insert.d $w1[1], $7
2708; MIPS64R5-NEXT: insert.d $w0[0], $4
2709; MIPS64R5-NEXT: insert.d $w0[1], $5
2710; MIPS64R5-NEXT: fadd.d $w0, $w0, $w1
2711; MIPS64R5-NEXT: ld $1, %got_disp(double_v2f64)($1)
2712; MIPS64R5-NEXT: st.d $w0, 0($1)
2713; MIPS64R5-NEXT: jr $ra
2714; MIPS64R5-NEXT: nop
2715;
2716; MIPS32R5EL-LABEL: double_2:
2717; MIPS32R5EL: # %bb.0:
2718; MIPS32R5EL-NEXT: ldi.b $w0, 0
2719; MIPS32R5EL-NEXT: lw $1, 20($sp)
2720; MIPS32R5EL-NEXT: lw $2, 16($sp)
2721; MIPS32R5EL-NEXT: move.v $w1, $w0
2722; MIPS32R5EL-NEXT: insert.w $w1[0], $2
2723; MIPS32R5EL-NEXT: insert.w $w1[1], $1
2724; MIPS32R5EL-NEXT: lw $1, 24($sp)
2725; MIPS32R5EL-NEXT: insert.w $w1[2], $1
2726; MIPS32R5EL-NEXT: lw $1, 28($sp)
2727; MIPS32R5EL-NEXT: insert.w $w1[3], $1
2728; MIPS32R5EL-NEXT: insert.w $w0[0], $4
2729; MIPS32R5EL-NEXT: insert.w $w0[1], $5
2730; MIPS32R5EL-NEXT: insert.w $w0[2], $6
2731; MIPS32R5EL-NEXT: insert.w $w0[3], $7
2732; MIPS32R5EL-NEXT: fadd.d $w0, $w0, $w1
2733; MIPS32R5EL-NEXT: lui $1, %hi(double_v2f64)
2734; MIPS32R5EL-NEXT: addiu $1, $1, %lo(double_v2f64)
2735; MIPS32R5EL-NEXT: st.d $w0, 0($1)
2736; MIPS32R5EL-NEXT: jr $ra
2737; MIPS32R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002738 %1 = fadd <2 x double> %a, %b
2739 store <2 x double> %1, <2 x double> * @double_v2f64
2740 ret void
2741}
2742
2743; Return value testing.
2744; Integer vectors are returned in $2, $3, $4, $5 for O32, $2, $3 for N32/N64
2745; Floating point vectors are returned through a hidden sret pointer.
2746
2747@gv2i8 = global <2 x i8> <i8 1, i8 2>
2748@gv4i8 = global <4 x i8> <i8 0, i8 1, i8 2, i8 3>
2749@gv8i8 = global <8 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>
2750@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>
2751
2752@gv2i16 = global <2 x i16> <i16 1, i16 2>
2753@gv4i16 = global <4 x i16> <i16 0, i16 1, i16 2, i16 3>
2754@gv8i16 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>
2755
2756@gv2i32 = global <2 x i32> <i32 0, i32 1>
2757@gv4i32 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2758
2759@gv2i64 = global <2 x i64> <i64 0, i64 1>
2760
Simon Dardis212cccb2017-06-09 14:37:08 +00002761; FIXME: why is this lh instead of lhu on mips64?
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002762define <2 x i8> @ret_2_i8() {
2763; MIPS32-LABEL: ret_2_i8:
2764; MIPS32: # %bb.0:
2765; MIPS32-NEXT: lui $1, %hi(gv2i8)
2766; MIPS32-NEXT: lhu $2, %lo(gv2i8)($1)
2767; MIPS32-NEXT: jr $ra
2768; MIPS32-NEXT: nop
2769;
2770; MIPS64-LABEL: ret_2_i8:
2771; MIPS64: # %bb.0:
2772; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i8)))
2773; MIPS64-NEXT: daddu $1, $1, $25
2774; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8)))
2775; MIPS64-NEXT: ld $1, %got_disp(gv2i8)($1)
2776; MIPS64-NEXT: lh $2, 0($1)
2777; MIPS64-NEXT: jr $ra
2778; MIPS64-NEXT: nop
2779;
2780; MIPS32R5-LABEL: ret_2_i8:
2781; MIPS32R5: # %bb.0:
2782; MIPS32R5-NEXT: lui $1, %hi(gv2i8)
2783; MIPS32R5-NEXT: lhu $2, %lo(gv2i8)($1)
2784; MIPS32R5-NEXT: jr $ra
2785; MIPS32R5-NEXT: nop
2786;
2787; MIPS64R5-LABEL: ret_2_i8:
2788; MIPS64R5: # %bb.0:
2789; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i8)))
2790; MIPS64R5-NEXT: daddu $1, $1, $25
2791; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8)))
2792; MIPS64R5-NEXT: ld $1, %got_disp(gv2i8)($1)
2793; MIPS64R5-NEXT: lh $2, 0($1)
2794; MIPS64R5-NEXT: jr $ra
2795; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002796 %1 = load <2 x i8>, <2 x i8> * @gv2i8
2797 ret <2 x i8> %1
2798}
2799
2800define <4 x i8> @ret_4_i8() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002801; MIPS32-LABEL: ret_4_i8:
2802; MIPS32: # %bb.0:
2803; MIPS32-NEXT: lui $1, %hi(gv4i8)
2804; MIPS32-NEXT: lw $2, %lo(gv4i8)($1)
2805; MIPS32-NEXT: jr $ra
2806; MIPS32-NEXT: nop
2807;
2808; MIPS64-LABEL: ret_4_i8:
2809; MIPS64: # %bb.0:
2810; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i8)))
2811; MIPS64-NEXT: daddu $1, $1, $25
2812; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8)))
2813; MIPS64-NEXT: ld $1, %got_disp(gv4i8)($1)
2814; MIPS64-NEXT: lw $2, 0($1)
2815; MIPS64-NEXT: jr $ra
2816; MIPS64-NEXT: nop
2817;
2818; MIPS32R5-LABEL: ret_4_i8:
2819; MIPS32R5: # %bb.0:
2820; MIPS32R5-NEXT: lui $1, %hi(gv4i8)
2821; MIPS32R5-NEXT: lw $2, %lo(gv4i8)($1)
2822; MIPS32R5-NEXT: jr $ra
2823; MIPS32R5-NEXT: nop
2824;
2825; MIPS64R5-LABEL: ret_4_i8:
2826; MIPS64R5: # %bb.0:
2827; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i8)))
2828; MIPS64R5-NEXT: daddu $1, $1, $25
2829; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8)))
2830; MIPS64R5-NEXT: ld $1, %got_disp(gv4i8)($1)
2831; MIPS64R5-NEXT: lw $2, 0($1)
2832; MIPS64R5-NEXT: jr $ra
2833; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002834 %1 = load <4 x i8>, <4 x i8> * @gv4i8
2835 ret <4 x i8> %1
2836}
2837
2838define <8 x i8> @ret_8_i8() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002839; MIPS32-LABEL: ret_8_i8:
2840; MIPS32: # %bb.0:
2841; MIPS32-NEXT: lui $1, %hi(gv8i8)
2842; MIPS32-NEXT: lw $2, %lo(gv8i8)($1)
2843; MIPS32-NEXT: addiu $1, $1, %lo(gv8i8)
2844; MIPS32-NEXT: lw $3, 4($1)
2845; MIPS32-NEXT: jr $ra
2846; MIPS32-NEXT: nop
2847;
2848; MIPS64-LABEL: ret_8_i8:
2849; MIPS64: # %bb.0:
2850; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i8)))
2851; MIPS64-NEXT: daddu $1, $1, $25
2852; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8)))
2853; MIPS64-NEXT: ld $1, %got_disp(gv8i8)($1)
2854; MIPS64-NEXT: ld $2, 0($1)
2855; MIPS64-NEXT: jr $ra
2856; MIPS64-NEXT: nop
2857;
2858; MIPS32R5EB-LABEL: ret_8_i8:
2859; MIPS32R5EB: # %bb.0:
2860; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
2861; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
2862; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
2863; MIPS32R5EB-NEXT: .cfi_offset 30, -4
2864; MIPS32R5EB-NEXT: move $fp, $sp
2865; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30
2866; MIPS32R5EB-NEXT: addiu $1, $zero, -16
2867; MIPS32R5EB-NEXT: and $sp, $sp, $1
2868; MIPS32R5EB-NEXT: lui $1, %hi(gv8i8)
2869; MIPS32R5EB-NEXT: lw $2, %lo(gv8i8)($1)
2870; MIPS32R5EB-NEXT: sw $2, 4($sp)
2871; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv8i8)
2872; MIPS32R5EB-NEXT: lw $1, 4($1)
2873; MIPS32R5EB-NEXT: sw $1, 12($sp)
2874; MIPS32R5EB-NEXT: ld.w $w0, 0($sp)
2875; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1]
2876; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3]
2877; MIPS32R5EB-NEXT: move $sp, $fp
2878; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
2879; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
2880; MIPS32R5EB-NEXT: jr $ra
2881; MIPS32R5EB-NEXT: nop
2882;
2883; MIPS64R5-LABEL: ret_8_i8:
2884; MIPS64R5: # %bb.0:
2885; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i8)))
2886; MIPS64R5-NEXT: daddu $1, $1, $25
2887; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8)))
2888; MIPS64R5-NEXT: ld $1, %got_disp(gv8i8)($1)
2889; MIPS64R5-NEXT: ld $2, 0($1)
2890; MIPS64R5-NEXT: jr $ra
2891; MIPS64R5-NEXT: nop
2892;
2893; MIPS32R5EL-LABEL: ret_8_i8:
2894; MIPS32R5EL: # %bb.0:
2895; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
2896; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
2897; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
2898; MIPS32R5EL-NEXT: .cfi_offset 30, -4
2899; MIPS32R5EL-NEXT: move $fp, $sp
2900; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30
2901; MIPS32R5EL-NEXT: addiu $1, $zero, -16
2902; MIPS32R5EL-NEXT: and $sp, $sp, $1
2903; MIPS32R5EL-NEXT: lui $1, %hi(gv8i8)
2904; MIPS32R5EL-NEXT: lw $2, %lo(gv8i8)($1)
2905; MIPS32R5EL-NEXT: sw $2, 0($sp)
2906; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv8i8)
2907; MIPS32R5EL-NEXT: lw $1, 4($1)
2908; MIPS32R5EL-NEXT: sw $1, 8($sp)
2909; MIPS32R5EL-NEXT: ld.w $w0, 0($sp)
2910; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0]
2911; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2]
2912; MIPS32R5EL-NEXT: move $sp, $fp
2913; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
2914; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
2915; MIPS32R5EL-NEXT: jr $ra
2916; MIPS32R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002917 %1 = load <8 x i8>, <8 x i8> * @gv8i8
2918 ret <8 x i8> %1
2919}
2920
2921define <16 x i8> @ret_16_i8() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002922; MIPS32-LABEL: ret_16_i8:
2923; MIPS32: # %bb.0:
2924; MIPS32-NEXT: lui $1, %hi(gv16i8)
2925; MIPS32-NEXT: lw $2, %lo(gv16i8)($1)
2926; MIPS32-NEXT: addiu $1, $1, %lo(gv16i8)
2927; MIPS32-NEXT: lw $3, 4($1)
2928; MIPS32-NEXT: lw $4, 8($1)
2929; MIPS32-NEXT: lw $5, 12($1)
2930; MIPS32-NEXT: jr $ra
2931; MIPS32-NEXT: nop
2932;
2933; MIPS64-LABEL: ret_16_i8:
2934; MIPS64: # %bb.0:
2935; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_16_i8)))
2936; MIPS64-NEXT: daddu $1, $1, $25
2937; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8)))
2938; MIPS64-NEXT: ld $1, %got_disp(gv16i8)($1)
2939; MIPS64-NEXT: ld $2, 0($1)
2940; MIPS64-NEXT: ld $3, 8($1)
2941; MIPS64-NEXT: jr $ra
2942; MIPS64-NEXT: nop
2943;
2944; MIPS32R5-LABEL: ret_16_i8:
2945; MIPS32R5: # %bb.0:
2946; MIPS32R5-NEXT: lui $1, %hi(gv16i8)
2947; MIPS32R5-NEXT: addiu $1, $1, %lo(gv16i8)
2948; MIPS32R5-NEXT: ld.w $w0, 0($1)
2949; MIPS32R5-NEXT: copy_s.w $2, $w0[0]
2950; MIPS32R5-NEXT: copy_s.w $3, $w0[1]
2951; MIPS32R5-NEXT: copy_s.w $4, $w0[2]
2952; MIPS32R5-NEXT: copy_s.w $5, $w0[3]
2953; MIPS32R5-NEXT: jr $ra
2954; MIPS32R5-NEXT: nop
2955;
2956; MIPS64R5-LABEL: ret_16_i8:
2957; MIPS64R5: # %bb.0:
2958; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_16_i8)))
2959; MIPS64R5-NEXT: daddu $1, $1, $25
2960; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8)))
2961; MIPS64R5-NEXT: ld $1, %got_disp(gv16i8)($1)
2962; MIPS64R5-NEXT: ld.d $w0, 0($1)
2963; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
2964; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
2965; MIPS64R5-NEXT: jr $ra
2966; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00002967 %1 = load <16 x i8>, <16 x i8> * @gv16i8
2968 ret <16 x i8> %1
2969}
2970
2971define <2 x i16> @ret_2_i16() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00002972; MIPS32-LABEL: ret_2_i16:
2973; MIPS32: # %bb.0:
2974; MIPS32-NEXT: lui $1, %hi(gv2i16)
2975; MIPS32-NEXT: lw $2, %lo(gv2i16)($1)
2976; MIPS32-NEXT: jr $ra
2977; MIPS32-NEXT: nop
2978;
2979; MIPS64-LABEL: ret_2_i16:
2980; MIPS64: # %bb.0:
2981; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i16)))
2982; MIPS64-NEXT: daddu $1, $1, $25
2983; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16)))
2984; MIPS64-NEXT: ld $1, %got_disp(gv2i16)($1)
2985; MIPS64-NEXT: lw $2, 0($1)
2986; MIPS64-NEXT: jr $ra
2987; MIPS64-NEXT: nop
2988;
2989; MIPS32R5-LABEL: ret_2_i16:
2990; MIPS32R5: # %bb.0:
2991; MIPS32R5-NEXT: lui $1, %hi(gv2i16)
2992; MIPS32R5-NEXT: lw $2, %lo(gv2i16)($1)
2993; MIPS32R5-NEXT: jr $ra
2994; MIPS32R5-NEXT: nop
2995;
2996; MIPS64R5-LABEL: ret_2_i16:
2997; MIPS64R5: # %bb.0:
2998; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i16)))
2999; MIPS64R5-NEXT: daddu $1, $1, $25
3000; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16)))
3001; MIPS64R5-NEXT: ld $1, %got_disp(gv2i16)($1)
3002; MIPS64R5-NEXT: lw $2, 0($1)
3003; MIPS64R5-NEXT: jr $ra
3004; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003005 %1 = load <2 x i16>, <2 x i16> * @gv2i16
3006 ret <2 x i16> %1
3007}
3008
3009define <4 x i16> @ret_4_i16() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003010; MIPS32-LABEL: ret_4_i16:
3011; MIPS32: # %bb.0:
3012; MIPS32-NEXT: lui $1, %hi(gv4i16)
3013; MIPS32-NEXT: lw $2, %lo(gv4i16)($1)
3014; MIPS32-NEXT: addiu $1, $1, %lo(gv4i16)
3015; MIPS32-NEXT: lw $3, 4($1)
3016; MIPS32-NEXT: jr $ra
3017; MIPS32-NEXT: nop
3018;
3019; MIPS64-LABEL: ret_4_i16:
3020; MIPS64: # %bb.0:
3021; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i16)))
3022; MIPS64-NEXT: daddu $1, $1, $25
3023; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16)))
3024; MIPS64-NEXT: ld $1, %got_disp(gv4i16)($1)
3025; MIPS64-NEXT: ld $2, 0($1)
3026; MIPS64-NEXT: jr $ra
3027; MIPS64-NEXT: nop
3028;
3029; MIPS32R5EB-LABEL: ret_4_i16:
3030; MIPS32R5EB: # %bb.0:
3031; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
3032; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
3033; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
3034; MIPS32R5EB-NEXT: .cfi_offset 30, -4
3035; MIPS32R5EB-NEXT: move $fp, $sp
3036; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30
3037; MIPS32R5EB-NEXT: addiu $1, $zero, -16
3038; MIPS32R5EB-NEXT: and $sp, $sp, $1
3039; MIPS32R5EB-NEXT: lui $1, %hi(gv4i16)
3040; MIPS32R5EB-NEXT: lw $2, %lo(gv4i16)($1)
3041; MIPS32R5EB-NEXT: sw $2, 4($sp)
3042; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv4i16)
3043; MIPS32R5EB-NEXT: lw $1, 4($1)
3044; MIPS32R5EB-NEXT: sw $1, 12($sp)
3045; MIPS32R5EB-NEXT: ld.w $w0, 0($sp)
3046; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1]
3047; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3]
3048; MIPS32R5EB-NEXT: move $sp, $fp
3049; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
3050; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
3051; MIPS32R5EB-NEXT: jr $ra
3052; MIPS32R5EB-NEXT: nop
3053;
3054; MIPS64R5-LABEL: ret_4_i16:
3055; MIPS64R5: # %bb.0:
3056; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i16)))
3057; MIPS64R5-NEXT: daddu $1, $1, $25
3058; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16)))
3059; MIPS64R5-NEXT: ld $1, %got_disp(gv4i16)($1)
3060; MIPS64R5-NEXT: ld $2, 0($1)
3061; MIPS64R5-NEXT: jr $ra
3062; MIPS64R5-NEXT: nop
3063;
3064; MIPS32R5EL-LABEL: ret_4_i16:
3065; MIPS32R5EL: # %bb.0:
3066; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
3067; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
3068; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
3069; MIPS32R5EL-NEXT: .cfi_offset 30, -4
3070; MIPS32R5EL-NEXT: move $fp, $sp
3071; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30
3072; MIPS32R5EL-NEXT: addiu $1, $zero, -16
3073; MIPS32R5EL-NEXT: and $sp, $sp, $1
3074; MIPS32R5EL-NEXT: lui $1, %hi(gv4i16)
3075; MIPS32R5EL-NEXT: lw $2, %lo(gv4i16)($1)
3076; MIPS32R5EL-NEXT: sw $2, 0($sp)
3077; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv4i16)
3078; MIPS32R5EL-NEXT: lw $1, 4($1)
3079; MIPS32R5EL-NEXT: sw $1, 8($sp)
3080; MIPS32R5EL-NEXT: ld.w $w0, 0($sp)
3081; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0]
3082; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2]
3083; MIPS32R5EL-NEXT: move $sp, $fp
3084; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
3085; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
3086; MIPS32R5EL-NEXT: jr $ra
3087; MIPS32R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003088 %1 = load <4 x i16>, <4 x i16> * @gv4i16
3089 ret <4 x i16> %1
3090}
3091
3092define <8 x i16> @ret_8_i16() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003093; MIPS32-LABEL: ret_8_i16:
3094; MIPS32: # %bb.0:
3095; MIPS32-NEXT: lui $1, %hi(gv8i16)
3096; MIPS32-NEXT: lw $2, %lo(gv8i16)($1)
3097; MIPS32-NEXT: addiu $1, $1, %lo(gv8i16)
3098; MIPS32-NEXT: lw $3, 4($1)
3099; MIPS32-NEXT: lw $4, 8($1)
3100; MIPS32-NEXT: lw $5, 12($1)
3101; MIPS32-NEXT: jr $ra
3102; MIPS32-NEXT: nop
3103;
3104; MIPS64-LABEL: ret_8_i16:
3105; MIPS64: # %bb.0:
3106; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i16)))
3107; MIPS64-NEXT: daddu $1, $1, $25
3108; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16)))
3109; MIPS64-NEXT: ld $1, %got_disp(gv8i16)($1)
3110; MIPS64-NEXT: ld $2, 0($1)
3111; MIPS64-NEXT: ld $3, 8($1)
3112; MIPS64-NEXT: jr $ra
3113; MIPS64-NEXT: nop
3114;
3115; MIPS32R5-LABEL: ret_8_i16:
3116; MIPS32R5: # %bb.0:
3117; MIPS32R5-NEXT: lui $1, %hi(gv8i16)
3118; MIPS32R5-NEXT: addiu $1, $1, %lo(gv8i16)
3119; MIPS32R5-NEXT: ld.w $w0, 0($1)
3120; MIPS32R5-NEXT: copy_s.w $2, $w0[0]
3121; MIPS32R5-NEXT: copy_s.w $3, $w0[1]
3122; MIPS32R5-NEXT: copy_s.w $4, $w0[2]
3123; MIPS32R5-NEXT: copy_s.w $5, $w0[3]
3124; MIPS32R5-NEXT: jr $ra
3125; MIPS32R5-NEXT: nop
3126;
3127; MIPS64R5-LABEL: ret_8_i16:
3128; MIPS64R5: # %bb.0:
3129; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i16)))
3130; MIPS64R5-NEXT: daddu $1, $1, $25
3131; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16)))
3132; MIPS64R5-NEXT: ld $1, %got_disp(gv8i16)($1)
3133; MIPS64R5-NEXT: ld.d $w0, 0($1)
3134; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
3135; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
3136; MIPS64R5-NEXT: jr $ra
3137; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003138 %1 = load <8 x i16>, <8 x i16> * @gv8i16
3139 ret <8 x i16> %1
3140}
3141
3142define <2 x i32> @ret_2_i32() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003143; MIPS32-LABEL: ret_2_i32:
3144; MIPS32: # %bb.0:
3145; MIPS32-NEXT: lui $1, %hi(gv2i32)
3146; MIPS32-NEXT: lw $2, %lo(gv2i32)($1)
3147; MIPS32-NEXT: addiu $1, $1, %lo(gv2i32)
3148; MIPS32-NEXT: lw $3, 4($1)
3149; MIPS32-NEXT: jr $ra
3150; MIPS32-NEXT: nop
3151;
3152; MIPS64-LABEL: ret_2_i32:
3153; MIPS64: # %bb.0:
3154; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i32)))
3155; MIPS64-NEXT: daddu $1, $1, $25
3156; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32)))
3157; MIPS64-NEXT: ld $1, %got_disp(gv2i32)($1)
3158; MIPS64-NEXT: ld $2, 0($1)
3159; MIPS64-NEXT: jr $ra
3160; MIPS64-NEXT: nop
3161;
3162; MIPS32R5EB-LABEL: ret_2_i32:
3163; MIPS32R5EB: # %bb.0:
3164; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
3165; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
3166; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
3167; MIPS32R5EB-NEXT: .cfi_offset 30, -4
3168; MIPS32R5EB-NEXT: move $fp, $sp
3169; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30
3170; MIPS32R5EB-NEXT: addiu $1, $zero, -16
3171; MIPS32R5EB-NEXT: and $sp, $sp, $1
3172; MIPS32R5EB-NEXT: lui $1, %hi(gv2i32)
3173; MIPS32R5EB-NEXT: lw $2, %lo(gv2i32)($1)
3174; MIPS32R5EB-NEXT: sw $2, 4($sp)
3175; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv2i32)
3176; MIPS32R5EB-NEXT: lw $1, 4($1)
3177; MIPS32R5EB-NEXT: sw $1, 12($sp)
3178; MIPS32R5EB-NEXT: ld.w $w0, 0($sp)
3179; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1]
3180; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3]
3181; MIPS32R5EB-NEXT: move $sp, $fp
3182; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
3183; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
3184; MIPS32R5EB-NEXT: jr $ra
3185; MIPS32R5EB-NEXT: nop
3186;
3187; MIPS64R5-LABEL: ret_2_i32:
3188; MIPS64R5: # %bb.0:
3189; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i32)))
3190; MIPS64R5-NEXT: daddu $1, $1, $25
3191; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32)))
3192; MIPS64R5-NEXT: ld $1, %got_disp(gv2i32)($1)
3193; MIPS64R5-NEXT: ld $2, 0($1)
3194; MIPS64R5-NEXT: jr $ra
3195; MIPS64R5-NEXT: nop
3196;
3197; MIPS32R5EL-LABEL: ret_2_i32:
3198; MIPS32R5EL: # %bb.0:
3199; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
3200; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
3201; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill
3202; MIPS32R5EL-NEXT: .cfi_offset 30, -4
3203; MIPS32R5EL-NEXT: move $fp, $sp
3204; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30
3205; MIPS32R5EL-NEXT: addiu $1, $zero, -16
3206; MIPS32R5EL-NEXT: and $sp, $sp, $1
3207; MIPS32R5EL-NEXT: lui $1, %hi(gv2i32)
3208; MIPS32R5EL-NEXT: lw $2, %lo(gv2i32)($1)
3209; MIPS32R5EL-NEXT: sw $2, 0($sp)
3210; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv2i32)
3211; MIPS32R5EL-NEXT: lw $1, 4($1)
3212; MIPS32R5EL-NEXT: sw $1, 8($sp)
3213; MIPS32R5EL-NEXT: ld.w $w0, 0($sp)
3214; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0]
3215; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2]
3216; MIPS32R5EL-NEXT: move $sp, $fp
3217; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload
3218; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
3219; MIPS32R5EL-NEXT: jr $ra
3220; MIPS32R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003221 %1 = load <2 x i32>, <2 x i32> * @gv2i32
3222 ret <2 x i32> %1
3223}
3224
3225define <4 x i32> @ret_4_i32() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003226; MIPS32-LABEL: ret_4_i32:
3227; MIPS32: # %bb.0:
3228; MIPS32-NEXT: lui $1, %hi(gv4i32)
3229; MIPS32-NEXT: lw $2, %lo(gv4i32)($1)
3230; MIPS32-NEXT: addiu $1, $1, %lo(gv4i32)
3231; MIPS32-NEXT: lw $3, 4($1)
3232; MIPS32-NEXT: lw $4, 8($1)
3233; MIPS32-NEXT: lw $5, 12($1)
3234; MIPS32-NEXT: jr $ra
3235; MIPS32-NEXT: nop
3236;
3237; MIPS64-LABEL: ret_4_i32:
3238; MIPS64: # %bb.0:
3239; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i32)))
3240; MIPS64-NEXT: daddu $1, $1, $25
3241; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32)))
3242; MIPS64-NEXT: ld $1, %got_disp(gv4i32)($1)
3243; MIPS64-NEXT: ld $2, 0($1)
3244; MIPS64-NEXT: ld $3, 8($1)
3245; MIPS64-NEXT: jr $ra
3246; MIPS64-NEXT: nop
3247;
3248; MIPS32R5-LABEL: ret_4_i32:
3249; MIPS32R5: # %bb.0:
3250; MIPS32R5-NEXT: lui $1, %hi(gv4i32)
3251; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4i32)
3252; MIPS32R5-NEXT: ld.w $w0, 0($1)
3253; MIPS32R5-NEXT: copy_s.w $2, $w0[0]
3254; MIPS32R5-NEXT: copy_s.w $3, $w0[1]
3255; MIPS32R5-NEXT: copy_s.w $4, $w0[2]
3256; MIPS32R5-NEXT: copy_s.w $5, $w0[3]
3257; MIPS32R5-NEXT: jr $ra
3258; MIPS32R5-NEXT: nop
3259;
3260; MIPS64R5-LABEL: ret_4_i32:
3261; MIPS64R5: # %bb.0:
3262; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i32)))
3263; MIPS64R5-NEXT: daddu $1, $1, $25
3264; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32)))
3265; MIPS64R5-NEXT: ld $1, %got_disp(gv4i32)($1)
3266; MIPS64R5-NEXT: ld.d $w0, 0($1)
3267; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
3268; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
3269; MIPS64R5-NEXT: jr $ra
3270; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003271 %1 = load <4 x i32>, <4 x i32> * @gv4i32
3272 ret <4 x i32> %1
3273}
3274
3275define <2 x i64> @ret_2_i64() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003276; MIPS32-LABEL: ret_2_i64:
3277; MIPS32: # %bb.0:
3278; MIPS32-NEXT: lui $1, %hi(gv2i64)
3279; MIPS32-NEXT: lw $2, %lo(gv2i64)($1)
3280; MIPS32-NEXT: addiu $1, $1, %lo(gv2i64)
3281; MIPS32-NEXT: lw $3, 4($1)
3282; MIPS32-NEXT: lw $4, 8($1)
3283; MIPS32-NEXT: lw $5, 12($1)
3284; MIPS32-NEXT: jr $ra
3285; MIPS32-NEXT: nop
3286;
3287; MIPS64-LABEL: ret_2_i64:
3288; MIPS64: # %bb.0:
3289; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i64)))
3290; MIPS64-NEXT: daddu $1, $1, $25
3291; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64)))
3292; MIPS64-NEXT: ld $1, %got_disp(gv2i64)($1)
3293; MIPS64-NEXT: ld $2, 0($1)
3294; MIPS64-NEXT: ld $3, 8($1)
3295; MIPS64-NEXT: jr $ra
3296; MIPS64-NEXT: nop
3297;
3298; MIPS32R5-LABEL: ret_2_i64:
3299; MIPS32R5: # %bb.0:
3300; MIPS32R5-NEXT: lui $1, %hi(gv2i64)
3301; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2i64)
3302; MIPS32R5-NEXT: ld.w $w0, 0($1)
3303; MIPS32R5-NEXT: copy_s.w $2, $w0[0]
3304; MIPS32R5-NEXT: copy_s.w $3, $w0[1]
3305; MIPS32R5-NEXT: copy_s.w $4, $w0[2]
3306; MIPS32R5-NEXT: copy_s.w $5, $w0[3]
3307; MIPS32R5-NEXT: jr $ra
3308; MIPS32R5-NEXT: nop
3309;
3310; MIPS64R5-LABEL: ret_2_i64:
3311; MIPS64R5: # %bb.0:
3312; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i64)))
3313; MIPS64R5-NEXT: daddu $1, $1, $25
3314; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64)))
3315; MIPS64R5-NEXT: ld $1, %got_disp(gv2i64)($1)
3316; MIPS64R5-NEXT: ld.d $w0, 0($1)
3317; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
3318; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
3319; MIPS64R5-NEXT: jr $ra
3320; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003321 %1 = load <2 x i64>, <2 x i64> * @gv2i64
3322 ret <2 x i64> %1
3323}
3324
3325@gv2f32 = global <2 x float> <float 0.0, float 0.0>
3326@gv4f32 = global <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0>
3327
3328define <2 x float> @ret_float_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003329; MIPS32-LABEL: ret_float_2:
3330; MIPS32: # %bb.0: # %entry
3331; MIPS32-NEXT: lui $1, %hi(gv2f32)
3332; MIPS32-NEXT: addiu $2, $1, %lo(gv2f32)
3333; MIPS32-NEXT: lwc1 $f0, 4($2)
3334; MIPS32-NEXT: swc1 $f0, 4($4)
3335; MIPS32-NEXT: lwc1 $f0, %lo(gv2f32)($1)
3336; MIPS32-NEXT: swc1 $f0, 0($4)
3337; MIPS32-NEXT: jr $ra
3338; MIPS32-NEXT: nop
3339;
3340; MIPS64-LABEL: ret_float_2:
3341; MIPS64: # %bb.0: # %entry
3342; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_2)))
3343; MIPS64-NEXT: daddu $1, $1, $25
3344; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2)))
3345; MIPS64-NEXT: ld $1, %got_disp(gv2f32)($1)
3346; MIPS64-NEXT: ld $2, 0($1)
3347; MIPS64-NEXT: jr $ra
3348; MIPS64-NEXT: nop
3349;
3350; MIPS32R5-LABEL: ret_float_2:
3351; MIPS32R5: # %bb.0: # %entry
3352; MIPS32R5-NEXT: lui $1, %hi(gv2f32)
3353; MIPS32R5-NEXT: addiu $2, $1, %lo(gv2f32)
3354; MIPS32R5-NEXT: lwc1 $f0, 4($2)
3355; MIPS32R5-NEXT: swc1 $f0, 4($4)
3356; MIPS32R5-NEXT: lwc1 $f0, %lo(gv2f32)($1)
3357; MIPS32R5-NEXT: swc1 $f0, 0($4)
3358; MIPS32R5-NEXT: jr $ra
3359; MIPS32R5-NEXT: nop
3360;
3361; MIPS64R5-LABEL: ret_float_2:
3362; MIPS64R5: # %bb.0: # %entry
3363; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_2)))
3364; MIPS64R5-NEXT: daddu $1, $1, $25
3365; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2)))
3366; MIPS64R5-NEXT: ld $1, %got_disp(gv2f32)($1)
3367; MIPS64R5-NEXT: ld $2, 0($1)
3368; MIPS64R5-NEXT: jr $ra
3369; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003370entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00003371 %0 = load <2 x float>, <2 x float> * @gv2f32
3372 ret <2 x float> %0
3373}
3374
3375define <4 x float> @ret_float_4() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003376; MIPS32-LABEL: ret_float_4:
3377; MIPS32: # %bb.0: # %entry
3378; MIPS32-NEXT: lui $1, %hi(gv4f32)
3379; MIPS32-NEXT: addiu $2, $1, %lo(gv4f32)
3380; MIPS32-NEXT: lwc1 $f0, 12($2)
3381; MIPS32-NEXT: swc1 $f0, 12($4)
3382; MIPS32-NEXT: lwc1 $f0, 8($2)
3383; MIPS32-NEXT: swc1 $f0, 8($4)
3384; MIPS32-NEXT: lwc1 $f0, 4($2)
3385; MIPS32-NEXT: swc1 $f0, 4($4)
3386; MIPS32-NEXT: lwc1 $f0, %lo(gv4f32)($1)
3387; MIPS32-NEXT: swc1 $f0, 0($4)
3388; MIPS32-NEXT: jr $ra
3389; MIPS32-NEXT: nop
3390;
3391; MIPS64-LABEL: ret_float_4:
3392; MIPS64: # %bb.0: # %entry
3393; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_4)))
3394; MIPS64-NEXT: daddu $1, $1, $25
3395; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4)))
3396; MIPS64-NEXT: ld $1, %got_disp(gv4f32)($1)
3397; MIPS64-NEXT: ld $2, 0($1)
3398; MIPS64-NEXT: ld $3, 8($1)
3399; MIPS64-NEXT: jr $ra
3400; MIPS64-NEXT: nop
3401;
3402; MIPS32R5-LABEL: ret_float_4:
3403; MIPS32R5: # %bb.0: # %entry
3404; MIPS32R5-NEXT: lui $1, %hi(gv4f32)
3405; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4f32)
3406; MIPS32R5-NEXT: ld.w $w0, 0($1)
3407; MIPS32R5-NEXT: st.w $w0, 0($4)
3408; MIPS32R5-NEXT: jr $ra
3409; MIPS32R5-NEXT: nop
3410;
3411; MIPS64R5-LABEL: ret_float_4:
3412; MIPS64R5: # %bb.0: # %entry
3413; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_4)))
3414; MIPS64R5-NEXT: daddu $1, $1, $25
3415; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4)))
3416; MIPS64R5-NEXT: ld $1, %got_disp(gv4f32)($1)
3417; MIPS64R5-NEXT: ld.d $w0, 0($1)
3418; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
3419; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
3420; MIPS64R5-NEXT: jr $ra
3421; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003422entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00003423 %0 = load <4 x float>, <4 x float> * @gv4f32
3424 ret <4 x float> %0
3425}
3426
3427@gv2f64 = global <2 x double> <double 0.0, double 0.0>
3428
3429define <2 x double> @ret_double_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003430; MIPS32-LABEL: ret_double_2:
3431; MIPS32: # %bb.0: # %entry
3432; MIPS32-NEXT: lui $1, %hi(gv2f64)
3433; MIPS32-NEXT: addiu $2, $1, %lo(gv2f64)
3434; MIPS32-NEXT: ldc1 $f0, 8($2)
3435; MIPS32-NEXT: sdc1 $f0, 8($4)
3436; MIPS32-NEXT: ldc1 $f0, %lo(gv2f64)($1)
3437; MIPS32-NEXT: sdc1 $f0, 0($4)
3438; MIPS32-NEXT: jr $ra
3439; MIPS32-NEXT: nop
3440;
3441; MIPS64-LABEL: ret_double_2:
3442; MIPS64: # %bb.0: # %entry
3443; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_double_2)))
3444; MIPS64-NEXT: daddu $1, $1, $25
3445; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2)))
3446; MIPS64-NEXT: ld $1, %got_disp(gv2f64)($1)
3447; MIPS64-NEXT: ld $2, 0($1)
3448; MIPS64-NEXT: ld $3, 8($1)
3449; MIPS64-NEXT: jr $ra
3450; MIPS64-NEXT: nop
3451;
3452; MIPS32R5-LABEL: ret_double_2:
3453; MIPS32R5: # %bb.0: # %entry
3454; MIPS32R5-NEXT: lui $1, %hi(gv2f64)
3455; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2f64)
3456; MIPS32R5-NEXT: ld.d $w0, 0($1)
3457; MIPS32R5-NEXT: st.d $w0, 0($4)
3458; MIPS32R5-NEXT: jr $ra
3459; MIPS32R5-NEXT: nop
3460;
3461; MIPS64R5-LABEL: ret_double_2:
3462; MIPS64R5: # %bb.0: # %entry
3463; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_double_2)))
3464; MIPS64R5-NEXT: daddu $1, $1, $25
3465; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2)))
3466; MIPS64R5-NEXT: ld $1, %got_disp(gv2f64)($1)
3467; MIPS64R5-NEXT: ld.d $w0, 0($1)
3468; MIPS64R5-NEXT: copy_s.d $2, $w0[0]
3469; MIPS64R5-NEXT: copy_s.d $3, $w0[1]
3470; MIPS64R5-NEXT: jr $ra
3471; MIPS64R5-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003472entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00003473 %0 = load <2 x double>, <2 x double> * @gv2f64
3474 ret <2 x double> %0
3475}
3476
3477; Test argument lowering and call result lowering.
3478
3479define void @call_i8_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003480; MIPS32EB-LABEL: call_i8_2:
3481; MIPS32EB: # %bb.0: # %entry
3482; MIPS32EB-NEXT: addiu $sp, $sp, -24
3483; MIPS32EB-NEXT: .cfi_def_cfa_offset 24
3484; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3485; MIPS32EB-NEXT: .cfi_offset 31, -4
3486; MIPS32EB-NEXT: addiu $4, $zero, 1543
3487; MIPS32EB-NEXT: addiu $5, $zero, 3080
3488; MIPS32EB-NEXT: jal i8_2
3489; MIPS32EB-NEXT: nop
3490; MIPS32EB-NEXT: srl $1, $2, 16
3491; MIPS32EB-NEXT: lui $3, %hi(gv2i8)
3492; MIPS32EB-NEXT: addiu $4, $3, %lo(gv2i8)
3493; MIPS32EB-NEXT: sb $1, 1($4)
3494; MIPS32EB-NEXT: srl $1, $2, 24
3495; MIPS32EB-NEXT: sb $1, %lo(gv2i8)($3)
3496; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3497; MIPS32EB-NEXT: addiu $sp, $sp, 24
3498; MIPS32EB-NEXT: jr $ra
3499; MIPS32EB-NEXT: nop
3500;
3501; MIPS64EB-LABEL: call_i8_2:
3502; MIPS64EB: # %bb.0: # %entry
3503; MIPS64EB-NEXT: daddiu $sp, $sp, -16
3504; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
3505; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
3506; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
3507; MIPS64EB-NEXT: .cfi_offset 31, -8
3508; MIPS64EB-NEXT: .cfi_offset 28, -16
3509; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3510; MIPS64EB-NEXT: daddu $1, $1, $25
3511; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3512; MIPS64EB-NEXT: ld $25, %call16(i8_2)($gp)
3513; MIPS64EB-NEXT: daddiu $4, $zero, 1543
3514; MIPS64EB-NEXT: daddiu $5, $zero, 3080
3515; MIPS64EB-NEXT: jalr $25
3516; MIPS64EB-NEXT: nop
3517; MIPS64EB-NEXT: dsrl $1, $2, 48
3518; MIPS64EB-NEXT: ld $3, %got_disp(gv2i8)($gp)
3519; MIPS64EB-NEXT: sb $1, 1($3)
3520; MIPS64EB-NEXT: dsrl $1, $2, 56
3521; MIPS64EB-NEXT: sb $1, 0($3)
3522; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
3523; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
3524; MIPS64EB-NEXT: daddiu $sp, $sp, 16
3525; MIPS64EB-NEXT: jr $ra
3526; MIPS64EB-NEXT: nop
3527;
3528; MIPS32R5EB-LABEL: call_i8_2:
3529; MIPS32R5EB: # %bb.0: # %entry
3530; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
3531; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
3532; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
3533; MIPS32R5EB-NEXT: .cfi_offset 31, -4
Nirav Dave07acc992018-10-10 14:15:52 +00003534; MIPS32R5EB-NEXT: addiu $4, $zero, 1543
3535; MIPS32R5EB-NEXT: addiu $5, $zero, 3080
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003536; MIPS32R5EB-NEXT: jal i8_2
3537; MIPS32R5EB-NEXT: nop
3538; MIPS32R5EB-NEXT: sw $2, 16($sp)
3539; MIPS32R5EB-NEXT: lui $1, %hi(gv2i8)
3540; MIPS32R5EB-NEXT: lhu $2, 16($sp)
3541; MIPS32R5EB-NEXT: sh $2, %lo(gv2i8)($1)
3542; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
3543; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
3544; MIPS32R5EB-NEXT: jr $ra
3545; MIPS32R5EB-NEXT: nop
3546;
3547; MIPS64R5EB-LABEL: call_i8_2:
3548; MIPS64R5EB: # %bb.0: # %entry
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003549; MIPS64R5EB-NEXT: daddiu $sp, $sp, -64
3550; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 64
3551; MIPS64R5EB-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill
3552; MIPS64R5EB-NEXT: sd $gp, 48($sp) # 8-byte Folded Spill
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003553; MIPS64R5EB-NEXT: .cfi_offset 31, -8
3554; MIPS64R5EB-NEXT: .cfi_offset 28, -16
3555; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3556; MIPS64R5EB-NEXT: daddu $1, $1, $25
3557; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3558; MIPS64R5EB-NEXT: addiu $1, $zero, 1543
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003559; MIPS64R5EB-NEXT: sh $1, 40($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003560; MIPS64R5EB-NEXT: addiu $1, $zero, 3080
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003561; MIPS64R5EB-NEXT: sh $1, 44($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003562; MIPS64R5EB-NEXT: ld $25, %call16(i8_2)($gp)
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003563; MIPS64R5EB-NEXT: lh $4, 40($sp)
3564; MIPS64R5EB-NEXT: lh $5, 44($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003565; MIPS64R5EB-NEXT: jalr $25
3566; MIPS64R5EB-NEXT: nop
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003567; MIPS64R5EB-NEXT: sd $2, 32($sp)
3568; MIPS64R5EB-NEXT: lbu $1, 33($sp)
3569; MIPS64R5EB-NEXT: sh $1, 2($sp)
3570; MIPS64R5EB-NEXT: lbu $1, 32($sp)
3571; MIPS64R5EB-NEXT: sh $1, 0($sp)
3572; MIPS64R5EB-NEXT: ld.h $w0, 0($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003573; MIPS64R5EB-NEXT: copy_s.h $1, $w0[0]
3574; MIPS64R5EB-NEXT: copy_s.h $2, $w0[1]
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003575; MIPS64R5EB-NEXT: sw $2, 28($sp)
3576; MIPS64R5EB-NEXT: sw $1, 20($sp)
3577; MIPS64R5EB-NEXT: ld.d $w0, 16($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003578; MIPS64R5EB-NEXT: copy_s.d $1, $w0[0]
3579; MIPS64R5EB-NEXT: copy_s.d $2, $w0[1]
3580; MIPS64R5EB-NEXT: ld $3, %got_disp(gv2i8)($gp)
3581; MIPS64R5EB-NEXT: sb $2, 1($3)
3582; MIPS64R5EB-NEXT: sb $1, 0($3)
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003583; MIPS64R5EB-NEXT: ld $gp, 48($sp) # 8-byte Folded Reload
3584; MIPS64R5EB-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload
3585; MIPS64R5EB-NEXT: daddiu $sp, $sp, 64
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003586; MIPS64R5EB-NEXT: jr $ra
3587; MIPS64R5EB-NEXT: nop
3588;
3589; MIPS32EL-LABEL: call_i8_2:
3590; MIPS32EL: # %bb.0: # %entry
3591; MIPS32EL-NEXT: addiu $sp, $sp, -24
3592; MIPS32EL-NEXT: .cfi_def_cfa_offset 24
3593; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3594; MIPS32EL-NEXT: .cfi_offset 31, -4
3595; MIPS32EL-NEXT: addiu $4, $zero, 1798
3596; MIPS32EL-NEXT: addiu $5, $zero, 2060
3597; MIPS32EL-NEXT: jal i8_2
3598; MIPS32EL-NEXT: nop
3599; MIPS32EL-NEXT: lui $1, %hi(gv2i8)
3600; MIPS32EL-NEXT: sb $2, %lo(gv2i8)($1)
3601; MIPS32EL-NEXT: srl $2, $2, 8
3602; MIPS32EL-NEXT: addiu $1, $1, %lo(gv2i8)
3603; MIPS32EL-NEXT: sb $2, 1($1)
3604; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3605; MIPS32EL-NEXT: addiu $sp, $sp, 24
3606; MIPS32EL-NEXT: jr $ra
3607; MIPS32EL-NEXT: nop
3608;
3609; MIPS64EL-LABEL: call_i8_2:
3610; MIPS64EL: # %bb.0: # %entry
3611; MIPS64EL-NEXT: daddiu $sp, $sp, -16
3612; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
3613; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
3614; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
3615; MIPS64EL-NEXT: .cfi_offset 31, -8
3616; MIPS64EL-NEXT: .cfi_offset 28, -16
3617; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3618; MIPS64EL-NEXT: daddu $1, $1, $25
3619; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3620; MIPS64EL-NEXT: ld $25, %call16(i8_2)($gp)
3621; MIPS64EL-NEXT: daddiu $4, $zero, 1798
3622; MIPS64EL-NEXT: daddiu $5, $zero, 2060
3623; MIPS64EL-NEXT: jalr $25
3624; MIPS64EL-NEXT: nop
3625; MIPS64EL-NEXT: sll $1, $2, 0
3626; MIPS64EL-NEXT: ld $2, %got_disp(gv2i8)($gp)
3627; MIPS64EL-NEXT: sb $1, 0($2)
3628; MIPS64EL-NEXT: srl $1, $1, 8
3629; MIPS64EL-NEXT: sb $1, 1($2)
3630; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
3631; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
3632; MIPS64EL-NEXT: daddiu $sp, $sp, 16
3633; MIPS64EL-NEXT: jr $ra
3634; MIPS64EL-NEXT: nop
3635;
3636; MIPS32R5EL-LABEL: call_i8_2:
3637; MIPS32R5EL: # %bb.0: # %entry
3638; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
3639; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
3640; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
3641; MIPS32R5EL-NEXT: .cfi_offset 31, -4
Nirav Dave07acc992018-10-10 14:15:52 +00003642; MIPS32R5EL-NEXT: addiu $4, $zero, 1798
3643; MIPS32R5EL-NEXT: addiu $5, $zero, 2060
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003644; MIPS32R5EL-NEXT: jal i8_2
3645; MIPS32R5EL-NEXT: nop
3646; MIPS32R5EL-NEXT: sw $2, 16($sp)
3647; MIPS32R5EL-NEXT: lui $1, %hi(gv2i8)
3648; MIPS32R5EL-NEXT: lhu $2, 16($sp)
3649; MIPS32R5EL-NEXT: sh $2, %lo(gv2i8)($1)
3650; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
3651; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
3652; MIPS32R5EL-NEXT: jr $ra
3653; MIPS32R5EL-NEXT: nop
3654;
3655; MIPS64R5EL-LABEL: call_i8_2:
3656; MIPS64R5EL: # %bb.0: # %entry
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003657; MIPS64R5EL-NEXT: daddiu $sp, $sp, -64
3658; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 64
3659; MIPS64R5EL-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill
3660; MIPS64R5EL-NEXT: sd $gp, 48($sp) # 8-byte Folded Spill
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003661; MIPS64R5EL-NEXT: .cfi_offset 31, -8
3662; MIPS64R5EL-NEXT: .cfi_offset 28, -16
3663; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2)))
3664; MIPS64R5EL-NEXT: daddu $1, $1, $25
3665; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2)))
3666; MIPS64R5EL-NEXT: addiu $1, $zero, 1798
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003667; MIPS64R5EL-NEXT: sh $1, 40($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003668; MIPS64R5EL-NEXT: addiu $1, $zero, 2060
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003669; MIPS64R5EL-NEXT: sh $1, 44($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003670; MIPS64R5EL-NEXT: ld $25, %call16(i8_2)($gp)
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003671; MIPS64R5EL-NEXT: lh $4, 40($sp)
3672; MIPS64R5EL-NEXT: lh $5, 44($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003673; MIPS64R5EL-NEXT: jalr $25
3674; MIPS64R5EL-NEXT: nop
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003675; MIPS64R5EL-NEXT: sd $2, 32($sp)
3676; MIPS64R5EL-NEXT: lbu $1, 33($sp)
3677; MIPS64R5EL-NEXT: sh $1, 2($sp)
3678; MIPS64R5EL-NEXT: lbu $1, 32($sp)
3679; MIPS64R5EL-NEXT: sh $1, 0($sp)
3680; MIPS64R5EL-NEXT: ld.h $w0, 0($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003681; MIPS64R5EL-NEXT: copy_s.h $1, $w0[0]
3682; MIPS64R5EL-NEXT: copy_s.h $2, $w0[1]
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003683; MIPS64R5EL-NEXT: sw $2, 24($sp)
3684; MIPS64R5EL-NEXT: sw $1, 16($sp)
3685; MIPS64R5EL-NEXT: ld.d $w0, 16($sp)
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003686; MIPS64R5EL-NEXT: copy_s.d $1, $w0[0]
3687; MIPS64R5EL-NEXT: copy_s.d $2, $w0[1]
3688; MIPS64R5EL-NEXT: ld $3, %got_disp(gv2i8)($gp)
3689; MIPS64R5EL-NEXT: sb $2, 1($3)
3690; MIPS64R5EL-NEXT: sb $1, 0($3)
Simon Pilgrime4d12bb2018-07-17 09:45:35 +00003691; MIPS64R5EL-NEXT: ld $gp, 48($sp) # 8-byte Folded Reload
3692; MIPS64R5EL-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload
3693; MIPS64R5EL-NEXT: daddiu $sp, $sp, 64
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003694; MIPS64R5EL-NEXT: jr $ra
3695; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003696entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00003697 %0 = call <2 x i8> @i8_2(<2 x i8> <i8 6, i8 7>, <2 x i8> <i8 12, i8 8>)
3698 store <2 x i8> %0, <2 x i8> * @gv2i8
3699 ret void
3700}
3701
3702define void @call_i8_4() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003703; MIPS32EB-LABEL: call_i8_4:
3704; MIPS32EB: # %bb.0: # %entry
3705; MIPS32EB-NEXT: addiu $sp, $sp, -24
3706; MIPS32EB-NEXT: .cfi_def_cfa_offset 24
3707; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3708; MIPS32EB-NEXT: .cfi_offset 31, -4
3709; MIPS32EB-NEXT: lui $1, 1543
3710; MIPS32EB-NEXT: ori $4, $1, 2314
3711; MIPS32EB-NEXT: lui $1, 3080
3712; MIPS32EB-NEXT: ori $5, $1, 2314
3713; MIPS32EB-NEXT: jal i8_4
3714; MIPS32EB-NEXT: nop
3715; MIPS32EB-NEXT: lui $1, %hi(gv4i8)
3716; MIPS32EB-NEXT: sw $2, %lo(gv4i8)($1)
3717; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3718; MIPS32EB-NEXT: addiu $sp, $sp, 24
3719; MIPS32EB-NEXT: jr $ra
3720; MIPS32EB-NEXT: nop
3721;
3722; MIPS64EB-LABEL: call_i8_4:
3723; MIPS64EB: # %bb.0: # %entry
3724; MIPS64EB-NEXT: daddiu $sp, $sp, -16
3725; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
3726; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
3727; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
3728; MIPS64EB-NEXT: .cfi_offset 31, -8
3729; MIPS64EB-NEXT: .cfi_offset 28, -16
3730; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3731; MIPS64EB-NEXT: daddu $1, $1, $25
3732; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3733; MIPS64EB-NEXT: lui $1, 1543
3734; MIPS64EB-NEXT: ori $4, $1, 2314
3735; MIPS64EB-NEXT: lui $1, 3080
3736; MIPS64EB-NEXT: ori $5, $1, 2314
3737; MIPS64EB-NEXT: ld $25, %call16(i8_4)($gp)
3738; MIPS64EB-NEXT: jalr $25
3739; MIPS64EB-NEXT: nop
3740; MIPS64EB-NEXT: ld $1, %got_disp(gv4i8)($gp)
3741; MIPS64EB-NEXT: sw $2, 0($1)
3742; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
3743; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
3744; MIPS64EB-NEXT: daddiu $sp, $sp, 16
3745; MIPS64EB-NEXT: jr $ra
3746; MIPS64EB-NEXT: nop
3747;
3748; MIPS32R5EB-LABEL: call_i8_4:
3749; MIPS32R5EB: # %bb.0: # %entry
3750; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
3751; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
3752; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
3753; MIPS32R5EB-NEXT: .cfi_offset 31, -4
3754; MIPS32R5EB-NEXT: lui $1, 1543
3755; MIPS32R5EB-NEXT: ori $4, $1, 2314
3756; MIPS32R5EB-NEXT: lui $1, 3080
3757; MIPS32R5EB-NEXT: ori $5, $1, 2314
3758; MIPS32R5EB-NEXT: jal i8_4
3759; MIPS32R5EB-NEXT: nop
3760; MIPS32R5EB-NEXT: lui $1, %hi(gv4i8)
3761; MIPS32R5EB-NEXT: sw $2, %lo(gv4i8)($1)
3762; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
3763; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
3764; MIPS32R5EB-NEXT: jr $ra
3765; MIPS32R5EB-NEXT: nop
3766;
3767; MIPS64R5EB-LABEL: call_i8_4:
3768; MIPS64R5EB: # %bb.0: # %entry
3769; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
3770; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
3771; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
3772; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
3773; MIPS64R5EB-NEXT: .cfi_offset 31, -8
3774; MIPS64R5EB-NEXT: .cfi_offset 28, -16
3775; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3776; MIPS64R5EB-NEXT: daddu $1, $1, $25
3777; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3778; MIPS64R5EB-NEXT: lui $1, 1543
3779; MIPS64R5EB-NEXT: ori $4, $1, 2314
3780; MIPS64R5EB-NEXT: lui $1, 3080
3781; MIPS64R5EB-NEXT: ori $5, $1, 2314
3782; MIPS64R5EB-NEXT: ld $25, %call16(i8_4)($gp)
3783; MIPS64R5EB-NEXT: jalr $25
3784; MIPS64R5EB-NEXT: nop
3785; MIPS64R5EB-NEXT: ld $1, %got_disp(gv4i8)($gp)
3786; MIPS64R5EB-NEXT: sw $2, 0($1)
3787; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
3788; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
3789; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
3790; MIPS64R5EB-NEXT: jr $ra
3791; MIPS64R5EB-NEXT: nop
3792;
3793; MIPS32EL-LABEL: call_i8_4:
3794; MIPS32EL: # %bb.0: # %entry
3795; MIPS32EL-NEXT: addiu $sp, $sp, -24
3796; MIPS32EL-NEXT: .cfi_def_cfa_offset 24
3797; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3798; MIPS32EL-NEXT: .cfi_offset 31, -4
3799; MIPS32EL-NEXT: lui $1, 2569
3800; MIPS32EL-NEXT: ori $4, $1, 1798
3801; MIPS32EL-NEXT: ori $5, $1, 2060
3802; MIPS32EL-NEXT: jal i8_4
3803; MIPS32EL-NEXT: nop
3804; MIPS32EL-NEXT: lui $1, %hi(gv4i8)
3805; MIPS32EL-NEXT: sw $2, %lo(gv4i8)($1)
3806; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3807; MIPS32EL-NEXT: addiu $sp, $sp, 24
3808; MIPS32EL-NEXT: jr $ra
3809; MIPS32EL-NEXT: nop
3810;
3811; MIPS64EL-LABEL: call_i8_4:
3812; MIPS64EL: # %bb.0: # %entry
3813; MIPS64EL-NEXT: daddiu $sp, $sp, -16
3814; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
3815; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
3816; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
3817; MIPS64EL-NEXT: .cfi_offset 31, -8
3818; MIPS64EL-NEXT: .cfi_offset 28, -16
3819; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3820; MIPS64EL-NEXT: daddu $1, $1, $25
3821; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3822; MIPS64EL-NEXT: lui $1, 2569
3823; MIPS64EL-NEXT: ori $4, $1, 1798
3824; MIPS64EL-NEXT: ori $5, $1, 2060
3825; MIPS64EL-NEXT: ld $25, %call16(i8_4)($gp)
3826; MIPS64EL-NEXT: jalr $25
3827; MIPS64EL-NEXT: nop
3828; MIPS64EL-NEXT: ld $1, %got_disp(gv4i8)($gp)
3829; MIPS64EL-NEXT: sw $2, 0($1)
3830; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
3831; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
3832; MIPS64EL-NEXT: daddiu $sp, $sp, 16
3833; MIPS64EL-NEXT: jr $ra
3834; MIPS64EL-NEXT: nop
3835;
3836; MIPS32R5EL-LABEL: call_i8_4:
3837; MIPS32R5EL: # %bb.0: # %entry
3838; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
3839; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
3840; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
3841; MIPS32R5EL-NEXT: .cfi_offset 31, -4
3842; MIPS32R5EL-NEXT: lui $1, 2569
3843; MIPS32R5EL-NEXT: ori $4, $1, 1798
3844; MIPS32R5EL-NEXT: ori $5, $1, 2060
3845; MIPS32R5EL-NEXT: jal i8_4
3846; MIPS32R5EL-NEXT: nop
3847; MIPS32R5EL-NEXT: lui $1, %hi(gv4i8)
3848; MIPS32R5EL-NEXT: sw $2, %lo(gv4i8)($1)
3849; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
3850; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
3851; MIPS32R5EL-NEXT: jr $ra
3852; MIPS32R5EL-NEXT: nop
3853;
3854; MIPS64R5EL-LABEL: call_i8_4:
3855; MIPS64R5EL: # %bb.0: # %entry
3856; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
3857; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
3858; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
3859; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
3860; MIPS64R5EL-NEXT: .cfi_offset 31, -8
3861; MIPS64R5EL-NEXT: .cfi_offset 28, -16
3862; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4)))
3863; MIPS64R5EL-NEXT: daddu $1, $1, $25
3864; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4)))
3865; MIPS64R5EL-NEXT: lui $1, 2569
3866; MIPS64R5EL-NEXT: ori $4, $1, 1798
3867; MIPS64R5EL-NEXT: ori $5, $1, 2060
3868; MIPS64R5EL-NEXT: ld $25, %call16(i8_4)($gp)
3869; MIPS64R5EL-NEXT: jalr $25
3870; MIPS64R5EL-NEXT: nop
3871; MIPS64R5EL-NEXT: ld $1, %got_disp(gv4i8)($gp)
3872; MIPS64R5EL-NEXT: sw $2, 0($1)
3873; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
3874; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
3875; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
3876; MIPS64R5EL-NEXT: jr $ra
3877; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00003878entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00003879 %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>)
3880 store <4 x i8> %0, <4 x i8> * @gv4i8
3881 ret void
3882}
3883
3884define void @call_i8_8() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00003885; MIPS32EB-LABEL: call_i8_8:
3886; MIPS32EB: # %bb.0: # %entry
3887; MIPS32EB-NEXT: addiu $sp, $sp, -24
3888; MIPS32EB-NEXT: .cfi_def_cfa_offset 24
3889; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3890; MIPS32EB-NEXT: .cfi_offset 31, -4
3891; MIPS32EB-NEXT: lui $1, 3080
3892; MIPS32EB-NEXT: ori $6, $1, 2314
3893; MIPS32EB-NEXT: lui $1, 1543
3894; MIPS32EB-NEXT: ori $4, $1, 2314
3895; MIPS32EB-NEXT: move $5, $4
3896; MIPS32EB-NEXT: move $7, $4
3897; MIPS32EB-NEXT: jal i8_8
3898; MIPS32EB-NEXT: nop
3899; MIPS32EB-NEXT: lui $1, %hi(gv8i8)
3900; MIPS32EB-NEXT: addiu $4, $1, %lo(gv8i8)
3901; MIPS32EB-NEXT: sw $3, 4($4)
3902; MIPS32EB-NEXT: sw $2, %lo(gv8i8)($1)
3903; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3904; MIPS32EB-NEXT: addiu $sp, $sp, 24
3905; MIPS32EB-NEXT: jr $ra
3906; MIPS32EB-NEXT: nop
3907;
3908; MIPS64EB-LABEL: call_i8_8:
3909; MIPS64EB: # %bb.0: # %entry
3910; MIPS64EB-NEXT: daddiu $sp, $sp, -16
3911; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
3912; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
3913; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
3914; MIPS64EB-NEXT: .cfi_offset 31, -8
3915; MIPS64EB-NEXT: .cfi_offset 28, -16
3916; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8)))
3917; MIPS64EB-NEXT: daddu $1, $1, $25
3918; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
3919; MIPS64EB-NEXT: lui $1, 772
3920; MIPS64EB-NEXT: daddiu $1, $1, -31611
3921; MIPS64EB-NEXT: dsll $1, $1, 17
3922; MIPS64EB-NEXT: daddiu $1, $1, 1543
3923; MIPS64EB-NEXT: dsll $1, $1, 16
3924; MIPS64EB-NEXT: daddiu $4, $1, 2314
3925; MIPS64EB-NEXT: lui $1, 1540
3926; MIPS64EB-NEXT: daddiu $1, $1, 1157
3927; MIPS64EB-NEXT: dsll $1, $1, 17
3928; MIPS64EB-NEXT: daddiu $1, $1, 1543
3929; MIPS64EB-NEXT: dsll $1, $1, 16
3930; MIPS64EB-NEXT: daddiu $5, $1, 2314
3931; MIPS64EB-NEXT: ld $25, %call16(i8_8)($gp)
3932; MIPS64EB-NEXT: jalr $25
3933; MIPS64EB-NEXT: nop
3934; MIPS64EB-NEXT: ld $1, %got_disp(gv8i8)($gp)
3935; MIPS64EB-NEXT: sd $2, 0($1)
3936; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
3937; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
3938; MIPS64EB-NEXT: daddiu $sp, $sp, 16
3939; MIPS64EB-NEXT: jr $ra
3940; MIPS64EB-NEXT: nop
3941;
3942; MIPS32R5EB-LABEL: call_i8_8:
3943; MIPS32R5EB: # %bb.0: # %entry
3944; MIPS32R5EB-NEXT: addiu $sp, $sp, -24
3945; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 24
3946; MIPS32R5EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
3947; MIPS32R5EB-NEXT: .cfi_offset 31, -4
3948; MIPS32R5EB-NEXT: lui $1, 3080
3949; MIPS32R5EB-NEXT: ori $6, $1, 2314
3950; MIPS32R5EB-NEXT: lui $1, 1543
3951; MIPS32R5EB-NEXT: ori $4, $1, 2314
3952; MIPS32R5EB-NEXT: move $5, $4
3953; MIPS32R5EB-NEXT: move $7, $4
3954; MIPS32R5EB-NEXT: jal i8_8
3955; MIPS32R5EB-NEXT: nop
3956; MIPS32R5EB-NEXT: lui $1, %hi(gv8i8)
3957; MIPS32R5EB-NEXT: addiu $4, $1, %lo(gv8i8)
3958; MIPS32R5EB-NEXT: sw $3, 4($4)
3959; MIPS32R5EB-NEXT: sw $2, %lo(gv8i8)($1)
3960; MIPS32R5EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
3961; MIPS32R5EB-NEXT: addiu $sp, $sp, 24
3962; MIPS32R5EB-NEXT: jr $ra
3963; MIPS32R5EB-NEXT: nop
3964;
3965; MIPS64R5EB-LABEL: call_i8_8:
3966; MIPS64R5EB: # %bb.0: # %entry
3967; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
3968; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
3969; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
3970; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
3971; MIPS64R5EB-NEXT: .cfi_offset 31, -8
3972; MIPS64R5EB-NEXT: .cfi_offset 28, -16
3973; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8)))
3974; MIPS64R5EB-NEXT: daddu $1, $1, $25
3975; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
3976; MIPS64R5EB-NEXT: lui $1, 772
3977; MIPS64R5EB-NEXT: daddiu $1, $1, -31611
3978; MIPS64R5EB-NEXT: dsll $1, $1, 17
3979; MIPS64R5EB-NEXT: daddiu $1, $1, 1543
3980; MIPS64R5EB-NEXT: dsll $1, $1, 16
3981; MIPS64R5EB-NEXT: daddiu $4, $1, 2314
3982; MIPS64R5EB-NEXT: lui $1, 1540
3983; MIPS64R5EB-NEXT: daddiu $1, $1, 1157
3984; MIPS64R5EB-NEXT: dsll $1, $1, 17
3985; MIPS64R5EB-NEXT: daddiu $1, $1, 1543
3986; MIPS64R5EB-NEXT: dsll $1, $1, 16
3987; MIPS64R5EB-NEXT: daddiu $5, $1, 2314
3988; MIPS64R5EB-NEXT: ld $25, %call16(i8_8)($gp)
3989; MIPS64R5EB-NEXT: jalr $25
3990; MIPS64R5EB-NEXT: nop
3991; MIPS64R5EB-NEXT: ld $1, %got_disp(gv8i8)($gp)
3992; MIPS64R5EB-NEXT: sd $2, 0($1)
3993; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
3994; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
3995; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
3996; MIPS64R5EB-NEXT: jr $ra
3997; MIPS64R5EB-NEXT: nop
3998;
3999; MIPS32EL-LABEL: call_i8_8:
4000; MIPS32EL: # %bb.0: # %entry
4001; MIPS32EL-NEXT: addiu $sp, $sp, -24
4002; MIPS32EL-NEXT: .cfi_def_cfa_offset 24
4003; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4004; MIPS32EL-NEXT: .cfi_offset 31, -4
4005; MIPS32EL-NEXT: lui $1, 2569
4006; MIPS32EL-NEXT: ori $6, $1, 2060
4007; MIPS32EL-NEXT: ori $4, $1, 1798
4008; MIPS32EL-NEXT: move $5, $4
4009; MIPS32EL-NEXT: move $7, $4
4010; MIPS32EL-NEXT: jal i8_8
4011; MIPS32EL-NEXT: nop
4012; MIPS32EL-NEXT: lui $1, %hi(gv8i8)
4013; MIPS32EL-NEXT: addiu $4, $1, %lo(gv8i8)
4014; MIPS32EL-NEXT: sw $3, 4($4)
4015; MIPS32EL-NEXT: sw $2, %lo(gv8i8)($1)
4016; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4017; MIPS32EL-NEXT: addiu $sp, $sp, 24
4018; MIPS32EL-NEXT: jr $ra
4019; MIPS32EL-NEXT: nop
4020;
4021; MIPS64EL-LABEL: call_i8_8:
4022; MIPS64EL: # %bb.0: # %entry
4023; MIPS64EL-NEXT: daddiu $sp, $sp, -16
4024; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
4025; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4026; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4027; MIPS64EL-NEXT: .cfi_offset 31, -8
4028; MIPS64EL-NEXT: .cfi_offset 28, -16
4029; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8)))
4030; MIPS64EL-NEXT: daddu $1, $1, $25
4031; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
4032; MIPS64EL-NEXT: lui $1, 1285
4033; MIPS64EL-NEXT: daddiu $1, $1, -31869
4034; MIPS64EL-NEXT: dsll $1, $1, 17
4035; MIPS64EL-NEXT: daddiu $1, $1, 2569
4036; MIPS64EL-NEXT: dsll $1, $1, 16
4037; MIPS64EL-NEXT: daddiu $4, $1, 1798
4038; MIPS64EL-NEXT: daddiu $5, $1, 2060
4039; MIPS64EL-NEXT: ld $25, %call16(i8_8)($gp)
4040; MIPS64EL-NEXT: jalr $25
4041; MIPS64EL-NEXT: nop
4042; MIPS64EL-NEXT: ld $1, %got_disp(gv8i8)($gp)
4043; MIPS64EL-NEXT: sd $2, 0($1)
4044; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4045; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4046; MIPS64EL-NEXT: daddiu $sp, $sp, 16
4047; MIPS64EL-NEXT: jr $ra
4048; MIPS64EL-NEXT: nop
4049;
4050; MIPS32R5EL-LABEL: call_i8_8:
4051; MIPS32R5EL: # %bb.0: # %entry
4052; MIPS32R5EL-NEXT: addiu $sp, $sp, -24
4053; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 24
4054; MIPS32R5EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4055; MIPS32R5EL-NEXT: .cfi_offset 31, -4
4056; MIPS32R5EL-NEXT: lui $1, 2569
4057; MIPS32R5EL-NEXT: ori $6, $1, 2060
4058; MIPS32R5EL-NEXT: ori $4, $1, 1798
4059; MIPS32R5EL-NEXT: move $5, $4
4060; MIPS32R5EL-NEXT: move $7, $4
4061; MIPS32R5EL-NEXT: jal i8_8
4062; MIPS32R5EL-NEXT: nop
4063; MIPS32R5EL-NEXT: lui $1, %hi(gv8i8)
4064; MIPS32R5EL-NEXT: addiu $4, $1, %lo(gv8i8)
4065; MIPS32R5EL-NEXT: sw $3, 4($4)
4066; MIPS32R5EL-NEXT: sw $2, %lo(gv8i8)($1)
4067; MIPS32R5EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4068; MIPS32R5EL-NEXT: addiu $sp, $sp, 24
4069; MIPS32R5EL-NEXT: jr $ra
4070; MIPS32R5EL-NEXT: nop
4071;
4072; MIPS64R5EL-LABEL: call_i8_8:
4073; MIPS64R5EL: # %bb.0: # %entry
4074; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
4075; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
4076; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
4077; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
4078; MIPS64R5EL-NEXT: .cfi_offset 31, -8
4079; MIPS64R5EL-NEXT: .cfi_offset 28, -16
4080; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8)))
4081; MIPS64R5EL-NEXT: daddu $1, $1, $25
4082; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8)))
4083; MIPS64R5EL-NEXT: lui $1, 1285
4084; MIPS64R5EL-NEXT: daddiu $1, $1, -31869
4085; MIPS64R5EL-NEXT: dsll $1, $1, 17
4086; MIPS64R5EL-NEXT: daddiu $1, $1, 2569
4087; MIPS64R5EL-NEXT: dsll $1, $1, 16
4088; MIPS64R5EL-NEXT: daddiu $4, $1, 1798
4089; MIPS64R5EL-NEXT: daddiu $5, $1, 2060
4090; MIPS64R5EL-NEXT: ld $25, %call16(i8_8)($gp)
4091; MIPS64R5EL-NEXT: jalr $25
4092; MIPS64R5EL-NEXT: nop
4093; MIPS64R5EL-NEXT: ld $1, %got_disp(gv8i8)($gp)
4094; MIPS64R5EL-NEXT: sd $2, 0($1)
4095; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
4096; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
4097; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
4098; MIPS64R5EL-NEXT: jr $ra
4099; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00004100entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00004101 %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>)
4102 store <8 x i8> %0, <8 x i8> * @gv8i8
4103 ret void
4104}
4105
4106define void @calli8_16() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00004107; MIPS32EB-LABEL: calli8_16:
4108; MIPS32EB: # %bb.0: # %entry
4109; MIPS32EB-NEXT: addiu $sp, $sp, -40
4110; MIPS32EB-NEXT: .cfi_def_cfa_offset 40
4111; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4112; MIPS32EB-NEXT: .cfi_offset 31, -4
4113; MIPS32EB-NEXT: lui $1, 3080
4114; MIPS32EB-NEXT: ori $1, $1, 2314
4115; MIPS32EB-NEXT: lui $2, 1801
4116; MIPS32EB-NEXT: sw $1, 28($sp)
4117; MIPS32EB-NEXT: ori $1, $2, 1801
4118; MIPS32EB-NEXT: sw $1, 24($sp)
4119; MIPS32EB-NEXT: sw $1, 20($sp)
4120; MIPS32EB-NEXT: sw $1, 16($sp)
4121; MIPS32EB-NEXT: lui $1, 1543
4122; MIPS32EB-NEXT: ori $4, $1, 1543
4123; MIPS32EB-NEXT: ori $7, $1, 2314
4124; MIPS32EB-NEXT: move $5, $4
4125; MIPS32EB-NEXT: move $6, $4
4126; MIPS32EB-NEXT: jal i8_16
4127; MIPS32EB-NEXT: nop
4128; MIPS32EB-NEXT: lui $1, %hi(gv16i8)
4129; MIPS32EB-NEXT: addiu $6, $1, %lo(gv16i8)
4130; MIPS32EB-NEXT: sw $5, 12($6)
4131; MIPS32EB-NEXT: sw $4, 8($6)
4132; MIPS32EB-NEXT: sw $3, 4($6)
4133; MIPS32EB-NEXT: sw $2, %lo(gv16i8)($1)
4134; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4135; MIPS32EB-NEXT: addiu $sp, $sp, 40
4136; MIPS32EB-NEXT: jr $ra
4137; MIPS32EB-NEXT: nop
4138;
4139; MIPS64EB-LABEL: calli8_16:
4140; MIPS64EB: # %bb.0: # %entry
4141; MIPS64EB-NEXT: daddiu $sp, $sp, -16
4142; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
4143; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4144; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4145; MIPS64EB-NEXT: .cfi_offset 31, -8
4146; MIPS64EB-NEXT: .cfi_offset 28, -16
4147; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16)))
4148; MIPS64EB-NEXT: daddu $1, $1, $25
4149; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4150; MIPS64EB-NEXT: lui $1, 1801
4151; MIPS64EB-NEXT: daddiu $1, $1, 1801
4152; MIPS64EB-NEXT: dsll $1, $1, 16
4153; MIPS64EB-NEXT: daddiu $1, $1, 1801
4154; MIPS64EB-NEXT: lui $2, 1543
4155; MIPS64EB-NEXT: dsll $1, $1, 16
4156; MIPS64EB-NEXT: daddiu $2, $2, 1543
4157; MIPS64EB-NEXT: dsll $2, $2, 16
4158; MIPS64EB-NEXT: daddiu $2, $2, 1543
4159; MIPS64EB-NEXT: dsll $2, $2, 16
4160; MIPS64EB-NEXT: daddiu $4, $2, 1543
4161; MIPS64EB-NEXT: daddiu $5, $2, 2314
4162; MIPS64EB-NEXT: daddiu $6, $1, 1801
4163; MIPS64EB-NEXT: lui $1, 225
4164; MIPS64EB-NEXT: daddiu $1, $1, 8417
4165; MIPS64EB-NEXT: dsll $1, $1, 16
4166; MIPS64EB-NEXT: daddiu $1, $1, 8577
4167; MIPS64EB-NEXT: dsll $1, $1, 19
4168; MIPS64EB-NEXT: daddiu $7, $1, 2314
4169; MIPS64EB-NEXT: ld $25, %call16(i8_16)($gp)
4170; MIPS64EB-NEXT: jalr $25
4171; MIPS64EB-NEXT: nop
4172; MIPS64EB-NEXT: ld $1, %got_disp(gv16i8)($gp)
4173; MIPS64EB-NEXT: sd $3, 8($1)
4174; MIPS64EB-NEXT: sd $2, 0($1)
4175; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4176; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4177; MIPS64EB-NEXT: daddiu $sp, $sp, 16
4178; MIPS64EB-NEXT: jr $ra
4179; MIPS64EB-NEXT: nop
4180;
4181; MIPS32R5-LABEL: calli8_16:
4182; MIPS32R5: # %bb.0: # %entry
4183; MIPS32R5-NEXT: addiu $sp, $sp, -40
4184; MIPS32R5-NEXT: .cfi_def_cfa_offset 40
4185; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4186; MIPS32R5-NEXT: .cfi_offset 31, -4
4187; MIPS32R5-NEXT: lui $1, %hi($CPI30_0)
4188; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI30_0)
4189; MIPS32R5-NEXT: ld.w $w0, 0($1)
4190; MIPS32R5-NEXT: copy_s.w $4, $w0[0]
4191; MIPS32R5-NEXT: copy_s.w $5, $w0[1]
4192; MIPS32R5-NEXT: copy_s.w $6, $w0[2]
4193; MIPS32R5-NEXT: copy_s.w $7, $w0[3]
4194; MIPS32R5-NEXT: lui $1, %hi($CPI30_1)
4195; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI30_1)
4196; MIPS32R5-NEXT: ld.w $w0, 0($1)
4197; MIPS32R5-NEXT: copy_s.w $1, $w0[0]
4198; MIPS32R5-NEXT: copy_s.w $2, $w0[1]
4199; MIPS32R5-NEXT: copy_s.w $3, $w0[2]
4200; MIPS32R5-NEXT: copy_s.w $8, $w0[3]
4201; MIPS32R5-NEXT: sw $8, 28($sp)
4202; MIPS32R5-NEXT: sw $3, 24($sp)
4203; MIPS32R5-NEXT: sw $2, 20($sp)
4204; MIPS32R5-NEXT: sw $1, 16($sp)
4205; MIPS32R5-NEXT: jal i8_16
4206; MIPS32R5-NEXT: nop
4207; MIPS32R5-NEXT: ldi.b $w0, 0
4208; MIPS32R5-NEXT: insert.w $w0[0], $2
4209; MIPS32R5-NEXT: lui $1, %hi(gv16i8)
4210; MIPS32R5-NEXT: insert.w $w0[1], $3
4211; MIPS32R5-NEXT: addiu $1, $1, %lo(gv16i8)
4212; MIPS32R5-NEXT: insert.w $w0[2], $4
4213; MIPS32R5-NEXT: insert.w $w0[3], $5
4214; MIPS32R5-NEXT: st.w $w0, 0($1)
4215; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4216; MIPS32R5-NEXT: addiu $sp, $sp, 40
4217; MIPS32R5-NEXT: jr $ra
4218; MIPS32R5-NEXT: nop
4219;
4220; MIPS64R5-LABEL: calli8_16:
4221; MIPS64R5: # %bb.0: # %entry
4222; MIPS64R5-NEXT: daddiu $sp, $sp, -16
4223; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
4224; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4225; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4226; MIPS64R5-NEXT: .cfi_offset 31, -8
4227; MIPS64R5-NEXT: .cfi_offset 28, -16
4228; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16)))
4229; MIPS64R5-NEXT: daddu $1, $1, $25
4230; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4231; MIPS64R5-NEXT: ld $1, %got_page(.LCPI30_0)($gp)
4232; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI30_0)
4233; MIPS64R5-NEXT: ld.d $w0, 0($1)
4234; MIPS64R5-NEXT: copy_s.d $4, $w0[0]
4235; MIPS64R5-NEXT: copy_s.d $5, $w0[1]
4236; MIPS64R5-NEXT: ld $1, %got_page(.LCPI30_1)($gp)
4237; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI30_1)
4238; MIPS64R5-NEXT: ld.d $w0, 0($1)
4239; MIPS64R5-NEXT: copy_s.d $6, $w0[0]
4240; MIPS64R5-NEXT: copy_s.d $7, $w0[1]
4241; MIPS64R5-NEXT: ld $25, %call16(i8_16)($gp)
4242; MIPS64R5-NEXT: jalr $25
4243; MIPS64R5-NEXT: nop
4244; MIPS64R5-NEXT: ldi.b $w0, 0
4245; MIPS64R5-NEXT: insert.d $w0[0], $2
4246; MIPS64R5-NEXT: insert.d $w0[1], $3
4247; MIPS64R5-NEXT: ld $1, %got_disp(gv16i8)($gp)
4248; MIPS64R5-NEXT: st.d $w0, 0($1)
4249; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4250; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4251; MIPS64R5-NEXT: daddiu $sp, $sp, 16
4252; MIPS64R5-NEXT: jr $ra
4253; MIPS64R5-NEXT: nop
4254;
4255; MIPS32EL-LABEL: calli8_16:
4256; MIPS32EL: # %bb.0: # %entry
4257; MIPS32EL-NEXT: addiu $sp, $sp, -40
4258; MIPS32EL-NEXT: .cfi_def_cfa_offset 40
4259; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4260; MIPS32EL-NEXT: .cfi_offset 31, -4
4261; MIPS32EL-NEXT: lui $1, 2569
4262; MIPS32EL-NEXT: ori $2, $1, 2060
4263; MIPS32EL-NEXT: lui $3, 2311
4264; MIPS32EL-NEXT: sw $2, 28($sp)
4265; MIPS32EL-NEXT: ori $2, $3, 2311
4266; MIPS32EL-NEXT: sw $2, 24($sp)
4267; MIPS32EL-NEXT: sw $2, 20($sp)
4268; MIPS32EL-NEXT: sw $2, 16($sp)
4269; MIPS32EL-NEXT: lui $2, 1798
4270; MIPS32EL-NEXT: ori $4, $2, 1798
4271; MIPS32EL-NEXT: ori $7, $1, 1798
4272; MIPS32EL-NEXT: move $5, $4
4273; MIPS32EL-NEXT: move $6, $4
4274; MIPS32EL-NEXT: jal i8_16
4275; MIPS32EL-NEXT: nop
4276; MIPS32EL-NEXT: lui $1, %hi(gv16i8)
4277; MIPS32EL-NEXT: addiu $6, $1, %lo(gv16i8)
4278; MIPS32EL-NEXT: sw $5, 12($6)
4279; MIPS32EL-NEXT: sw $4, 8($6)
4280; MIPS32EL-NEXT: sw $3, 4($6)
4281; MIPS32EL-NEXT: sw $2, %lo(gv16i8)($1)
4282; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4283; MIPS32EL-NEXT: addiu $sp, $sp, 40
4284; MIPS32EL-NEXT: jr $ra
4285; MIPS32EL-NEXT: nop
4286;
4287; MIPS64EL-LABEL: calli8_16:
4288; MIPS64EL: # %bb.0: # %entry
4289; MIPS64EL-NEXT: daddiu $sp, $sp, -16
4290; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
4291; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4292; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4293; MIPS64EL-NEXT: .cfi_offset 31, -8
4294; MIPS64EL-NEXT: .cfi_offset 28, -16
4295; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16)))
4296; MIPS64EL-NEXT: daddu $1, $1, $25
4297; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16)))
4298; MIPS64EL-NEXT: lui $1, 1285
4299; MIPS64EL-NEXT: daddiu $1, $1, -31869
4300; MIPS64EL-NEXT: dsll $1, $1, 16
4301; MIPS64EL-NEXT: daddiu $1, $1, 899
4302; MIPS64EL-NEXT: lui $2, 2311
4303; MIPS64EL-NEXT: daddiu $2, $2, 2311
4304; MIPS64EL-NEXT: dsll $2, $2, 16
4305; MIPS64EL-NEXT: daddiu $2, $2, 2311
4306; MIPS64EL-NEXT: dsll $2, $2, 16
4307; MIPS64EL-NEXT: dsll $1, $1, 17
4308; MIPS64EL-NEXT: lui $3, 899
4309; MIPS64EL-NEXT: daddiu $3, $3, 899
4310; MIPS64EL-NEXT: dsll $3, $3, 16
4311; MIPS64EL-NEXT: daddiu $3, $3, 899
4312; MIPS64EL-NEXT: dsll $3, $3, 17
4313; MIPS64EL-NEXT: daddiu $4, $3, 1798
4314; MIPS64EL-NEXT: daddiu $5, $1, 1798
4315; MIPS64EL-NEXT: daddiu $6, $2, 2311
4316; MIPS64EL-NEXT: lui $1, 642
4317; MIPS64EL-NEXT: daddiu $1, $1, 16899
4318; MIPS64EL-NEXT: dsll $1, $1, 18
4319; MIPS64EL-NEXT: daddiu $1, $1, 2311
4320; MIPS64EL-NEXT: dsll $1, $1, 16
4321; MIPS64EL-NEXT: daddiu $7, $1, 2311
4322; MIPS64EL-NEXT: ld $25, %call16(i8_16)($gp)
4323; MIPS64EL-NEXT: jalr $25
4324; MIPS64EL-NEXT: nop
4325; MIPS64EL-NEXT: ld $1, %got_disp(gv16i8)($gp)
4326; MIPS64EL-NEXT: sd $3, 8($1)
4327; MIPS64EL-NEXT: sd $2, 0($1)
4328; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4329; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4330; MIPS64EL-NEXT: daddiu $sp, $sp, 16
4331; MIPS64EL-NEXT: jr $ra
4332; MIPS64EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00004333entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00004334 %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>)
4335 store <16 x i8> %0, <16 x i8> * @gv16i8
4336 ret void
4337}
4338
4339define void @calli16_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00004340; MIPS32EB-LABEL: calli16_2:
4341; MIPS32EB: # %bb.0: # %entry
4342; MIPS32EB-NEXT: addiu $sp, $sp, -24
4343; MIPS32EB-NEXT: .cfi_def_cfa_offset 24
4344; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4345; MIPS32EB-NEXT: .cfi_offset 31, -4
4346; MIPS32EB-NEXT: lui $1, 6
4347; MIPS32EB-NEXT: ori $4, $1, 7
4348; MIPS32EB-NEXT: lui $1, 12
4349; MIPS32EB-NEXT: ori $5, $1, 8
4350; MIPS32EB-NEXT: jal i16_2
4351; MIPS32EB-NEXT: nop
4352; MIPS32EB-NEXT: lui $1, %hi(gv2i16)
4353; MIPS32EB-NEXT: sw $2, %lo(gv2i16)($1)
4354; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4355; MIPS32EB-NEXT: addiu $sp, $sp, 24
4356; MIPS32EB-NEXT: jr $ra
4357; MIPS32EB-NEXT: nop
4358;
4359; MIPS64EB-LABEL: calli16_2:
4360; MIPS64EB: # %bb.0: # %entry
4361; MIPS64EB-NEXT: daddiu $sp, $sp, -16
4362; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
4363; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4364; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4365; MIPS64EB-NEXT: .cfi_offset 31, -8
4366; MIPS64EB-NEXT: .cfi_offset 28, -16
4367; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2)))
4368; MIPS64EB-NEXT: daddu $1, $1, $25
4369; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4370; MIPS64EB-NEXT: lui $1, 6
4371; MIPS64EB-NEXT: ori $4, $1, 7
4372; MIPS64EB-NEXT: lui $1, 12
4373; MIPS64EB-NEXT: ori $5, $1, 8
4374; MIPS64EB-NEXT: ld $25, %call16(i16_2)($gp)
4375; MIPS64EB-NEXT: jalr $25
4376; MIPS64EB-NEXT: nop
4377; MIPS64EB-NEXT: ld $1, %got_disp(gv2i16)($gp)
4378; MIPS64EB-NEXT: sw $2, 0($1)
4379; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4380; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4381; MIPS64EB-NEXT: daddiu $sp, $sp, 16
4382; MIPS64EB-NEXT: jr $ra
4383; MIPS64EB-NEXT: nop
4384;
4385; MIPS32R5EB-LABEL: calli16_2:
4386; MIPS32R5EB: # %bb.0: # %entry
4387; MIPS32R5EB-NEXT: addiu $sp, $sp, -32
4388; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32
4389; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
4390; MIPS32R5EB-NEXT: .cfi_offset 31, -4
4391; MIPS32R5EB-NEXT: lui $1, 6
4392; MIPS32R5EB-NEXT: ori $4, $1, 7
4393; MIPS32R5EB-NEXT: lui $1, 12
4394; MIPS32R5EB-NEXT: ori $5, $1, 8
4395; MIPS32R5EB-NEXT: jal i16_2
4396; MIPS32R5EB-NEXT: nop
4397; MIPS32R5EB-NEXT: lui $1, %hi(gv2i16)
4398; MIPS32R5EB-NEXT: sw $2, %lo(gv2i16)($1)
4399; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
4400; MIPS32R5EB-NEXT: addiu $sp, $sp, 32
4401; MIPS32R5EB-NEXT: jr $ra
4402; MIPS32R5EB-NEXT: nop
4403;
4404; MIPS64R5EB-LABEL: calli16_2:
4405; MIPS64R5EB: # %bb.0: # %entry
4406; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
4407; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
4408; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
4409; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
4410; MIPS64R5EB-NEXT: .cfi_offset 31, -8
4411; MIPS64R5EB-NEXT: .cfi_offset 28, -16
4412; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2)))
4413; MIPS64R5EB-NEXT: daddu $1, $1, $25
4414; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4415; MIPS64R5EB-NEXT: lui $1, 6
4416; MIPS64R5EB-NEXT: ori $4, $1, 7
4417; MIPS64R5EB-NEXT: lui $1, 12
4418; MIPS64R5EB-NEXT: ori $5, $1, 8
4419; MIPS64R5EB-NEXT: ld $25, %call16(i16_2)($gp)
4420; MIPS64R5EB-NEXT: jalr $25
4421; MIPS64R5EB-NEXT: nop
4422; MIPS64R5EB-NEXT: ld $1, %got_disp(gv2i16)($gp)
4423; MIPS64R5EB-NEXT: sw $2, 0($1)
4424; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
4425; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
4426; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
4427; MIPS64R5EB-NEXT: jr $ra
4428; MIPS64R5EB-NEXT: nop
4429;
4430; MIPS32EL-LABEL: calli16_2:
4431; MIPS32EL: # %bb.0: # %entry
4432; MIPS32EL-NEXT: addiu $sp, $sp, -24
4433; MIPS32EL-NEXT: .cfi_def_cfa_offset 24
4434; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4435; MIPS32EL-NEXT: .cfi_offset 31, -4
4436; MIPS32EL-NEXT: lui $1, 7
4437; MIPS32EL-NEXT: ori $4, $1, 6
4438; MIPS32EL-NEXT: lui $1, 8
4439; MIPS32EL-NEXT: ori $5, $1, 12
4440; MIPS32EL-NEXT: jal i16_2
4441; MIPS32EL-NEXT: nop
4442; MIPS32EL-NEXT: lui $1, %hi(gv2i16)
4443; MIPS32EL-NEXT: sw $2, %lo(gv2i16)($1)
4444; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4445; MIPS32EL-NEXT: addiu $sp, $sp, 24
4446; MIPS32EL-NEXT: jr $ra
4447; MIPS32EL-NEXT: nop
4448;
4449; MIPS64EL-LABEL: calli16_2:
4450; MIPS64EL: # %bb.0: # %entry
4451; MIPS64EL-NEXT: daddiu $sp, $sp, -16
4452; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
4453; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4454; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4455; MIPS64EL-NEXT: .cfi_offset 31, -8
4456; MIPS64EL-NEXT: .cfi_offset 28, -16
4457; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2)))
4458; MIPS64EL-NEXT: daddu $1, $1, $25
4459; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4460; MIPS64EL-NEXT: lui $1, 7
4461; MIPS64EL-NEXT: ori $4, $1, 6
4462; MIPS64EL-NEXT: lui $1, 8
4463; MIPS64EL-NEXT: ori $5, $1, 12
4464; MIPS64EL-NEXT: ld $25, %call16(i16_2)($gp)
4465; MIPS64EL-NEXT: jalr $25
4466; MIPS64EL-NEXT: nop
4467; MIPS64EL-NEXT: ld $1, %got_disp(gv2i16)($gp)
4468; MIPS64EL-NEXT: sw $2, 0($1)
4469; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4470; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4471; MIPS64EL-NEXT: daddiu $sp, $sp, 16
4472; MIPS64EL-NEXT: jr $ra
4473; MIPS64EL-NEXT: nop
4474;
4475; MIPS32R5EL-LABEL: calli16_2:
4476; MIPS32R5EL: # %bb.0: # %entry
4477; MIPS32R5EL-NEXT: addiu $sp, $sp, -32
4478; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32
4479; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill
4480; MIPS32R5EL-NEXT: .cfi_offset 31, -4
4481; MIPS32R5EL-NEXT: lui $1, 7
4482; MIPS32R5EL-NEXT: ori $4, $1, 6
4483; MIPS32R5EL-NEXT: lui $1, 8
4484; MIPS32R5EL-NEXT: ori $5, $1, 12
4485; MIPS32R5EL-NEXT: jal i16_2
4486; MIPS32R5EL-NEXT: nop
4487; MIPS32R5EL-NEXT: lui $1, %hi(gv2i16)
4488; MIPS32R5EL-NEXT: sw $2, %lo(gv2i16)($1)
4489; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload
4490; MIPS32R5EL-NEXT: addiu $sp, $sp, 32
4491; MIPS32R5EL-NEXT: jr $ra
4492; MIPS32R5EL-NEXT: nop
4493;
4494; MIPS64R5EL-LABEL: calli16_2:
4495; MIPS64R5EL: # %bb.0: # %entry
4496; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
4497; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
4498; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
4499; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
4500; MIPS64R5EL-NEXT: .cfi_offset 31, -8
4501; MIPS64R5EL-NEXT: .cfi_offset 28, -16
4502; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2)))
4503; MIPS64R5EL-NEXT: daddu $1, $1, $25
4504; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2)))
4505; MIPS64R5EL-NEXT: lui $1, 7
4506; MIPS64R5EL-NEXT: ori $4, $1, 6
4507; MIPS64R5EL-NEXT: lui $1, 8
4508; MIPS64R5EL-NEXT: ori $5, $1, 12
4509; MIPS64R5EL-NEXT: ld $25, %call16(i16_2)($gp)
4510; MIPS64R5EL-NEXT: jalr $25
4511; MIPS64R5EL-NEXT: nop
4512; MIPS64R5EL-NEXT: ld $1, %got_disp(gv2i16)($gp)
4513; MIPS64R5EL-NEXT: sw $2, 0($1)
4514; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
4515; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
4516; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
4517; MIPS64R5EL-NEXT: jr $ra
4518; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00004519entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00004520 %0 = call <2 x i16> @i16_2(<2 x i16> <i16 6, i16 7>, <2 x i16> <i16 12, i16 8>)
4521 store <2 x i16> %0, <2 x i16> * @gv2i16
4522 ret void
4523}
4524
4525define void @calli16_4() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00004526; MIPS32EB-LABEL: calli16_4:
4527; MIPS32EB: # %bb.0: # %entry
4528; MIPS32EB-NEXT: addiu $sp, $sp, -24
4529; MIPS32EB-NEXT: .cfi_def_cfa_offset 24
4530; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4531; MIPS32EB-NEXT: .cfi_offset 31, -4
4532; MIPS32EB-NEXT: lui $1, 6
4533; MIPS32EB-NEXT: ori $4, $1, 7
4534; MIPS32EB-NEXT: lui $1, 12
4535; MIPS32EB-NEXT: ori $6, $1, 8
4536; MIPS32EB-NEXT: lui $1, 9
4537; MIPS32EB-NEXT: ori $5, $1, 10
4538; MIPS32EB-NEXT: move $7, $5
4539; MIPS32EB-NEXT: jal i16_4
4540; MIPS32EB-NEXT: nop
4541; MIPS32EB-NEXT: lui $1, %hi(gv4i16)
4542; MIPS32EB-NEXT: addiu $4, $1, %lo(gv4i16)
4543; MIPS32EB-NEXT: sw $3, 4($4)
4544; MIPS32EB-NEXT: sw $2, %lo(gv4i16)($1)
4545; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4546; MIPS32EB-NEXT: addiu $sp, $sp, 24
4547; MIPS32EB-NEXT: jr $ra
4548; MIPS32EB-NEXT: nop
4549;
4550; MIPS64EB-LABEL: calli16_4:
4551; MIPS64EB: # %bb.0: # %entry
4552; MIPS64EB-NEXT: daddiu $sp, $sp, -16
4553; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
4554; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4555; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4556; MIPS64EB-NEXT: .cfi_offset 31, -8
4557; MIPS64EB-NEXT: .cfi_offset 28, -16
4558; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4)))
4559; MIPS64EB-NEXT: daddu $1, $1, $25
4560; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4561; MIPS64EB-NEXT: lui $1, 6
4562; MIPS64EB-NEXT: daddiu $1, $1, 7
4563; MIPS64EB-NEXT: dsll $1, $1, 16
4564; MIPS64EB-NEXT: daddiu $1, $1, 9
4565; MIPS64EB-NEXT: dsll $1, $1, 16
4566; MIPS64EB-NEXT: daddiu $4, $1, 10
4567; MIPS64EB-NEXT: lui $1, 2
4568; MIPS64EB-NEXT: daddiu $1, $1, -32767
4569; MIPS64EB-NEXT: dsll $1, $1, 19
4570; MIPS64EB-NEXT: daddiu $1, $1, 9
4571; MIPS64EB-NEXT: dsll $1, $1, 16
4572; MIPS64EB-NEXT: daddiu $5, $1, 10
4573; MIPS64EB-NEXT: ld $25, %call16(i16_4)($gp)
4574; MIPS64EB-NEXT: jalr $25
4575; MIPS64EB-NEXT: nop
4576; MIPS64EB-NEXT: ld $1, %got_disp(gv4i16)($gp)
4577; MIPS64EB-NEXT: sd $2, 0($1)
4578; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4579; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4580; MIPS64EB-NEXT: daddiu $sp, $sp, 16
4581; MIPS64EB-NEXT: jr $ra
4582; MIPS64EB-NEXT: nop
4583;
4584; MIPS32R5EB-LABEL: calli16_4:
4585; MIPS32R5EB: # %bb.0: # %entry
4586; MIPS32R5EB-NEXT: addiu $sp, $sp, -24
4587; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 24
4588; MIPS32R5EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4589; MIPS32R5EB-NEXT: .cfi_offset 31, -4
4590; MIPS32R5EB-NEXT: lui $1, 6
4591; MIPS32R5EB-NEXT: ori $4, $1, 7
4592; MIPS32R5EB-NEXT: lui $1, 12
4593; MIPS32R5EB-NEXT: ori $6, $1, 8
4594; MIPS32R5EB-NEXT: lui $1, 9
4595; MIPS32R5EB-NEXT: ori $5, $1, 10
4596; MIPS32R5EB-NEXT: move $7, $5
4597; MIPS32R5EB-NEXT: jal i16_4
4598; MIPS32R5EB-NEXT: nop
4599; MIPS32R5EB-NEXT: lui $1, %hi(gv4i16)
4600; MIPS32R5EB-NEXT: addiu $4, $1, %lo(gv4i16)
4601; MIPS32R5EB-NEXT: sw $3, 4($4)
4602; MIPS32R5EB-NEXT: sw $2, %lo(gv4i16)($1)
4603; MIPS32R5EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4604; MIPS32R5EB-NEXT: addiu $sp, $sp, 24
4605; MIPS32R5EB-NEXT: jr $ra
4606; MIPS32R5EB-NEXT: nop
4607;
4608; MIPS64R5EB-LABEL: calli16_4:
4609; MIPS64R5EB: # %bb.0: # %entry
4610; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
4611; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
4612; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
4613; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
4614; MIPS64R5EB-NEXT: .cfi_offset 31, -8
4615; MIPS64R5EB-NEXT: .cfi_offset 28, -16
4616; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4)))
4617; MIPS64R5EB-NEXT: daddu $1, $1, $25
4618; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4619; MIPS64R5EB-NEXT: lui $1, 6
4620; MIPS64R5EB-NEXT: daddiu $1, $1, 7
4621; MIPS64R5EB-NEXT: dsll $1, $1, 16
4622; MIPS64R5EB-NEXT: daddiu $1, $1, 9
4623; MIPS64R5EB-NEXT: dsll $1, $1, 16
4624; MIPS64R5EB-NEXT: daddiu $4, $1, 10
4625; MIPS64R5EB-NEXT: lui $1, 2
4626; MIPS64R5EB-NEXT: daddiu $1, $1, -32767
4627; MIPS64R5EB-NEXT: dsll $1, $1, 19
4628; MIPS64R5EB-NEXT: daddiu $1, $1, 9
4629; MIPS64R5EB-NEXT: dsll $1, $1, 16
4630; MIPS64R5EB-NEXT: daddiu $5, $1, 10
4631; MIPS64R5EB-NEXT: ld $25, %call16(i16_4)($gp)
4632; MIPS64R5EB-NEXT: jalr $25
4633; MIPS64R5EB-NEXT: nop
4634; MIPS64R5EB-NEXT: ld $1, %got_disp(gv4i16)($gp)
4635; MIPS64R5EB-NEXT: sd $2, 0($1)
4636; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
4637; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
4638; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
4639; MIPS64R5EB-NEXT: jr $ra
4640; MIPS64R5EB-NEXT: nop
4641;
4642; MIPS32EL-LABEL: calli16_4:
4643; MIPS32EL: # %bb.0: # %entry
4644; MIPS32EL-NEXT: addiu $sp, $sp, -24
4645; MIPS32EL-NEXT: .cfi_def_cfa_offset 24
4646; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4647; MIPS32EL-NEXT: .cfi_offset 31, -4
4648; MIPS32EL-NEXT: lui $1, 7
4649; MIPS32EL-NEXT: ori $4, $1, 6
4650; MIPS32EL-NEXT: lui $1, 8
4651; MIPS32EL-NEXT: ori $6, $1, 12
4652; MIPS32EL-NEXT: lui $1, 10
4653; MIPS32EL-NEXT: ori $5, $1, 9
4654; MIPS32EL-NEXT: move $7, $5
4655; MIPS32EL-NEXT: jal i16_4
4656; MIPS32EL-NEXT: nop
4657; MIPS32EL-NEXT: lui $1, %hi(gv4i16)
4658; MIPS32EL-NEXT: addiu $4, $1, %lo(gv4i16)
4659; MIPS32EL-NEXT: sw $3, 4($4)
4660; MIPS32EL-NEXT: sw $2, %lo(gv4i16)($1)
4661; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4662; MIPS32EL-NEXT: addiu $sp, $sp, 24
4663; MIPS32EL-NEXT: jr $ra
4664; MIPS32EL-NEXT: nop
4665;
4666; MIPS64EL-LABEL: calli16_4:
4667; MIPS64EL: # %bb.0: # %entry
4668; MIPS64EL-NEXT: daddiu $sp, $sp, -16
4669; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
4670; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4671; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4672; MIPS64EL-NEXT: .cfi_offset 31, -8
4673; MIPS64EL-NEXT: .cfi_offset 28, -16
4674; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4)))
4675; MIPS64EL-NEXT: daddu $1, $1, $25
4676; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4677; MIPS64EL-NEXT: lui $1, 10
4678; MIPS64EL-NEXT: daddiu $1, $1, 9
4679; MIPS64EL-NEXT: dsll $1, $1, 16
4680; MIPS64EL-NEXT: daddiu $1, $1, 7
4681; MIPS64EL-NEXT: dsll $1, $1, 16
4682; MIPS64EL-NEXT: daddiu $4, $1, 6
4683; MIPS64EL-NEXT: lui $1, 1
4684; MIPS64EL-NEXT: daddiu $1, $1, 16385
4685; MIPS64EL-NEXT: dsll $1, $1, 16
4686; MIPS64EL-NEXT: daddiu $1, $1, 8193
4687; MIPS64EL-NEXT: dsll $1, $1, 19
4688; MIPS64EL-NEXT: daddiu $5, $1, 12
4689; MIPS64EL-NEXT: ld $25, %call16(i16_4)($gp)
4690; MIPS64EL-NEXT: jalr $25
4691; MIPS64EL-NEXT: nop
4692; MIPS64EL-NEXT: ld $1, %got_disp(gv4i16)($gp)
4693; MIPS64EL-NEXT: sd $2, 0($1)
4694; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4695; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4696; MIPS64EL-NEXT: daddiu $sp, $sp, 16
4697; MIPS64EL-NEXT: jr $ra
4698; MIPS64EL-NEXT: nop
4699;
4700; MIPS32R5EL-LABEL: calli16_4:
4701; MIPS32R5EL: # %bb.0: # %entry
4702; MIPS32R5EL-NEXT: addiu $sp, $sp, -24
4703; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 24
4704; MIPS32R5EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
4705; MIPS32R5EL-NEXT: .cfi_offset 31, -4
4706; MIPS32R5EL-NEXT: lui $1, 7
4707; MIPS32R5EL-NEXT: ori $4, $1, 6
4708; MIPS32R5EL-NEXT: lui $1, 8
4709; MIPS32R5EL-NEXT: ori $6, $1, 12
4710; MIPS32R5EL-NEXT: lui $1, 10
4711; MIPS32R5EL-NEXT: ori $5, $1, 9
4712; MIPS32R5EL-NEXT: move $7, $5
4713; MIPS32R5EL-NEXT: jal i16_4
4714; MIPS32R5EL-NEXT: nop
4715; MIPS32R5EL-NEXT: lui $1, %hi(gv4i16)
4716; MIPS32R5EL-NEXT: addiu $4, $1, %lo(gv4i16)
4717; MIPS32R5EL-NEXT: sw $3, 4($4)
4718; MIPS32R5EL-NEXT: sw $2, %lo(gv4i16)($1)
4719; MIPS32R5EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
4720; MIPS32R5EL-NEXT: addiu $sp, $sp, 24
4721; MIPS32R5EL-NEXT: jr $ra
4722; MIPS32R5EL-NEXT: nop
4723;
4724; MIPS64R5EL-LABEL: calli16_4:
4725; MIPS64R5EL: # %bb.0: # %entry
4726; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
4727; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
4728; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
4729; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
4730; MIPS64R5EL-NEXT: .cfi_offset 31, -8
4731; MIPS64R5EL-NEXT: .cfi_offset 28, -16
4732; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4)))
4733; MIPS64R5EL-NEXT: daddu $1, $1, $25
4734; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4)))
4735; MIPS64R5EL-NEXT: lui $1, 10
4736; MIPS64R5EL-NEXT: daddiu $1, $1, 9
4737; MIPS64R5EL-NEXT: dsll $1, $1, 16
4738; MIPS64R5EL-NEXT: daddiu $1, $1, 7
4739; MIPS64R5EL-NEXT: dsll $1, $1, 16
4740; MIPS64R5EL-NEXT: daddiu $4, $1, 6
4741; MIPS64R5EL-NEXT: lui $1, 1
4742; MIPS64R5EL-NEXT: daddiu $1, $1, 16385
4743; MIPS64R5EL-NEXT: dsll $1, $1, 16
4744; MIPS64R5EL-NEXT: daddiu $1, $1, 8193
4745; MIPS64R5EL-NEXT: dsll $1, $1, 19
4746; MIPS64R5EL-NEXT: daddiu $5, $1, 12
4747; MIPS64R5EL-NEXT: ld $25, %call16(i16_4)($gp)
4748; MIPS64R5EL-NEXT: jalr $25
4749; MIPS64R5EL-NEXT: nop
4750; MIPS64R5EL-NEXT: ld $1, %got_disp(gv4i16)($gp)
4751; MIPS64R5EL-NEXT: sd $2, 0($1)
4752; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
4753; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
4754; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
4755; MIPS64R5EL-NEXT: jr $ra
4756; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00004757entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00004758 %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>)
4759 store <4 x i16> %0, <4 x i16> * @gv4i16
4760 ret void
4761}
4762
4763define void @calli16_8() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00004764; MIPS32EB-LABEL: calli16_8:
4765; MIPS32EB: # %bb.0: # %entry
4766; MIPS32EB-NEXT: addiu $sp, $sp, -40
4767; MIPS32EB-NEXT: .cfi_def_cfa_offset 40
4768; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4769; MIPS32EB-NEXT: .cfi_offset 31, -4
4770; MIPS32EB-NEXT: lui $1, 9
4771; MIPS32EB-NEXT: ori $5, $1, 10
4772; MIPS32EB-NEXT: sw $5, 28($sp)
4773; MIPS32EB-NEXT: lui $1, 12
4774; MIPS32EB-NEXT: ori $1, $1, 8
4775; MIPS32EB-NEXT: sw $1, 24($sp)
4776; MIPS32EB-NEXT: sw $5, 20($sp)
4777; MIPS32EB-NEXT: lui $1, 6
4778; MIPS32EB-NEXT: ori $4, $1, 7
4779; MIPS32EB-NEXT: sw $4, 16($sp)
4780; MIPS32EB-NEXT: move $6, $4
4781; MIPS32EB-NEXT: move $7, $5
4782; MIPS32EB-NEXT: jal i16_8
4783; MIPS32EB-NEXT: nop
4784; MIPS32EB-NEXT: lui $1, %hi(gv8i16)
4785; MIPS32EB-NEXT: addiu $6, $1, %lo(gv8i16)
4786; MIPS32EB-NEXT: sw $5, 12($6)
4787; MIPS32EB-NEXT: sw $4, 8($6)
4788; MIPS32EB-NEXT: sw $3, 4($6)
4789; MIPS32EB-NEXT: sw $2, %lo(gv8i16)($1)
4790; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4791; MIPS32EB-NEXT: addiu $sp, $sp, 40
4792; MIPS32EB-NEXT: jr $ra
4793; MIPS32EB-NEXT: nop
4794;
4795; MIPS64EB-LABEL: calli16_8:
4796; MIPS64EB: # %bb.0: # %entry
4797; MIPS64EB-NEXT: daddiu $sp, $sp, -16
4798; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
4799; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4800; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4801; MIPS64EB-NEXT: .cfi_offset 31, -8
4802; MIPS64EB-NEXT: .cfi_offset 28, -16
4803; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8)))
4804; MIPS64EB-NEXT: daddu $1, $1, $25
4805; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4806; MIPS64EB-NEXT: lui $1, 6
4807; MIPS64EB-NEXT: daddiu $1, $1, 7
4808; MIPS64EB-NEXT: dsll $1, $1, 16
4809; MIPS64EB-NEXT: daddiu $1, $1, 9
4810; MIPS64EB-NEXT: dsll $1, $1, 16
4811; MIPS64EB-NEXT: daddiu $4, $1, 10
4812; MIPS64EB-NEXT: lui $1, 2
4813; MIPS64EB-NEXT: daddiu $1, $1, -32767
4814; MIPS64EB-NEXT: dsll $1, $1, 19
4815; MIPS64EB-NEXT: daddiu $1, $1, 9
4816; MIPS64EB-NEXT: dsll $1, $1, 16
4817; MIPS64EB-NEXT: daddiu $7, $1, 10
4818; MIPS64EB-NEXT: ld $25, %call16(i16_8)($gp)
4819; MIPS64EB-NEXT: move $5, $4
4820; MIPS64EB-NEXT: move $6, $4
4821; MIPS64EB-NEXT: jalr $25
4822; MIPS64EB-NEXT: nop
4823; MIPS64EB-NEXT: ld $1, %got_disp(gv8i16)($gp)
4824; MIPS64EB-NEXT: sd $3, 8($1)
4825; MIPS64EB-NEXT: sd $2, 0($1)
4826; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4827; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4828; MIPS64EB-NEXT: daddiu $sp, $sp, 16
4829; MIPS64EB-NEXT: jr $ra
4830; MIPS64EB-NEXT: nop
4831;
4832; MIPS32R5EB-LABEL: calli16_8:
4833; MIPS32R5EB: # %bb.0: # %entry
4834; MIPS32R5EB-NEXT: addiu $sp, $sp, -40
4835; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 40
4836; MIPS32R5EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4837; MIPS32R5EB-NEXT: .cfi_offset 31, -4
4838; MIPS32R5EB-NEXT: lui $1, 6
4839; MIPS32R5EB-NEXT: ori $1, $1, 7
4840; MIPS32R5EB-NEXT: lui $2, 9
4841; MIPS32R5EB-NEXT: ori $2, $2, 10
4842; MIPS32R5EB-NEXT: fill.w $w0, $2
4843; MIPS32R5EB-NEXT: insert.w $w0[1], $1
4844; MIPS32R5EB-NEXT: splati.d $w0, $w0[0]
4845; MIPS32R5EB-NEXT: copy_s.w $4, $w0[0]
4846; MIPS32R5EB-NEXT: copy_s.w $5, $w0[1]
4847; MIPS32R5EB-NEXT: copy_s.w $6, $w0[2]
4848; MIPS32R5EB-NEXT: copy_s.w $7, $w0[3]
4849; MIPS32R5EB-NEXT: lui $1, %hi($CPI33_0)
4850; MIPS32R5EB-NEXT: addiu $1, $1, %lo($CPI33_0)
4851; MIPS32R5EB-NEXT: ld.w $w0, 0($1)
4852; MIPS32R5EB-NEXT: copy_s.w $1, $w0[0]
4853; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1]
4854; MIPS32R5EB-NEXT: copy_s.w $3, $w0[2]
4855; MIPS32R5EB-NEXT: copy_s.w $8, $w0[3]
4856; MIPS32R5EB-NEXT: sw $8, 28($sp)
4857; MIPS32R5EB-NEXT: sw $3, 24($sp)
4858; MIPS32R5EB-NEXT: sw $2, 20($sp)
4859; MIPS32R5EB-NEXT: sw $1, 16($sp)
4860; MIPS32R5EB-NEXT: jal i16_8
4861; MIPS32R5EB-NEXT: nop
4862; MIPS32R5EB-NEXT: lui $1, %hi(gv8i16)
4863; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv8i16)
4864; MIPS32R5EB-NEXT: ldi.b $w0, 0
4865; MIPS32R5EB-NEXT: insert.w $w0[0], $2
4866; MIPS32R5EB-NEXT: insert.w $w0[1], $3
4867; MIPS32R5EB-NEXT: insert.w $w0[2], $4
4868; MIPS32R5EB-NEXT: insert.w $w0[3], $5
4869; MIPS32R5EB-NEXT: st.w $w0, 0($1)
4870; MIPS32R5EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4871; MIPS32R5EB-NEXT: addiu $sp, $sp, 40
4872; MIPS32R5EB-NEXT: jr $ra
4873; MIPS32R5EB-NEXT: nop
4874;
4875; MIPS64R5EB-LABEL: calli16_8:
4876; MIPS64R5EB: # %bb.0: # %entry
4877; MIPS64R5EB-NEXT: daddiu $sp, $sp, -16
4878; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 16
4879; MIPS64R5EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4880; MIPS64R5EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4881; MIPS64R5EB-NEXT: .cfi_offset 31, -8
4882; MIPS64R5EB-NEXT: .cfi_offset 28, -16
4883; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8)))
4884; MIPS64R5EB-NEXT: daddu $1, $1, $25
4885; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4886; MIPS64R5EB-NEXT: lui $1, 9
4887; MIPS64R5EB-NEXT: ori $1, $1, 10
4888; MIPS64R5EB-NEXT: lui $2, 6
4889; MIPS64R5EB-NEXT: ori $2, $2, 7
4890; MIPS64R5EB-NEXT: dinsu $1, $2, 32, 32
4891; MIPS64R5EB-NEXT: fill.d $w0, $1
4892; MIPS64R5EB-NEXT: copy_s.d $4, $w0[0]
4893; MIPS64R5EB-NEXT: copy_s.d $5, $w0[1]
4894; MIPS64R5EB-NEXT: ld $1, %got_page(.LCPI33_0)($gp)
4895; MIPS64R5EB-NEXT: daddiu $1, $1, %got_ofst(.LCPI33_0)
4896; MIPS64R5EB-NEXT: ld.d $w0, 0($1)
4897; MIPS64R5EB-NEXT: copy_s.d $6, $w0[0]
4898; MIPS64R5EB-NEXT: copy_s.d $7, $w0[1]
4899; MIPS64R5EB-NEXT: ld $25, %call16(i16_8)($gp)
4900; MIPS64R5EB-NEXT: jalr $25
4901; MIPS64R5EB-NEXT: nop
4902; MIPS64R5EB-NEXT: ldi.b $w0, 0
4903; MIPS64R5EB-NEXT: ld $1, %got_disp(gv8i16)($gp)
4904; MIPS64R5EB-NEXT: insert.d $w0[0], $2
4905; MIPS64R5EB-NEXT: insert.d $w0[1], $3
4906; MIPS64R5EB-NEXT: st.d $w0, 0($1)
4907; MIPS64R5EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4908; MIPS64R5EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4909; MIPS64R5EB-NEXT: daddiu $sp, $sp, 16
4910; MIPS64R5EB-NEXT: jr $ra
4911; MIPS64R5EB-NEXT: nop
4912;
4913; MIPS32EL-LABEL: calli16_8:
4914; MIPS32EL: # %bb.0: # %entry
4915; MIPS32EL-NEXT: addiu $sp, $sp, -40
4916; MIPS32EL-NEXT: .cfi_def_cfa_offset 40
4917; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4918; MIPS32EL-NEXT: .cfi_offset 31, -4
4919; MIPS32EL-NEXT: lui $1, 10
4920; MIPS32EL-NEXT: ori $5, $1, 9
4921; MIPS32EL-NEXT: sw $5, 28($sp)
4922; MIPS32EL-NEXT: lui $1, 8
4923; MIPS32EL-NEXT: ori $1, $1, 12
4924; MIPS32EL-NEXT: sw $1, 24($sp)
4925; MIPS32EL-NEXT: sw $5, 20($sp)
4926; MIPS32EL-NEXT: lui $1, 7
4927; MIPS32EL-NEXT: ori $4, $1, 6
4928; MIPS32EL-NEXT: sw $4, 16($sp)
4929; MIPS32EL-NEXT: move $6, $4
4930; MIPS32EL-NEXT: move $7, $5
4931; MIPS32EL-NEXT: jal i16_8
4932; MIPS32EL-NEXT: nop
4933; MIPS32EL-NEXT: lui $1, %hi(gv8i16)
4934; MIPS32EL-NEXT: addiu $6, $1, %lo(gv8i16)
4935; MIPS32EL-NEXT: sw $5, 12($6)
4936; MIPS32EL-NEXT: sw $4, 8($6)
4937; MIPS32EL-NEXT: sw $3, 4($6)
4938; MIPS32EL-NEXT: sw $2, %lo(gv8i16)($1)
4939; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
4940; MIPS32EL-NEXT: addiu $sp, $sp, 40
4941; MIPS32EL-NEXT: jr $ra
4942; MIPS32EL-NEXT: nop
4943;
4944; MIPS64EL-LABEL: calli16_8:
4945; MIPS64EL: # %bb.0: # %entry
4946; MIPS64EL-NEXT: daddiu $sp, $sp, -16
4947; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
4948; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
4949; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
4950; MIPS64EL-NEXT: .cfi_offset 31, -8
4951; MIPS64EL-NEXT: .cfi_offset 28, -16
4952; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8)))
4953; MIPS64EL-NEXT: daddu $1, $1, $25
4954; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
4955; MIPS64EL-NEXT: lui $1, 10
4956; MIPS64EL-NEXT: daddiu $1, $1, 9
4957; MIPS64EL-NEXT: dsll $1, $1, 16
4958; MIPS64EL-NEXT: daddiu $1, $1, 7
4959; MIPS64EL-NEXT: dsll $1, $1, 16
4960; MIPS64EL-NEXT: daddiu $4, $1, 6
4961; MIPS64EL-NEXT: lui $1, 1
4962; MIPS64EL-NEXT: daddiu $1, $1, 16385
4963; MIPS64EL-NEXT: dsll $1, $1, 16
4964; MIPS64EL-NEXT: daddiu $1, $1, 8193
4965; MIPS64EL-NEXT: dsll $1, $1, 19
4966; MIPS64EL-NEXT: daddiu $7, $1, 12
4967; MIPS64EL-NEXT: ld $25, %call16(i16_8)($gp)
4968; MIPS64EL-NEXT: move $5, $4
4969; MIPS64EL-NEXT: move $6, $4
4970; MIPS64EL-NEXT: jalr $25
4971; MIPS64EL-NEXT: nop
4972; MIPS64EL-NEXT: ld $1, %got_disp(gv8i16)($gp)
4973; MIPS64EL-NEXT: sd $3, 8($1)
4974; MIPS64EL-NEXT: sd $2, 0($1)
4975; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
4976; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
4977; MIPS64EL-NEXT: daddiu $sp, $sp, 16
4978; MIPS64EL-NEXT: jr $ra
4979; MIPS64EL-NEXT: nop
4980;
4981; MIPS32R5EL-LABEL: calli16_8:
4982; MIPS32R5EL: # %bb.0: # %entry
4983; MIPS32R5EL-NEXT: addiu $sp, $sp, -40
4984; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 40
4985; MIPS32R5EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
4986; MIPS32R5EL-NEXT: .cfi_offset 31, -4
4987; MIPS32R5EL-NEXT: lui $1, 10
4988; MIPS32R5EL-NEXT: ori $1, $1, 9
4989; MIPS32R5EL-NEXT: lui $2, 7
4990; MIPS32R5EL-NEXT: ori $2, $2, 6
4991; MIPS32R5EL-NEXT: fill.w $w0, $2
4992; MIPS32R5EL-NEXT: insert.w $w0[1], $1
4993; MIPS32R5EL-NEXT: splati.d $w0, $w0[0]
4994; MIPS32R5EL-NEXT: copy_s.w $4, $w0[0]
4995; MIPS32R5EL-NEXT: copy_s.w $5, $w0[1]
4996; MIPS32R5EL-NEXT: copy_s.w $6, $w0[2]
4997; MIPS32R5EL-NEXT: copy_s.w $7, $w0[3]
4998; MIPS32R5EL-NEXT: lui $1, %hi($CPI33_0)
4999; MIPS32R5EL-NEXT: addiu $1, $1, %lo($CPI33_0)
5000; MIPS32R5EL-NEXT: ld.w $w0, 0($1)
5001; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0]
5002; MIPS32R5EL-NEXT: copy_s.w $2, $w0[1]
5003; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2]
5004; MIPS32R5EL-NEXT: copy_s.w $8, $w0[3]
5005; MIPS32R5EL-NEXT: sw $8, 28($sp)
5006; MIPS32R5EL-NEXT: sw $3, 24($sp)
5007; MIPS32R5EL-NEXT: sw $2, 20($sp)
5008; MIPS32R5EL-NEXT: sw $1, 16($sp)
5009; MIPS32R5EL-NEXT: jal i16_8
5010; MIPS32R5EL-NEXT: nop
5011; MIPS32R5EL-NEXT: lui $1, %hi(gv8i16)
5012; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv8i16)
5013; MIPS32R5EL-NEXT: ldi.b $w0, 0
5014; MIPS32R5EL-NEXT: insert.w $w0[0], $2
5015; MIPS32R5EL-NEXT: insert.w $w0[1], $3
5016; MIPS32R5EL-NEXT: insert.w $w0[2], $4
5017; MIPS32R5EL-NEXT: insert.w $w0[3], $5
5018; MIPS32R5EL-NEXT: st.w $w0, 0($1)
5019; MIPS32R5EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5020; MIPS32R5EL-NEXT: addiu $sp, $sp, 40
5021; MIPS32R5EL-NEXT: jr $ra
5022; MIPS32R5EL-NEXT: nop
5023;
5024; MIPS64R5EL-LABEL: calli16_8:
5025; MIPS64R5EL: # %bb.0: # %entry
5026; MIPS64R5EL-NEXT: daddiu $sp, $sp, -16
5027; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 16
5028; MIPS64R5EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5029; MIPS64R5EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5030; MIPS64R5EL-NEXT: .cfi_offset 31, -8
5031; MIPS64R5EL-NEXT: .cfi_offset 28, -16
5032; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8)))
5033; MIPS64R5EL-NEXT: daddu $1, $1, $25
5034; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8)))
5035; MIPS64R5EL-NEXT: lui $1, 7
5036; MIPS64R5EL-NEXT: ori $1, $1, 6
5037; MIPS64R5EL-NEXT: lui $2, 10
5038; MIPS64R5EL-NEXT: ori $2, $2, 9
5039; MIPS64R5EL-NEXT: dinsu $1, $2, 32, 32
5040; MIPS64R5EL-NEXT: fill.d $w0, $1
5041; MIPS64R5EL-NEXT: copy_s.d $4, $w0[0]
5042; MIPS64R5EL-NEXT: copy_s.d $5, $w0[1]
5043; MIPS64R5EL-NEXT: ld $1, %got_page(.LCPI33_0)($gp)
5044; MIPS64R5EL-NEXT: daddiu $1, $1, %got_ofst(.LCPI33_0)
5045; MIPS64R5EL-NEXT: ld.d $w0, 0($1)
5046; MIPS64R5EL-NEXT: copy_s.d $6, $w0[0]
5047; MIPS64R5EL-NEXT: copy_s.d $7, $w0[1]
5048; MIPS64R5EL-NEXT: ld $25, %call16(i16_8)($gp)
5049; MIPS64R5EL-NEXT: jalr $25
5050; MIPS64R5EL-NEXT: nop
5051; MIPS64R5EL-NEXT: ldi.b $w0, 0
5052; MIPS64R5EL-NEXT: ld $1, %got_disp(gv8i16)($gp)
5053; MIPS64R5EL-NEXT: insert.d $w0[0], $2
5054; MIPS64R5EL-NEXT: insert.d $w0[1], $3
5055; MIPS64R5EL-NEXT: st.d $w0, 0($1)
5056; MIPS64R5EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5057; MIPS64R5EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5058; MIPS64R5EL-NEXT: daddiu $sp, $sp, 16
5059; MIPS64R5EL-NEXT: jr $ra
5060; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005061entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005062 %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>)
5063 store <8 x i16> %0, <8 x i16> * @gv8i16
5064 ret void
5065}
5066
5067define void @calli32_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005068; MIPS32-LABEL: calli32_2:
5069; MIPS32: # %bb.0: # %entry
5070; MIPS32-NEXT: addiu $sp, $sp, -24
5071; MIPS32-NEXT: .cfi_def_cfa_offset 24
5072; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
5073; MIPS32-NEXT: .cfi_offset 31, -4
5074; MIPS32-NEXT: addiu $4, $zero, 6
5075; MIPS32-NEXT: addiu $5, $zero, 7
5076; MIPS32-NEXT: addiu $6, $zero, 12
5077; MIPS32-NEXT: addiu $7, $zero, 8
5078; MIPS32-NEXT: jal i32_2
5079; MIPS32-NEXT: nop
5080; MIPS32-NEXT: lui $1, %hi(gv2i32)
5081; MIPS32-NEXT: addiu $4, $1, %lo(gv2i32)
5082; MIPS32-NEXT: sw $3, 4($4)
5083; MIPS32-NEXT: sw $2, %lo(gv2i32)($1)
5084; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
5085; MIPS32-NEXT: addiu $sp, $sp, 24
5086; MIPS32-NEXT: jr $ra
5087; MIPS32-NEXT: nop
5088;
5089; MIPS64EB-LABEL: calli32_2:
5090; MIPS64EB: # %bb.0: # %entry
5091; MIPS64EB-NEXT: daddiu $sp, $sp, -16
5092; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
5093; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5094; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5095; MIPS64EB-NEXT: .cfi_offset 31, -8
5096; MIPS64EB-NEXT: .cfi_offset 28, -16
5097; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2)))
5098; MIPS64EB-NEXT: daddu $1, $1, $25
5099; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5100; MIPS64EB-NEXT: daddiu $1, $zero, 3
5101; MIPS64EB-NEXT: dsll $2, $1, 33
5102; MIPS64EB-NEXT: daddiu $4, $2, 7
5103; MIPS64EB-NEXT: dsll $1, $1, 34
5104; MIPS64EB-NEXT: daddiu $5, $1, 8
5105; MIPS64EB-NEXT: ld $25, %call16(i32_2)($gp)
5106; MIPS64EB-NEXT: jalr $25
5107; MIPS64EB-NEXT: nop
5108; MIPS64EB-NEXT: ld $1, %got_disp(gv2i32)($gp)
5109; MIPS64EB-NEXT: sd $2, 0($1)
5110; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5111; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5112; MIPS64EB-NEXT: daddiu $sp, $sp, 16
5113; MIPS64EB-NEXT: jr $ra
5114; MIPS64EB-NEXT: nop
5115;
5116; MIPS32R5-LABEL: calli32_2:
5117; MIPS32R5: # %bb.0: # %entry
5118; MIPS32R5-NEXT: addiu $sp, $sp, -24
5119; MIPS32R5-NEXT: .cfi_def_cfa_offset 24
5120; MIPS32R5-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
5121; MIPS32R5-NEXT: .cfi_offset 31, -4
5122; MIPS32R5-NEXT: addiu $4, $zero, 6
5123; MIPS32R5-NEXT: addiu $5, $zero, 7
5124; MIPS32R5-NEXT: addiu $6, $zero, 12
5125; MIPS32R5-NEXT: addiu $7, $zero, 8
5126; MIPS32R5-NEXT: jal i32_2
5127; MIPS32R5-NEXT: nop
5128; MIPS32R5-NEXT: lui $1, %hi(gv2i32)
5129; MIPS32R5-NEXT: addiu $4, $1, %lo(gv2i32)
5130; MIPS32R5-NEXT: sw $3, 4($4)
5131; MIPS32R5-NEXT: sw $2, %lo(gv2i32)($1)
5132; MIPS32R5-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
5133; MIPS32R5-NEXT: addiu $sp, $sp, 24
5134; MIPS32R5-NEXT: jr $ra
5135; MIPS32R5-NEXT: nop
5136;
5137; MIPS64R5EB-LABEL: calli32_2:
5138; MIPS64R5EB: # %bb.0: # %entry
5139; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32
5140; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32
5141; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
5142; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
5143; MIPS64R5EB-NEXT: .cfi_offset 31, -8
5144; MIPS64R5EB-NEXT: .cfi_offset 28, -16
5145; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2)))
5146; MIPS64R5EB-NEXT: daddu $1, $1, $25
5147; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5148; MIPS64R5EB-NEXT: daddiu $1, $zero, 3
5149; MIPS64R5EB-NEXT: dsll $2, $1, 33
5150; MIPS64R5EB-NEXT: daddiu $4, $2, 7
5151; MIPS64R5EB-NEXT: dsll $1, $1, 34
5152; MIPS64R5EB-NEXT: daddiu $5, $1, 8
5153; MIPS64R5EB-NEXT: ld $25, %call16(i32_2)($gp)
5154; MIPS64R5EB-NEXT: jalr $25
5155; MIPS64R5EB-NEXT: nop
5156; MIPS64R5EB-NEXT: ld $1, %got_disp(gv2i32)($gp)
5157; MIPS64R5EB-NEXT: sd $2, 0($1)
5158; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
5159; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
5160; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32
5161; MIPS64R5EB-NEXT: jr $ra
5162; MIPS64R5EB-NEXT: nop
5163;
5164; MIPS64EL-LABEL: calli32_2:
5165; MIPS64EL: # %bb.0: # %entry
5166; MIPS64EL-NEXT: daddiu $sp, $sp, -16
5167; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
5168; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5169; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5170; MIPS64EL-NEXT: .cfi_offset 31, -8
5171; MIPS64EL-NEXT: .cfi_offset 28, -16
5172; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2)))
5173; MIPS64EL-NEXT: daddu $1, $1, $25
5174; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5175; MIPS64EL-NEXT: daddiu $1, $zero, 7
5176; MIPS64EL-NEXT: dsll $1, $1, 32
5177; MIPS64EL-NEXT: daddiu $4, $1, 6
5178; MIPS64EL-NEXT: daddiu $1, $zero, 1
5179; MIPS64EL-NEXT: dsll $1, $1, 35
5180; MIPS64EL-NEXT: daddiu $5, $1, 12
5181; MIPS64EL-NEXT: ld $25, %call16(i32_2)($gp)
5182; MIPS64EL-NEXT: jalr $25
5183; MIPS64EL-NEXT: nop
5184; MIPS64EL-NEXT: ld $1, %got_disp(gv2i32)($gp)
5185; MIPS64EL-NEXT: sd $2, 0($1)
5186; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5187; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5188; MIPS64EL-NEXT: daddiu $sp, $sp, 16
5189; MIPS64EL-NEXT: jr $ra
5190; MIPS64EL-NEXT: nop
5191;
5192; MIPS64R5EL-LABEL: calli32_2:
5193; MIPS64R5EL: # %bb.0: # %entry
5194; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32
5195; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32
5196; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill
5197; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill
5198; MIPS64R5EL-NEXT: .cfi_offset 31, -8
5199; MIPS64R5EL-NEXT: .cfi_offset 28, -16
5200; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2)))
5201; MIPS64R5EL-NEXT: daddu $1, $1, $25
5202; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2)))
5203; MIPS64R5EL-NEXT: daddiu $1, $zero, 7
5204; MIPS64R5EL-NEXT: dsll $1, $1, 32
5205; MIPS64R5EL-NEXT: daddiu $4, $1, 6
5206; MIPS64R5EL-NEXT: daddiu $1, $zero, 1
5207; MIPS64R5EL-NEXT: dsll $1, $1, 35
5208; MIPS64R5EL-NEXT: daddiu $5, $1, 12
5209; MIPS64R5EL-NEXT: ld $25, %call16(i32_2)($gp)
5210; MIPS64R5EL-NEXT: jalr $25
5211; MIPS64R5EL-NEXT: nop
5212; MIPS64R5EL-NEXT: ld $1, %got_disp(gv2i32)($gp)
5213; MIPS64R5EL-NEXT: sd $2, 0($1)
5214; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload
5215; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload
5216; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32
5217; MIPS64R5EL-NEXT: jr $ra
5218; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005219entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005220 %0 = call <2 x i32> @i32_2(<2 x i32> <i32 6, i32 7>, <2 x i32> <i32 12, i32 8>)
5221 store <2 x i32> %0, <2 x i32> * @gv2i32
5222 ret void
5223}
5224
5225define void @calli32_4() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005226; MIPS32-LABEL: calli32_4:
5227; MIPS32: # %bb.0: # %entry
5228; MIPS32-NEXT: addiu $sp, $sp, -40
5229; MIPS32-NEXT: .cfi_def_cfa_offset 40
5230; MIPS32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5231; MIPS32-NEXT: .cfi_offset 31, -4
5232; MIPS32-NEXT: addiu $1, $zero, 9
5233; MIPS32-NEXT: addiu $2, $zero, 10
5234; MIPS32-NEXT: sw $2, 28($sp)
5235; MIPS32-NEXT: sw $1, 24($sp)
5236; MIPS32-NEXT: addiu $1, $zero, 8
5237; MIPS32-NEXT: sw $1, 20($sp)
5238; MIPS32-NEXT: addiu $1, $zero, 12
5239; MIPS32-NEXT: sw $1, 16($sp)
5240; MIPS32-NEXT: addiu $4, $zero, 6
5241; MIPS32-NEXT: addiu $5, $zero, 7
5242; MIPS32-NEXT: addiu $6, $zero, 9
5243; MIPS32-NEXT: addiu $7, $zero, 10
5244; MIPS32-NEXT: jal i32_4
5245; MIPS32-NEXT: nop
5246; MIPS32-NEXT: lui $1, %hi(gv4i32)
5247; MIPS32-NEXT: addiu $6, $1, %lo(gv4i32)
5248; MIPS32-NEXT: sw $5, 12($6)
5249; MIPS32-NEXT: sw $4, 8($6)
5250; MIPS32-NEXT: sw $3, 4($6)
5251; MIPS32-NEXT: sw $2, %lo(gv4i32)($1)
5252; MIPS32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5253; MIPS32-NEXT: addiu $sp, $sp, 40
5254; MIPS32-NEXT: jr $ra
5255; MIPS32-NEXT: nop
5256;
5257; MIPS64EB-LABEL: calli32_4:
5258; MIPS64EB: # %bb.0: # %entry
5259; MIPS64EB-NEXT: daddiu $sp, $sp, -16
5260; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
5261; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5262; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5263; MIPS64EB-NEXT: .cfi_offset 31, -8
5264; MIPS64EB-NEXT: .cfi_offset 28, -16
5265; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4)))
5266; MIPS64EB-NEXT: daddu $1, $1, $25
5267; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5268; MIPS64EB-NEXT: daddiu $1, $zero, 3
5269; MIPS64EB-NEXT: dsll $2, $1, 33
5270; MIPS64EB-NEXT: daddiu $4, $2, 7
5271; MIPS64EB-NEXT: dsll $1, $1, 34
5272; MIPS64EB-NEXT: daddiu $6, $1, 8
5273; MIPS64EB-NEXT: daddiu $1, $zero, 9
5274; MIPS64EB-NEXT: dsll $1, $1, 32
5275; MIPS64EB-NEXT: daddiu $5, $1, 10
5276; MIPS64EB-NEXT: ld $25, %call16(i32_4)($gp)
5277; MIPS64EB-NEXT: move $7, $5
5278; MIPS64EB-NEXT: jalr $25
5279; MIPS64EB-NEXT: nop
5280; MIPS64EB-NEXT: ld $1, %got_disp(gv4i32)($gp)
5281; MIPS64EB-NEXT: sd $3, 8($1)
5282; MIPS64EB-NEXT: sd $2, 0($1)
5283; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5284; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5285; MIPS64EB-NEXT: daddiu $sp, $sp, 16
5286; MIPS64EB-NEXT: jr $ra
5287; MIPS64EB-NEXT: nop
5288;
5289; MIPS32R5-LABEL: calli32_4:
5290; MIPS32R5: # %bb.0: # %entry
5291; MIPS32R5-NEXT: addiu $sp, $sp, -40
5292; MIPS32R5-NEXT: .cfi_def_cfa_offset 40
5293; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5294; MIPS32R5-NEXT: .cfi_offset 31, -4
5295; MIPS32R5-NEXT: addiu $1, $zero, 9
5296; MIPS32R5-NEXT: addiu $2, $zero, 10
5297; MIPS32R5-NEXT: sw $2, 28($sp)
5298; MIPS32R5-NEXT: sw $1, 24($sp)
5299; MIPS32R5-NEXT: addiu $1, $zero, 8
5300; MIPS32R5-NEXT: sw $1, 20($sp)
5301; MIPS32R5-NEXT: addiu $1, $zero, 12
5302; MIPS32R5-NEXT: sw $1, 16($sp)
5303; MIPS32R5-NEXT: addiu $4, $zero, 6
5304; MIPS32R5-NEXT: addiu $5, $zero, 7
5305; MIPS32R5-NEXT: addiu $6, $zero, 9
5306; MIPS32R5-NEXT: addiu $7, $zero, 10
5307; MIPS32R5-NEXT: jal i32_4
5308; MIPS32R5-NEXT: nop
5309; MIPS32R5-NEXT: ldi.b $w0, 0
5310; MIPS32R5-NEXT: insert.w $w0[0], $2
5311; MIPS32R5-NEXT: insert.w $w0[1], $3
5312; MIPS32R5-NEXT: insert.w $w0[2], $4
5313; MIPS32R5-NEXT: lui $1, %hi(gv4i32)
5314; MIPS32R5-NEXT: insert.w $w0[3], $5
5315; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4i32)
5316; MIPS32R5-NEXT: st.w $w0, 0($1)
5317; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5318; MIPS32R5-NEXT: addiu $sp, $sp, 40
5319; MIPS32R5-NEXT: jr $ra
5320; MIPS32R5-NEXT: nop
5321;
5322; MIPS64R5-LABEL: calli32_4:
5323; MIPS64R5: # %bb.0: # %entry
5324; MIPS64R5-NEXT: daddiu $sp, $sp, -16
5325; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
5326; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5327; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5328; MIPS64R5-NEXT: .cfi_offset 31, -8
5329; MIPS64R5-NEXT: .cfi_offset 28, -16
5330; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4)))
5331; MIPS64R5-NEXT: daddu $1, $1, $25
5332; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5333; MIPS64R5-NEXT: ld $1, %got_page(.LCPI35_0)($gp)
5334; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI35_0)
5335; MIPS64R5-NEXT: ld.d $w0, 0($1)
5336; MIPS64R5-NEXT: copy_s.d $4, $w0[0]
5337; MIPS64R5-NEXT: copy_s.d $5, $w0[1]
5338; MIPS64R5-NEXT: ld $1, %got_page(.LCPI35_1)($gp)
5339; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI35_1)
5340; MIPS64R5-NEXT: ld.d $w0, 0($1)
5341; MIPS64R5-NEXT: copy_s.d $6, $w0[0]
5342; MIPS64R5-NEXT: copy_s.d $7, $w0[1]
5343; MIPS64R5-NEXT: ld $25, %call16(i32_4)($gp)
5344; MIPS64R5-NEXT: jalr $25
5345; MIPS64R5-NEXT: nop
5346; MIPS64R5-NEXT: ldi.b $w0, 0
5347; MIPS64R5-NEXT: insert.d $w0[0], $2
5348; MIPS64R5-NEXT: insert.d $w0[1], $3
5349; MIPS64R5-NEXT: ld $1, %got_disp(gv4i32)($gp)
5350; MIPS64R5-NEXT: st.d $w0, 0($1)
5351; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5352; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5353; MIPS64R5-NEXT: daddiu $sp, $sp, 16
5354; MIPS64R5-NEXT: jr $ra
5355; MIPS64R5-NEXT: nop
5356;
5357; MIPS64EL-LABEL: calli32_4:
5358; MIPS64EL: # %bb.0: # %entry
5359; MIPS64EL-NEXT: daddiu $sp, $sp, -16
5360; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
5361; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5362; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5363; MIPS64EL-NEXT: .cfi_offset 31, -8
5364; MIPS64EL-NEXT: .cfi_offset 28, -16
5365; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4)))
5366; MIPS64EL-NEXT: daddu $1, $1, $25
5367; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4)))
5368; MIPS64EL-NEXT: daddiu $1, $zero, 7
5369; MIPS64EL-NEXT: dsll $1, $1, 32
5370; MIPS64EL-NEXT: daddiu $4, $1, 6
5371; MIPS64EL-NEXT: daddiu $1, $zero, 1
5372; MIPS64EL-NEXT: dsll $1, $1, 35
5373; MIPS64EL-NEXT: daddiu $6, $1, 12
5374; MIPS64EL-NEXT: daddiu $1, $zero, 5
5375; MIPS64EL-NEXT: dsll $1, $1, 33
5376; MIPS64EL-NEXT: daddiu $5, $1, 9
5377; MIPS64EL-NEXT: ld $25, %call16(i32_4)($gp)
5378; MIPS64EL-NEXT: move $7, $5
5379; MIPS64EL-NEXT: jalr $25
5380; MIPS64EL-NEXT: nop
5381; MIPS64EL-NEXT: ld $1, %got_disp(gv4i32)($gp)
5382; MIPS64EL-NEXT: sd $3, 8($1)
5383; MIPS64EL-NEXT: sd $2, 0($1)
5384; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5385; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5386; MIPS64EL-NEXT: daddiu $sp, $sp, 16
5387; MIPS64EL-NEXT: jr $ra
5388; MIPS64EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005389entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005390 %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>)
5391 store <4 x i32> %0, <4 x i32> * @gv4i32
5392 ret void
5393}
5394
5395define void @calli64_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005396; MIPS32EB-LABEL: calli64_2:
5397; MIPS32EB: # %bb.0: # %entry
5398; MIPS32EB-NEXT: addiu $sp, $sp, -40
5399; MIPS32EB-NEXT: .cfi_def_cfa_offset 40
5400; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5401; MIPS32EB-NEXT: .cfi_offset 31, -4
5402; MIPS32EB-NEXT: addiu $1, $zero, 8
5403; MIPS32EB-NEXT: sw $1, 28($sp)
5404; MIPS32EB-NEXT: addiu $1, $zero, 12
5405; MIPS32EB-NEXT: sw $1, 20($sp)
5406; MIPS32EB-NEXT: sw $zero, 24($sp)
5407; MIPS32EB-NEXT: sw $zero, 16($sp)
5408; MIPS32EB-NEXT: addiu $4, $zero, 0
5409; MIPS32EB-NEXT: addiu $5, $zero, 6
5410; MIPS32EB-NEXT: addiu $6, $zero, 0
5411; MIPS32EB-NEXT: addiu $7, $zero, 7
5412; MIPS32EB-NEXT: jal i64_2
5413; MIPS32EB-NEXT: nop
5414; MIPS32EB-NEXT: lui $1, %hi(gv2i64)
5415; MIPS32EB-NEXT: addiu $6, $1, %lo(gv2i64)
5416; MIPS32EB-NEXT: sw $5, 12($6)
5417; MIPS32EB-NEXT: sw $4, 8($6)
5418; MIPS32EB-NEXT: sw $3, 4($6)
5419; MIPS32EB-NEXT: sw $2, %lo(gv2i64)($1)
5420; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5421; MIPS32EB-NEXT: addiu $sp, $sp, 40
5422; MIPS32EB-NEXT: jr $ra
5423; MIPS32EB-NEXT: nop
5424;
5425; MIPS64-LABEL: calli64_2:
5426; MIPS64: # %bb.0: # %entry
5427; MIPS64-NEXT: daddiu $sp, $sp, -16
5428; MIPS64-NEXT: .cfi_def_cfa_offset 16
5429; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5430; MIPS64-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5431; MIPS64-NEXT: .cfi_offset 31, -8
5432; MIPS64-NEXT: .cfi_offset 28, -16
5433; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(calli64_2)))
5434; MIPS64-NEXT: daddu $1, $1, $25
5435; MIPS64-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2)))
5436; MIPS64-NEXT: ld $25, %call16(i64_2)($gp)
5437; MIPS64-NEXT: daddiu $4, $zero, 6
5438; MIPS64-NEXT: daddiu $5, $zero, 7
5439; MIPS64-NEXT: daddiu $6, $zero, 12
5440; MIPS64-NEXT: daddiu $7, $zero, 8
5441; MIPS64-NEXT: jalr $25
5442; MIPS64-NEXT: nop
5443; MIPS64-NEXT: ld $1, %got_disp(gv2i64)($gp)
5444; MIPS64-NEXT: sd $3, 8($1)
5445; MIPS64-NEXT: sd $2, 0($1)
5446; MIPS64-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5447; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5448; MIPS64-NEXT: daddiu $sp, $sp, 16
5449; MIPS64-NEXT: jr $ra
5450; MIPS64-NEXT: nop
5451;
5452; MIPS32R5-LABEL: calli64_2:
5453; MIPS32R5: # %bb.0: # %entry
5454; MIPS32R5-NEXT: addiu $sp, $sp, -40
5455; MIPS32R5-NEXT: .cfi_def_cfa_offset 40
5456; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5457; MIPS32R5-NEXT: .cfi_offset 31, -4
5458; MIPS32R5-NEXT: lui $1, %hi($CPI36_0)
5459; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI36_0)
5460; MIPS32R5-NEXT: ld.w $w0, 0($1)
5461; MIPS32R5-NEXT: copy_s.w $4, $w0[0]
5462; MIPS32R5-NEXT: copy_s.w $5, $w0[1]
5463; MIPS32R5-NEXT: copy_s.w $6, $w0[2]
5464; MIPS32R5-NEXT: copy_s.w $7, $w0[3]
5465; MIPS32R5-NEXT: lui $1, %hi($CPI36_1)
5466; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI36_1)
5467; MIPS32R5-NEXT: ld.w $w0, 0($1)
5468; MIPS32R5-NEXT: copy_s.w $1, $w0[0]
5469; MIPS32R5-NEXT: copy_s.w $2, $w0[1]
5470; MIPS32R5-NEXT: copy_s.w $3, $w0[2]
5471; MIPS32R5-NEXT: copy_s.w $8, $w0[3]
5472; MIPS32R5-NEXT: sw $8, 28($sp)
5473; MIPS32R5-NEXT: sw $3, 24($sp)
5474; MIPS32R5-NEXT: sw $2, 20($sp)
5475; MIPS32R5-NEXT: sw $1, 16($sp)
5476; MIPS32R5-NEXT: jal i64_2
5477; MIPS32R5-NEXT: nop
5478; MIPS32R5-NEXT: ldi.b $w0, 0
5479; MIPS32R5-NEXT: insert.w $w0[0], $2
5480; MIPS32R5-NEXT: lui $1, %hi(gv2i64)
5481; MIPS32R5-NEXT: insert.w $w0[1], $3
5482; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2i64)
5483; MIPS32R5-NEXT: insert.w $w0[2], $4
5484; MIPS32R5-NEXT: insert.w $w0[3], $5
5485; MIPS32R5-NEXT: st.w $w0, 0($1)
5486; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5487; MIPS32R5-NEXT: addiu $sp, $sp, 40
5488; MIPS32R5-NEXT: jr $ra
5489; MIPS32R5-NEXT: nop
5490;
5491; MIPS64R5-LABEL: calli64_2:
5492; MIPS64R5: # %bb.0: # %entry
5493; MIPS64R5-NEXT: daddiu $sp, $sp, -16
5494; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
5495; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5496; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5497; MIPS64R5-NEXT: .cfi_offset 31, -8
5498; MIPS64R5-NEXT: .cfi_offset 28, -16
5499; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli64_2)))
5500; MIPS64R5-NEXT: daddu $1, $1, $25
5501; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2)))
5502; MIPS64R5-NEXT: ld $25, %call16(i64_2)($gp)
5503; MIPS64R5-NEXT: daddiu $4, $zero, 6
5504; MIPS64R5-NEXT: daddiu $5, $zero, 7
5505; MIPS64R5-NEXT: daddiu $6, $zero, 12
5506; MIPS64R5-NEXT: daddiu $7, $zero, 8
5507; MIPS64R5-NEXT: jalr $25
5508; MIPS64R5-NEXT: nop
5509; MIPS64R5-NEXT: ldi.b $w0, 0
5510; MIPS64R5-NEXT: insert.d $w0[0], $2
5511; MIPS64R5-NEXT: insert.d $w0[1], $3
5512; MIPS64R5-NEXT: ld $1, %got_disp(gv2i64)($gp)
5513; MIPS64R5-NEXT: st.d $w0, 0($1)
5514; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5515; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5516; MIPS64R5-NEXT: daddiu $sp, $sp, 16
5517; MIPS64R5-NEXT: jr $ra
5518; MIPS64R5-NEXT: nop
5519;
5520; MIPS32EL-LABEL: calli64_2:
5521; MIPS32EL: # %bb.0: # %entry
5522; MIPS32EL-NEXT: addiu $sp, $sp, -40
5523; MIPS32EL-NEXT: .cfi_def_cfa_offset 40
5524; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5525; MIPS32EL-NEXT: .cfi_offset 31, -4
5526; MIPS32EL-NEXT: addiu $1, $zero, 8
5527; MIPS32EL-NEXT: sw $1, 24($sp)
5528; MIPS32EL-NEXT: addiu $1, $zero, 12
5529; MIPS32EL-NEXT: sw $1, 16($sp)
5530; MIPS32EL-NEXT: sw $zero, 28($sp)
5531; MIPS32EL-NEXT: sw $zero, 20($sp)
5532; MIPS32EL-NEXT: addiu $4, $zero, 6
5533; MIPS32EL-NEXT: addiu $5, $zero, 0
5534; MIPS32EL-NEXT: addiu $6, $zero, 7
5535; MIPS32EL-NEXT: addiu $7, $zero, 0
5536; MIPS32EL-NEXT: jal i64_2
5537; MIPS32EL-NEXT: nop
5538; MIPS32EL-NEXT: lui $1, %hi(gv2i64)
5539; MIPS32EL-NEXT: addiu $6, $1, %lo(gv2i64)
5540; MIPS32EL-NEXT: sw $5, 12($6)
5541; MIPS32EL-NEXT: sw $4, 8($6)
5542; MIPS32EL-NEXT: sw $3, 4($6)
5543; MIPS32EL-NEXT: sw $2, %lo(gv2i64)($1)
5544; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5545; MIPS32EL-NEXT: addiu $sp, $sp, 40
5546; MIPS32EL-NEXT: jr $ra
5547; MIPS32EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005548entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005549 %0 = call <2 x i64> @i64_2(<2 x i64> <i64 6, i64 7>, <2 x i64> <i64 12, i64 8>)
5550 store <2 x i64> %0, <2 x i64> * @gv2i64
5551 ret void
5552}
5553
5554declare <2 x float> @float2_extern(<2 x float>, <2 x float>)
5555declare <4 x float> @float4_extern(<4 x float>, <4 x float>)
5556declare <2 x double> @double2_extern(<2 x double>, <2 x double>)
5557
5558define void @callfloat_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005559; MIPS32-LABEL: callfloat_2:
5560; MIPS32: # %bb.0: # %entry
5561; MIPS32-NEXT: addiu $sp, $sp, -40
5562; MIPS32-NEXT: .cfi_def_cfa_offset 40
5563; MIPS32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5564; MIPS32-NEXT: .cfi_offset 31, -4
5565; MIPS32-NEXT: lui $1, 16736
5566; MIPS32-NEXT: sw $1, 20($sp)
5567; MIPS32-NEXT: lui $1, 16704
5568; MIPS32-NEXT: sw $1, 16($sp)
5569; MIPS32-NEXT: addiu $4, $sp, 24
5570; MIPS32-NEXT: addiu $6, $zero, 0
5571; MIPS32-NEXT: lui $7, 49024
5572; MIPS32-NEXT: jal float2_extern
5573; MIPS32-NEXT: nop
5574; MIPS32-NEXT: lui $1, %hi(gv2f32)
5575; MIPS32-NEXT: addiu $2, $1, %lo(gv2f32)
5576; MIPS32-NEXT: lwc1 $f0, 28($sp)
5577; MIPS32-NEXT: swc1 $f0, 4($2)
5578; MIPS32-NEXT: lwc1 $f0, 24($sp)
5579; MIPS32-NEXT: swc1 $f0, %lo(gv2f32)($1)
5580; MIPS32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5581; MIPS32-NEXT: addiu $sp, $sp, 40
5582; MIPS32-NEXT: jr $ra
5583; MIPS32-NEXT: nop
5584;
5585; MIPS64EB-LABEL: callfloat_2:
5586; MIPS64EB: # %bb.0: # %entry
5587; MIPS64EB-NEXT: daddiu $sp, $sp, -16
5588; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
5589; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5590; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5591; MIPS64EB-NEXT: .cfi_offset 31, -8
5592; MIPS64EB-NEXT: .cfi_offset 28, -16
5593; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5594; MIPS64EB-NEXT: daddu $1, $1, $25
5595; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5596; MIPS64EB-NEXT: daddiu $1, $zero, 383
5597; MIPS64EB-NEXT: dsll $4, $1, 23
5598; MIPS64EB-NEXT: daddiu $1, $zero, 261
5599; MIPS64EB-NEXT: dsll $1, $1, 33
5600; MIPS64EB-NEXT: daddiu $1, $1, 523
5601; MIPS64EB-NEXT: dsll $5, $1, 21
5602; MIPS64EB-NEXT: ld $25, %call16(float2_extern)($gp)
5603; MIPS64EB-NEXT: jalr $25
5604; MIPS64EB-NEXT: nop
5605; MIPS64EB-NEXT: ld $1, %got_disp(gv2f32)($gp)
5606; MIPS64EB-NEXT: sd $2, 0($1)
5607; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5608; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5609; MIPS64EB-NEXT: daddiu $sp, $sp, 16
5610; MIPS64EB-NEXT: jr $ra
5611; MIPS64EB-NEXT: nop
5612;
5613; MIPS32R5-LABEL: callfloat_2:
5614; MIPS32R5: # %bb.0: # %entry
5615; MIPS32R5-NEXT: addiu $sp, $sp, -40
5616; MIPS32R5-NEXT: .cfi_def_cfa_offset 40
5617; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
5618; MIPS32R5-NEXT: .cfi_offset 31, -4
5619; MIPS32R5-NEXT: lui $1, 16736
5620; MIPS32R5-NEXT: sw $1, 20($sp)
5621; MIPS32R5-NEXT: lui $1, 16704
5622; MIPS32R5-NEXT: sw $1, 16($sp)
5623; MIPS32R5-NEXT: addiu $4, $sp, 24
5624; MIPS32R5-NEXT: addiu $6, $zero, 0
5625; MIPS32R5-NEXT: lui $7, 49024
5626; MIPS32R5-NEXT: jal float2_extern
5627; MIPS32R5-NEXT: nop
5628; MIPS32R5-NEXT: lui $1, %hi(gv2f32)
5629; MIPS32R5-NEXT: addiu $2, $1, %lo(gv2f32)
5630; MIPS32R5-NEXT: lwc1 $f0, 28($sp)
5631; MIPS32R5-NEXT: swc1 $f0, 4($2)
5632; MIPS32R5-NEXT: lwc1 $f0, 24($sp)
5633; MIPS32R5-NEXT: swc1 $f0, %lo(gv2f32)($1)
5634; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
5635; MIPS32R5-NEXT: addiu $sp, $sp, 40
5636; MIPS32R5-NEXT: jr $ra
5637; MIPS32R5-NEXT: nop
5638;
5639; MIPS64R5-LABEL: callfloat_2:
5640; MIPS64R5: # %bb.0: # %entry
5641; MIPS64R5-NEXT: daddiu $sp, $sp, -16
5642; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
5643; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5644; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5645; MIPS64R5-NEXT: .cfi_offset 31, -8
5646; MIPS64R5-NEXT: .cfi_offset 28, -16
5647; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5648; MIPS64R5-NEXT: daddu $1, $1, $25
5649; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5650; MIPS64R5-NEXT: ld $1, %got_page(.LCPI37_0)($gp)
5651; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI37_0)
5652; MIPS64R5-NEXT: ld.d $w0, 0($1)
5653; MIPS64R5-NEXT: copy_s.d $4, $w0[0]
5654; MIPS64R5-NEXT: ld $1, %got_page(.LCPI37_1)($gp)
5655; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI37_1)
5656; MIPS64R5-NEXT: ld.d $w0, 0($1)
5657; MIPS64R5-NEXT: copy_s.d $5, $w0[0]
5658; MIPS64R5-NEXT: ld $25, %call16(float2_extern)($gp)
5659; MIPS64R5-NEXT: jalr $25
5660; MIPS64R5-NEXT: nop
5661; MIPS64R5-NEXT: ld $1, %got_disp(gv2f32)($gp)
5662; MIPS64R5-NEXT: sd $2, 0($1)
5663; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5664; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5665; MIPS64R5-NEXT: daddiu $sp, $sp, 16
5666; MIPS64R5-NEXT: jr $ra
5667; MIPS64R5-NEXT: nop
5668;
5669; MIPS64EL-LABEL: callfloat_2:
5670; MIPS64EL: # %bb.0: # %entry
5671; MIPS64EL-NEXT: daddiu $sp, $sp, -16
5672; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
5673; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5674; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5675; MIPS64EL-NEXT: .cfi_offset 31, -8
5676; MIPS64EL-NEXT: .cfi_offset 28, -16
5677; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2)))
5678; MIPS64EL-NEXT: daddu $1, $1, $25
5679; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2)))
5680; MIPS64EL-NEXT: daddiu $1, $zero, 383
5681; MIPS64EL-NEXT: dsll $4, $1, 55
5682; MIPS64EL-NEXT: daddiu $1, $zero, 523
5683; MIPS64EL-NEXT: dsll $1, $1, 31
5684; MIPS64EL-NEXT: daddiu $1, $1, 261
5685; MIPS64EL-NEXT: dsll $5, $1, 22
5686; MIPS64EL-NEXT: ld $25, %call16(float2_extern)($gp)
5687; MIPS64EL-NEXT: jalr $25
5688; MIPS64EL-NEXT: nop
5689; MIPS64EL-NEXT: ld $1, %got_disp(gv2f32)($gp)
5690; MIPS64EL-NEXT: sd $2, 0($1)
5691; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5692; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5693; MIPS64EL-NEXT: daddiu $sp, $sp, 16
5694; MIPS64EL-NEXT: jr $ra
5695; MIPS64EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005696entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005697 %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>)
5698 store <2 x float> %0, <2 x float> * @gv2f32
5699 ret void
5700}
5701
5702define void @callfloat_4() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005703; MIPS32-LABEL: callfloat_4:
5704; MIPS32: # %bb.0: # %entry
5705; MIPS32-NEXT: addiu $sp, $sp, -80
5706; MIPS32-NEXT: .cfi_def_cfa_offset 80
5707; MIPS32-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill
5708; MIPS32-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill
5709; MIPS32-NEXT: .cfi_offset 31, -4
5710; MIPS32-NEXT: .cfi_offset 30, -8
5711; MIPS32-NEXT: move $fp, $sp
5712; MIPS32-NEXT: .cfi_def_cfa_register 30
5713; MIPS32-NEXT: addiu $1, $zero, -16
5714; MIPS32-NEXT: and $sp, $sp, $1
5715; MIPS32-NEXT: lui $1, 16704
5716; MIPS32-NEXT: lui $2, 16736
5717; MIPS32-NEXT: lui $3, 16752
5718; MIPS32-NEXT: lui $4, 16768
5719; MIPS32-NEXT: sw $4, 36($sp)
5720; MIPS32-NEXT: sw $3, 32($sp)
5721; MIPS32-NEXT: sw $2, 28($sp)
5722; MIPS32-NEXT: sw $1, 24($sp)
5723; MIPS32-NEXT: lui $1, 16512
5724; MIPS32-NEXT: sw $1, 20($sp)
5725; MIPS32-NEXT: lui $1, 16384
5726; MIPS32-NEXT: sw $1, 16($sp)
5727; MIPS32-NEXT: addiu $4, $sp, 48
5728; MIPS32-NEXT: addiu $6, $zero, 0
5729; MIPS32-NEXT: lui $7, 49024
5730; MIPS32-NEXT: jal float4_extern
5731; MIPS32-NEXT: nop
5732; MIPS32-NEXT: lui $1, %hi(gv4f32)
5733; MIPS32-NEXT: addiu $2, $1, %lo(gv4f32)
5734; MIPS32-NEXT: lwc1 $f0, 60($sp)
5735; MIPS32-NEXT: swc1 $f0, 12($2)
5736; MIPS32-NEXT: lwc1 $f0, 56($sp)
5737; MIPS32-NEXT: swc1 $f0, 8($2)
5738; MIPS32-NEXT: lwc1 $f0, 52($sp)
5739; MIPS32-NEXT: swc1 $f0, 4($2)
5740; MIPS32-NEXT: lwc1 $f0, 48($sp)
5741; MIPS32-NEXT: swc1 $f0, %lo(gv4f32)($1)
5742; MIPS32-NEXT: move $sp, $fp
5743; MIPS32-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload
5744; MIPS32-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload
5745; MIPS32-NEXT: addiu $sp, $sp, 80
5746; MIPS32-NEXT: jr $ra
5747; MIPS32-NEXT: nop
5748;
5749; MIPS64EB-LABEL: callfloat_4:
5750; MIPS64EB: # %bb.0: # %entry
5751; MIPS64EB-NEXT: daddiu $sp, $sp, -16
5752; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
5753; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5754; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5755; MIPS64EB-NEXT: .cfi_offset 31, -8
5756; MIPS64EB-NEXT: .cfi_offset 28, -16
5757; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5758; MIPS64EB-NEXT: daddu $1, $1, $25
5759; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5760; MIPS64EB-NEXT: daddiu $1, $zero, 1
5761; MIPS64EB-NEXT: dsll $1, $1, 39
5762; MIPS64EB-NEXT: daddiu $1, $1, 129
5763; MIPS64EB-NEXT: daddiu $2, $zero, 261
5764; MIPS64EB-NEXT: dsll $2, $2, 33
5765; MIPS64EB-NEXT: daddiu $3, $zero, 383
5766; MIPS64EB-NEXT: dsll $4, $3, 23
5767; MIPS64EB-NEXT: dsll $5, $1, 23
5768; MIPS64EB-NEXT: daddiu $1, $2, 523
5769; MIPS64EB-NEXT: dsll $6, $1, 21
5770; MIPS64EB-NEXT: daddiu $1, $zero, 1047
5771; MIPS64EB-NEXT: dsll $1, $1, 29
5772; MIPS64EB-NEXT: daddiu $1, $1, 131
5773; MIPS64EB-NEXT: dsll $7, $1, 23
5774; MIPS64EB-NEXT: ld $25, %call16(float4_extern)($gp)
5775; MIPS64EB-NEXT: jalr $25
5776; MIPS64EB-NEXT: nop
5777; MIPS64EB-NEXT: ld $1, %got_disp(gv4f32)($gp)
5778; MIPS64EB-NEXT: sd $3, 8($1)
5779; MIPS64EB-NEXT: sd $2, 0($1)
5780; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5781; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5782; MIPS64EB-NEXT: daddiu $sp, $sp, 16
5783; MIPS64EB-NEXT: jr $ra
5784; MIPS64EB-NEXT: nop
5785;
5786; MIPS32R5-LABEL: callfloat_4:
5787; MIPS32R5: # %bb.0: # %entry
5788; MIPS32R5-NEXT: addiu $sp, $sp, -80
5789; MIPS32R5-NEXT: .cfi_def_cfa_offset 80
5790; MIPS32R5-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill
5791; MIPS32R5-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill
5792; MIPS32R5-NEXT: .cfi_offset 31, -4
5793; MIPS32R5-NEXT: .cfi_offset 30, -8
5794; MIPS32R5-NEXT: move $fp, $sp
5795; MIPS32R5-NEXT: .cfi_def_cfa_register 30
5796; MIPS32R5-NEXT: addiu $1, $zero, -16
5797; MIPS32R5-NEXT: and $sp, $sp, $1
5798; MIPS32R5-NEXT: lui $1, %hi($CPI38_0)
5799; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI38_0)
5800; MIPS32R5-NEXT: ld.w $w0, 0($1)
5801; MIPS32R5-NEXT: copy_s.w $6, $w0[0]
5802; MIPS32R5-NEXT: copy_s.w $7, $w0[1]
5803; MIPS32R5-NEXT: copy_s.w $1, $w0[2]
5804; MIPS32R5-NEXT: copy_s.w $2, $w0[3]
5805; MIPS32R5-NEXT: lui $3, %hi($CPI38_1)
5806; MIPS32R5-NEXT: addiu $3, $3, %lo($CPI38_1)
5807; MIPS32R5-NEXT: ld.w $w0, 0($3)
5808; MIPS32R5-NEXT: copy_s.w $3, $w0[0]
5809; MIPS32R5-NEXT: copy_s.w $4, $w0[1]
5810; MIPS32R5-NEXT: copy_s.w $5, $w0[2]
5811; MIPS32R5-NEXT: copy_s.w $8, $w0[3]
5812; MIPS32R5-NEXT: sw $8, 36($sp)
5813; MIPS32R5-NEXT: sw $5, 32($sp)
5814; MIPS32R5-NEXT: sw $4, 28($sp)
5815; MIPS32R5-NEXT: sw $3, 24($sp)
5816; MIPS32R5-NEXT: sw $2, 20($sp)
5817; MIPS32R5-NEXT: sw $1, 16($sp)
5818; MIPS32R5-NEXT: addiu $4, $sp, 48
5819; MIPS32R5-NEXT: jal float4_extern
5820; MIPS32R5-NEXT: nop
5821; MIPS32R5-NEXT: lui $1, %hi(gv4f32)
5822; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4f32)
5823; MIPS32R5-NEXT: ld.w $w0, 48($sp)
5824; MIPS32R5-NEXT: st.w $w0, 0($1)
5825; MIPS32R5-NEXT: move $sp, $fp
5826; MIPS32R5-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload
5827; MIPS32R5-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload
5828; MIPS32R5-NEXT: addiu $sp, $sp, 80
5829; MIPS32R5-NEXT: jr $ra
5830; MIPS32R5-NEXT: nop
5831;
5832; MIPS64R5-LABEL: callfloat_4:
5833; MIPS64R5: # %bb.0: # %entry
5834; MIPS64R5-NEXT: daddiu $sp, $sp, -16
5835; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
5836; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5837; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5838; MIPS64R5-NEXT: .cfi_offset 31, -8
5839; MIPS64R5-NEXT: .cfi_offset 28, -16
5840; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5841; MIPS64R5-NEXT: daddu $1, $1, $25
5842; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5843; MIPS64R5-NEXT: ld $1, %got_page(.LCPI38_0)($gp)
5844; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI38_0)
5845; MIPS64R5-NEXT: ld.d $w0, 0($1)
5846; MIPS64R5-NEXT: copy_s.d $4, $w0[0]
5847; MIPS64R5-NEXT: copy_s.d $5, $w0[1]
5848; MIPS64R5-NEXT: ld $1, %got_page(.LCPI38_1)($gp)
5849; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI38_1)
5850; MIPS64R5-NEXT: ld.d $w0, 0($1)
5851; MIPS64R5-NEXT: copy_s.d $6, $w0[0]
5852; MIPS64R5-NEXT: copy_s.d $7, $w0[1]
5853; MIPS64R5-NEXT: ld $25, %call16(float4_extern)($gp)
5854; MIPS64R5-NEXT: jalr $25
5855; MIPS64R5-NEXT: nop
5856; MIPS64R5-NEXT: ldi.b $w0, 0
5857; MIPS64R5-NEXT: insert.d $w0[0], $2
5858; MIPS64R5-NEXT: insert.d $w0[1], $3
5859; MIPS64R5-NEXT: ld $1, %got_disp(gv4f32)($gp)
5860; MIPS64R5-NEXT: st.d $w0, 0($1)
5861; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5862; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5863; MIPS64R5-NEXT: daddiu $sp, $sp, 16
5864; MIPS64R5-NEXT: jr $ra
5865; MIPS64R5-NEXT: nop
5866;
5867; MIPS64EL-LABEL: callfloat_4:
5868; MIPS64EL: # %bb.0: # %entry
5869; MIPS64EL-NEXT: daddiu $sp, $sp, -16
5870; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
5871; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5872; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5873; MIPS64EL-NEXT: .cfi_offset 31, -8
5874; MIPS64EL-NEXT: .cfi_offset 28, -16
5875; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4)))
5876; MIPS64EL-NEXT: daddu $1, $1, $25
5877; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4)))
5878; MIPS64EL-NEXT: daddiu $1, $zero, 129
5879; MIPS64EL-NEXT: dsll $1, $1, 25
5880; MIPS64EL-NEXT: daddiu $1, $1, 1
5881; MIPS64EL-NEXT: daddiu $2, $zero, 523
5882; MIPS64EL-NEXT: dsll $2, $2, 31
5883; MIPS64EL-NEXT: daddiu $3, $zero, 383
5884; MIPS64EL-NEXT: dsll $4, $3, 55
5885; MIPS64EL-NEXT: dsll $5, $1, 30
5886; MIPS64EL-NEXT: daddiu $1, $2, 261
5887; MIPS64EL-NEXT: dsll $6, $1, 22
5888; MIPS64EL-NEXT: daddiu $1, $zero, 131
5889; MIPS64EL-NEXT: dsll $1, $1, 35
5890; MIPS64EL-NEXT: daddiu $1, $1, 1047
5891; MIPS64EL-NEXT: dsll $7, $1, 20
5892; MIPS64EL-NEXT: ld $25, %call16(float4_extern)($gp)
5893; MIPS64EL-NEXT: jalr $25
5894; MIPS64EL-NEXT: nop
5895; MIPS64EL-NEXT: ld $1, %got_disp(gv4f32)($gp)
5896; MIPS64EL-NEXT: sd $3, 8($1)
5897; MIPS64EL-NEXT: sd $2, 0($1)
5898; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5899; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5900; MIPS64EL-NEXT: daddiu $sp, $sp, 16
5901; MIPS64EL-NEXT: jr $ra
5902; MIPS64EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00005903entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00005904 %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>)
5905 store <4 x float> %0, <4 x float> * @gv4f32
5906 ret void
5907}
5908
5909define void @calldouble_2() {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00005910; MIPS32EB-LABEL: calldouble_2:
5911; MIPS32EB: # %bb.0: # %entry
5912; MIPS32EB-NEXT: addiu $sp, $sp, -80
5913; MIPS32EB-NEXT: .cfi_def_cfa_offset 80
5914; MIPS32EB-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill
5915; MIPS32EB-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill
5916; MIPS32EB-NEXT: .cfi_offset 31, -4
5917; MIPS32EB-NEXT: .cfi_offset 30, -8
5918; MIPS32EB-NEXT: move $fp, $sp
5919; MIPS32EB-NEXT: .cfi_def_cfa_register 30
5920; MIPS32EB-NEXT: addiu $1, $zero, -16
5921; MIPS32EB-NEXT: and $sp, $sp, $1
5922; MIPS32EB-NEXT: lui $1, 16424
5923; MIPS32EB-NEXT: lui $2, 16428
5924; MIPS32EB-NEXT: sw $2, 32($sp)
5925; MIPS32EB-NEXT: sw $1, 24($sp)
5926; MIPS32EB-NEXT: lui $1, 49136
5927; MIPS32EB-NEXT: sw $1, 16($sp)
5928; MIPS32EB-NEXT: sw $zero, 36($sp)
5929; MIPS32EB-NEXT: sw $zero, 28($sp)
5930; MIPS32EB-NEXT: sw $zero, 20($sp)
5931; MIPS32EB-NEXT: addiu $4, $sp, 48
5932; MIPS32EB-NEXT: addiu $6, $zero, 0
5933; MIPS32EB-NEXT: addiu $7, $zero, 0
5934; MIPS32EB-NEXT: jal double2_extern
5935; MIPS32EB-NEXT: nop
5936; MIPS32EB-NEXT: lui $1, %hi(gv2f64)
5937; MIPS32EB-NEXT: addiu $2, $1, %lo(gv2f64)
5938; MIPS32EB-NEXT: ldc1 $f0, 56($sp)
5939; MIPS32EB-NEXT: sdc1 $f0, 8($2)
5940; MIPS32EB-NEXT: ldc1 $f0, 48($sp)
5941; MIPS32EB-NEXT: sdc1 $f0, %lo(gv2f64)($1)
5942; MIPS32EB-NEXT: move $sp, $fp
5943; MIPS32EB-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload
5944; MIPS32EB-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload
5945; MIPS32EB-NEXT: addiu $sp, $sp, 80
5946; MIPS32EB-NEXT: jr $ra
5947; MIPS32EB-NEXT: nop
5948;
5949; MIPS64-LABEL: calldouble_2:
5950; MIPS64: # %bb.0: # %entry
5951; MIPS64-NEXT: daddiu $sp, $sp, -16
5952; MIPS64-NEXT: .cfi_def_cfa_offset 16
5953; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
5954; MIPS64-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
5955; MIPS64-NEXT: .cfi_offset 31, -8
5956; MIPS64-NEXT: .cfi_offset 28, -16
5957; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(calldouble_2)))
5958; MIPS64-NEXT: daddu $1, $1, $25
5959; MIPS64-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2)))
5960; MIPS64-NEXT: daddiu $1, $zero, 3071
5961; MIPS64-NEXT: dsll $5, $1, 52
5962; MIPS64-NEXT: daddiu $1, $zero, 2053
5963; MIPS64-NEXT: dsll $6, $1, 51
5964; MIPS64-NEXT: daddiu $1, $zero, 4107
5965; MIPS64-NEXT: dsll $7, $1, 50
5966; MIPS64-NEXT: ld $25, %call16(double2_extern)($gp)
5967; MIPS64-NEXT: daddiu $4, $zero, 0
5968; MIPS64-NEXT: jalr $25
5969; MIPS64-NEXT: nop
5970; MIPS64-NEXT: ld $1, %got_disp(gv2f64)($gp)
5971; MIPS64-NEXT: sd $3, 8($1)
5972; MIPS64-NEXT: sd $2, 0($1)
5973; MIPS64-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
5974; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
5975; MIPS64-NEXT: daddiu $sp, $sp, 16
5976; MIPS64-NEXT: jr $ra
5977; MIPS64-NEXT: nop
5978;
5979; MIPS32R5-LABEL: calldouble_2:
5980; MIPS32R5: # %bb.0: # %entry
5981; MIPS32R5-NEXT: addiu $sp, $sp, -80
5982; MIPS32R5-NEXT: .cfi_def_cfa_offset 80
5983; MIPS32R5-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill
5984; MIPS32R5-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill
5985; MIPS32R5-NEXT: .cfi_offset 31, -4
5986; MIPS32R5-NEXT: .cfi_offset 30, -8
5987; MIPS32R5-NEXT: move $fp, $sp
5988; MIPS32R5-NEXT: .cfi_def_cfa_register 30
5989; MIPS32R5-NEXT: addiu $1, $zero, -16
5990; MIPS32R5-NEXT: and $sp, $sp, $1
5991; MIPS32R5-NEXT: lui $1, %hi($CPI39_0)
5992; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI39_0)
5993; MIPS32R5-NEXT: ld.w $w0, 0($1)
5994; MIPS32R5-NEXT: copy_s.w $6, $w0[0]
5995; MIPS32R5-NEXT: copy_s.w $7, $w0[1]
5996; MIPS32R5-NEXT: copy_s.w $1, $w0[2]
5997; MIPS32R5-NEXT: copy_s.w $2, $w0[3]
5998; MIPS32R5-NEXT: lui $3, %hi($CPI39_1)
5999; MIPS32R5-NEXT: addiu $3, $3, %lo($CPI39_1)
6000; MIPS32R5-NEXT: ld.w $w0, 0($3)
6001; MIPS32R5-NEXT: copy_s.w $3, $w0[0]
6002; MIPS32R5-NEXT: copy_s.w $4, $w0[1]
6003; MIPS32R5-NEXT: copy_s.w $5, $w0[2]
6004; MIPS32R5-NEXT: copy_s.w $8, $w0[3]
6005; MIPS32R5-NEXT: sw $8, 36($sp)
6006; MIPS32R5-NEXT: sw $5, 32($sp)
6007; MIPS32R5-NEXT: sw $4, 28($sp)
6008; MIPS32R5-NEXT: sw $3, 24($sp)
6009; MIPS32R5-NEXT: sw $2, 20($sp)
6010; MIPS32R5-NEXT: sw $1, 16($sp)
6011; MIPS32R5-NEXT: addiu $4, $sp, 48
6012; MIPS32R5-NEXT: jal double2_extern
6013; MIPS32R5-NEXT: nop
6014; MIPS32R5-NEXT: lui $1, %hi(gv2f64)
6015; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2f64)
6016; MIPS32R5-NEXT: ld.d $w0, 48($sp)
6017; MIPS32R5-NEXT: st.d $w0, 0($1)
6018; MIPS32R5-NEXT: move $sp, $fp
6019; MIPS32R5-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload
6020; MIPS32R5-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload
6021; MIPS32R5-NEXT: addiu $sp, $sp, 80
6022; MIPS32R5-NEXT: jr $ra
6023; MIPS32R5-NEXT: nop
6024;
6025; MIPS64R5-LABEL: calldouble_2:
6026; MIPS64R5: # %bb.0: # %entry
6027; MIPS64R5-NEXT: daddiu $sp, $sp, -16
6028; MIPS64R5-NEXT: .cfi_def_cfa_offset 16
6029; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
6030; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
6031; MIPS64R5-NEXT: .cfi_offset 31, -8
6032; MIPS64R5-NEXT: .cfi_offset 28, -16
6033; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calldouble_2)))
6034; MIPS64R5-NEXT: daddu $1, $1, $25
6035; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2)))
6036; MIPS64R5-NEXT: ld $1, %got_page(.LCPI39_0)($gp)
6037; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI39_0)
6038; MIPS64R5-NEXT: ld.d $w0, 0($1)
6039; MIPS64R5-NEXT: copy_s.d $4, $w0[0]
6040; MIPS64R5-NEXT: copy_s.d $5, $w0[1]
6041; MIPS64R5-NEXT: ld $1, %got_page(.LCPI39_1)($gp)
6042; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI39_1)
6043; MIPS64R5-NEXT: ld.d $w0, 0($1)
6044; MIPS64R5-NEXT: copy_s.d $6, $w0[0]
6045; MIPS64R5-NEXT: copy_s.d $7, $w0[1]
6046; MIPS64R5-NEXT: ld $25, %call16(double2_extern)($gp)
6047; MIPS64R5-NEXT: jalr $25
6048; MIPS64R5-NEXT: nop
6049; MIPS64R5-NEXT: ldi.b $w0, 0
6050; MIPS64R5-NEXT: insert.d $w0[0], $2
6051; MIPS64R5-NEXT: insert.d $w0[1], $3
6052; MIPS64R5-NEXT: ld $1, %got_disp(gv2f64)($gp)
6053; MIPS64R5-NEXT: st.d $w0, 0($1)
6054; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
6055; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
6056; MIPS64R5-NEXT: daddiu $sp, $sp, 16
6057; MIPS64R5-NEXT: jr $ra
6058; MIPS64R5-NEXT: nop
6059;
6060; MIPS32EL-LABEL: calldouble_2:
6061; MIPS32EL: # %bb.0: # %entry
6062; MIPS32EL-NEXT: addiu $sp, $sp, -80
6063; MIPS32EL-NEXT: .cfi_def_cfa_offset 80
6064; MIPS32EL-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill
6065; MIPS32EL-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill
6066; MIPS32EL-NEXT: .cfi_offset 31, -4
6067; MIPS32EL-NEXT: .cfi_offset 30, -8
6068; MIPS32EL-NEXT: move $fp, $sp
6069; MIPS32EL-NEXT: .cfi_def_cfa_register 30
6070; MIPS32EL-NEXT: addiu $1, $zero, -16
6071; MIPS32EL-NEXT: and $sp, $sp, $1
6072; MIPS32EL-NEXT: lui $1, 16424
6073; MIPS32EL-NEXT: lui $2, 16428
6074; MIPS32EL-NEXT: sw $2, 36($sp)
6075; MIPS32EL-NEXT: sw $1, 28($sp)
6076; MIPS32EL-NEXT: lui $1, 49136
6077; MIPS32EL-NEXT: sw $1, 20($sp)
6078; MIPS32EL-NEXT: sw $zero, 32($sp)
6079; MIPS32EL-NEXT: sw $zero, 24($sp)
6080; MIPS32EL-NEXT: sw $zero, 16($sp)
6081; MIPS32EL-NEXT: addiu $4, $sp, 48
6082; MIPS32EL-NEXT: addiu $6, $zero, 0
6083; MIPS32EL-NEXT: addiu $7, $zero, 0
6084; MIPS32EL-NEXT: jal double2_extern
6085; MIPS32EL-NEXT: nop
6086; MIPS32EL-NEXT: lui $1, %hi(gv2f64)
6087; MIPS32EL-NEXT: addiu $2, $1, %lo(gv2f64)
6088; MIPS32EL-NEXT: ldc1 $f0, 56($sp)
6089; MIPS32EL-NEXT: sdc1 $f0, 8($2)
6090; MIPS32EL-NEXT: ldc1 $f0, 48($sp)
6091; MIPS32EL-NEXT: sdc1 $f0, %lo(gv2f64)($1)
6092; MIPS32EL-NEXT: move $sp, $fp
6093; MIPS32EL-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload
6094; MIPS32EL-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload
6095; MIPS32EL-NEXT: addiu $sp, $sp, 80
6096; MIPS32EL-NEXT: jr $ra
6097; MIPS32EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00006098entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00006099 %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>)
6100 store <2 x double> %0, <2 x double> * @gv2f64
6101 ret void
6102}
6103
6104; The mixed tests show that due to alignment requirements, $5 is not used
6105; in argument passing.
6106
6107define float @mixed_i8(<2 x float> %a, i8 %b, <2 x float> %c) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00006108; MIPS32-LABEL: mixed_i8:
6109; MIPS32: # %bb.0: # %entry
6110; MIPS32-NEXT: mtc1 $5, $f0
6111; MIPS32-NEXT: andi $1, $6, 255
6112; MIPS32-NEXT: mtc1 $1, $f1
6113; MIPS32-NEXT: cvt.s.w $f1, $f1
6114; MIPS32-NEXT: add.s $f0, $f1, $f0
6115; MIPS32-NEXT: lwc1 $f2, 20($sp)
6116; MIPS32-NEXT: add.s $f0, $f0, $f2
6117; MIPS32-NEXT: mtc1 $4, $f2
6118; MIPS32-NEXT: add.s $f1, $f1, $f2
6119; MIPS32-NEXT: lwc1 $f2, 16($sp)
6120; MIPS32-NEXT: add.s $f1, $f1, $f2
6121; MIPS32-NEXT: add.s $f0, $f1, $f0
6122; MIPS32-NEXT: jr $ra
6123; MIPS32-NEXT: nop
6124;
6125; MIPS64EB-LABEL: mixed_i8:
6126; MIPS64EB: # %bb.0: # %entry
6127; MIPS64EB-NEXT: sll $1, $4, 0
6128; MIPS64EB-NEXT: mtc1 $1, $f0
6129; MIPS64EB-NEXT: sll $1, $5, 0
6130; MIPS64EB-NEXT: andi $1, $1, 255
6131; MIPS64EB-NEXT: mtc1 $1, $f1
6132; MIPS64EB-NEXT: cvt.s.w $f1, $f1
6133; MIPS64EB-NEXT: add.s $f0, $f1, $f0
6134; MIPS64EB-NEXT: dsrl $1, $4, 32
6135; MIPS64EB-NEXT: sll $1, $1, 0
6136; MIPS64EB-NEXT: sll $2, $6, 0
6137; MIPS64EB-NEXT: mtc1 $2, $f2
6138; MIPS64EB-NEXT: add.s $f0, $f0, $f2
6139; MIPS64EB-NEXT: mtc1 $1, $f2
6140; MIPS64EB-NEXT: add.s $f1, $f1, $f2
6141; MIPS64EB-NEXT: dsrl $1, $6, 32
6142; MIPS64EB-NEXT: sll $1, $1, 0
6143; MIPS64EB-NEXT: mtc1 $1, $f2
6144; MIPS64EB-NEXT: add.s $f1, $f1, $f2
6145; MIPS64EB-NEXT: add.s $f0, $f1, $f0
6146; MIPS64EB-NEXT: jr $ra
6147; MIPS64EB-NEXT: nop
6148;
6149; MIPS32R5-LABEL: mixed_i8:
6150; MIPS32R5: # %bb.0: # %entry
6151; MIPS32R5-NEXT: addiu $sp, $sp, -64
6152; MIPS32R5-NEXT: .cfi_def_cfa_offset 64
6153; MIPS32R5-NEXT: sw $fp, 60($sp) # 4-byte Folded Spill
6154; MIPS32R5-NEXT: .cfi_offset 30, -4
6155; MIPS32R5-NEXT: move $fp, $sp
6156; MIPS32R5-NEXT: .cfi_def_cfa_register 30
6157; MIPS32R5-NEXT: addiu $1, $zero, -16
6158; MIPS32R5-NEXT: and $sp, $sp, $1
6159; MIPS32R5-NEXT: andi $1, $6, 255
6160; MIPS32R5-NEXT: sw $1, 36($sp)
6161; MIPS32R5-NEXT: sw $1, 32($sp)
6162; MIPS32R5-NEXT: sw $5, 4($sp)
6163; MIPS32R5-NEXT: sw $4, 0($sp)
6164; MIPS32R5-NEXT: ld.w $w0, 32($sp)
6165; MIPS32R5-NEXT: ffint_s.w $w0, $w0
6166; MIPS32R5-NEXT: ld.w $w1, 0($sp)
6167; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1
6168; MIPS32R5-NEXT: lw $1, 84($fp)
6169; MIPS32R5-NEXT: sw $1, 20($sp)
6170; MIPS32R5-NEXT: lw $1, 80($fp)
6171; MIPS32R5-NEXT: sw $1, 16($sp)
6172; MIPS32R5-NEXT: ld.w $w1, 16($sp)
6173; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1
6174; MIPS32R5-NEXT: splati.w $w1, $w0[1]
6175; MIPS32R5-NEXT: add.s $f0, $f0, $f1
6176; MIPS32R5-NEXT: move $sp, $fp
6177; MIPS32R5-NEXT: lw $fp, 60($sp) # 4-byte Folded Reload
6178; MIPS32R5-NEXT: addiu $sp, $sp, 64
6179; MIPS32R5-NEXT: jr $ra
6180; MIPS32R5-NEXT: nop
6181;
6182; MIPS64R5-LABEL: mixed_i8:
6183; MIPS64R5: # %bb.0: # %entry
6184; MIPS64R5-NEXT: daddiu $sp, $sp, -48
6185; MIPS64R5-NEXT: .cfi_def_cfa_offset 48
6186; MIPS64R5-NEXT: sll $1, $5, 0
6187; MIPS64R5-NEXT: andi $1, $1, 255
6188; MIPS64R5-NEXT: sw $1, 36($sp)
6189; MIPS64R5-NEXT: sw $1, 32($sp)
6190; MIPS64R5-NEXT: sd $4, 16($sp)
6191; MIPS64R5-NEXT: ld.w $w0, 32($sp)
6192; MIPS64R5-NEXT: ffint_s.w $w0, $w0
6193; MIPS64R5-NEXT: ld.w $w1, 16($sp)
6194; MIPS64R5-NEXT: fadd.w $w0, $w0, $w1
6195; MIPS64R5-NEXT: sd $6, 0($sp)
6196; MIPS64R5-NEXT: ld.w $w1, 0($sp)
6197; MIPS64R5-NEXT: fadd.w $w0, $w0, $w1
6198; MIPS64R5-NEXT: splati.w $w1, $w0[1]
6199; MIPS64R5-NEXT: add.s $f0, $f0, $f1
6200; MIPS64R5-NEXT: daddiu $sp, $sp, 48
6201; MIPS64R5-NEXT: jr $ra
6202; MIPS64R5-NEXT: nop
6203;
6204; MIPS64EL-LABEL: mixed_i8:
6205; MIPS64EL: # %bb.0: # %entry
6206; MIPS64EL-NEXT: dsrl $1, $4, 32
6207; MIPS64EL-NEXT: sll $1, $1, 0
6208; MIPS64EL-NEXT: mtc1 $1, $f0
6209; MIPS64EL-NEXT: sll $1, $5, 0
6210; MIPS64EL-NEXT: andi $1, $1, 255
6211; MIPS64EL-NEXT: mtc1 $1, $f1
6212; MIPS64EL-NEXT: cvt.s.w $f1, $f1
6213; MIPS64EL-NEXT: add.s $f0, $f1, $f0
6214; MIPS64EL-NEXT: dsrl $1, $6, 32
6215; MIPS64EL-NEXT: sll $1, $1, 0
6216; MIPS64EL-NEXT: mtc1 $1, $f2
6217; MIPS64EL-NEXT: add.s $f0, $f0, $f2
6218; MIPS64EL-NEXT: sll $1, $4, 0
6219; MIPS64EL-NEXT: mtc1 $1, $f2
6220; MIPS64EL-NEXT: add.s $f1, $f1, $f2
6221; MIPS64EL-NEXT: sll $1, $6, 0
6222; MIPS64EL-NEXT: mtc1 $1, $f2
6223; MIPS64EL-NEXT: add.s $f1, $f1, $f2
6224; MIPS64EL-NEXT: add.s $f0, $f1, $f0
6225; MIPS64EL-NEXT: jr $ra
6226; MIPS64EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00006227entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00006228 %0 = zext i8 %b to i32
6229 %1 = uitofp i32 %0 to float
6230 %2 = insertelement <2 x float> undef, float %1, i32 0
6231 %3 = insertelement <2 x float> %2, float %1, i32 1
6232 %4 = fadd <2 x float> %3, %a
6233 %5 = fadd <2 x float> %4, %c
6234 %6 = extractelement <2 x float> %5, i32 0
6235 %7 = extractelement <2 x float> %5, i32 1
6236 %8 = fadd float %6, %7
6237 ret float %8
6238}
6239
6240define <4 x float> @mixed_32(<4 x float> %a, i32 %b) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00006241; MIPS32EB-LABEL: mixed_32:
6242; MIPS32EB: # %bb.0: # %entry
6243; MIPS32EB-NEXT: addiu $sp, $sp, -8
6244; MIPS32EB-NEXT: .cfi_def_cfa_offset 8
6245; MIPS32EB-NEXT: lui $1, 17200
6246; MIPS32EB-NEXT: sw $1, 0($sp)
6247; MIPS32EB-NEXT: lw $1, 32($sp)
6248; MIPS32EB-NEXT: sw $1, 4($sp)
6249; MIPS32EB-NEXT: lui $1, %hi($CPI41_0)
6250; MIPS32EB-NEXT: ldc1 $f0, %lo($CPI41_0)($1)
6251; MIPS32EB-NEXT: ldc1 $f2, 0($sp)
6252; MIPS32EB-NEXT: sub.d $f0, $f2, $f0
6253; MIPS32EB-NEXT: cvt.s.d $f0, $f0
6254; MIPS32EB-NEXT: lwc1 $f1, 28($sp)
6255; MIPS32EB-NEXT: lwc1 $f2, 24($sp)
6256; MIPS32EB-NEXT: add.s $f2, $f0, $f2
6257; MIPS32EB-NEXT: add.s $f1, $f0, $f1
6258; MIPS32EB-NEXT: swc1 $f1, 12($4)
6259; MIPS32EB-NEXT: swc1 $f2, 8($4)
6260; MIPS32EB-NEXT: mtc1 $7, $f1
6261; MIPS32EB-NEXT: add.s $f1, $f0, $f1
6262; MIPS32EB-NEXT: swc1 $f1, 4($4)
6263; MIPS32EB-NEXT: mtc1 $6, $f1
6264; MIPS32EB-NEXT: add.s $f0, $f0, $f1
6265; MIPS32EB-NEXT: swc1 $f0, 0($4)
6266; MIPS32EB-NEXT: addiu $sp, $sp, 8
6267; MIPS32EB-NEXT: jr $ra
6268; MIPS32EB-NEXT: nop
6269;
6270; MIPS64EB-LABEL: mixed_32:
6271; MIPS64EB: # %bb.0: # %entry
6272; MIPS64EB-NEXT: daddiu $sp, $sp, -16
6273; MIPS64EB-NEXT: .cfi_def_cfa_offset 16
6274; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(mixed_32)))
6275; MIPS64EB-NEXT: daddu $1, $1, $25
6276; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6277; MIPS64EB-NEXT: lui $2, 17200
6278; MIPS64EB-NEXT: sw $2, 8($sp)
6279; MIPS64EB-NEXT: sll $2, $6, 0
6280; MIPS64EB-NEXT: sw $2, 12($sp)
6281; MIPS64EB-NEXT: ld $1, %got_page(.LCPI41_0)($1)
6282; MIPS64EB-NEXT: ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6283; MIPS64EB-NEXT: ldc1 $f1, 8($sp)
6284; MIPS64EB-NEXT: sub.d $f0, $f1, $f0
6285; MIPS64EB-NEXT: cvt.s.d $f0, $f0
6286; MIPS64EB-NEXT: dsrl $1, $4, 32
6287; MIPS64EB-NEXT: sll $1, $1, 0
6288; MIPS64EB-NEXT: mtc1 $1, $f1
6289; MIPS64EB-NEXT: add.s $f1, $f0, $f1
6290; MIPS64EB-NEXT: dsrl $1, $5, 32
6291; MIPS64EB-NEXT: mfc1 $2, $f1
6292; MIPS64EB-NEXT: sll $3, $4, 0
6293; MIPS64EB-NEXT: sll $1, $1, 0
6294; MIPS64EB-NEXT: mtc1 $1, $f1
6295; MIPS64EB-NEXT: add.s $f1, $f0, $f1
6296; MIPS64EB-NEXT: mfc1 $1, $f1
6297; MIPS64EB-NEXT: mtc1 $3, $f1
6298; MIPS64EB-NEXT: sll $3, $5, 0
6299; MIPS64EB-NEXT: mtc1 $3, $f2
6300; MIPS64EB-NEXT: dsll $2, $2, 32
6301; MIPS64EB-NEXT: add.s $f1, $f0, $f1
6302; MIPS64EB-NEXT: mfc1 $3, $f1
6303; MIPS64EB-NEXT: dsll $3, $3, 32
6304; MIPS64EB-NEXT: dsrl $3, $3, 32
6305; MIPS64EB-NEXT: or $2, $3, $2
6306; MIPS64EB-NEXT: dsll $1, $1, 32
6307; MIPS64EB-NEXT: add.s $f0, $f0, $f2
6308; MIPS64EB-NEXT: mfc1 $3, $f0
6309; MIPS64EB-NEXT: dsll $3, $3, 32
6310; MIPS64EB-NEXT: dsrl $3, $3, 32
6311; MIPS64EB-NEXT: or $3, $3, $1
6312; MIPS64EB-NEXT: daddiu $sp, $sp, 16
6313; MIPS64EB-NEXT: jr $ra
6314; MIPS64EB-NEXT: nop
6315;
6316; MIPS32R5-LABEL: mixed_32:
6317; MIPS32R5: # %bb.0: # %entry
6318; MIPS32R5-NEXT: ldi.b $w0, 0
6319; MIPS32R5-NEXT: insert.w $w0[0], $6
6320; MIPS32R5-NEXT: insert.w $w0[1], $7
6321; MIPS32R5-NEXT: lw $1, 16($sp)
6322; MIPS32R5-NEXT: insert.w $w0[2], $1
6323; MIPS32R5-NEXT: lw $1, 20($sp)
6324; MIPS32R5-NEXT: insert.w $w0[3], $1
6325; MIPS32R5-NEXT: lw $1, 24($sp)
6326; MIPS32R5-NEXT: fill.w $w1, $1
6327; MIPS32R5-NEXT: ffint_u.w $w1, $w1
6328; MIPS32R5-NEXT: fadd.w $w0, $w1, $w0
6329; MIPS32R5-NEXT: st.w $w0, 0($4)
6330; MIPS32R5-NEXT: jr $ra
6331; MIPS32R5-NEXT: nop
6332;
6333; MIPS64R5EB-LABEL: mixed_32:
6334; MIPS64R5EB: # %bb.0: # %entry
6335; MIPS64R5EB-NEXT: ldi.b $w0, 0
6336; MIPS64R5EB-NEXT: insert.d $w0[0], $4
6337; MIPS64R5EB-NEXT: insert.d $w0[1], $5
6338; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6339; MIPS64R5EB-NEXT: sll $1, $6, 0
6340; MIPS64R5EB-NEXT: fill.w $w1, $1
6341; MIPS64R5EB-NEXT: ffint_u.w $w1, $w1
6342; MIPS64R5EB-NEXT: fadd.w $w0, $w1, $w0
6343; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6344; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0]
6345; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1]
6346; MIPS64R5EB-NEXT: jr $ra
6347; MIPS64R5EB-NEXT: nop
6348;
6349; MIPS32EL-LABEL: mixed_32:
6350; MIPS32EL: # %bb.0: # %entry
6351; MIPS32EL-NEXT: addiu $sp, $sp, -8
6352; MIPS32EL-NEXT: .cfi_def_cfa_offset 8
6353; MIPS32EL-NEXT: lui $1, 17200
6354; MIPS32EL-NEXT: sw $1, 4($sp)
6355; MIPS32EL-NEXT: lw $1, 32($sp)
6356; MIPS32EL-NEXT: sw $1, 0($sp)
6357; MIPS32EL-NEXT: lui $1, %hi($CPI41_0)
6358; MIPS32EL-NEXT: ldc1 $f0, %lo($CPI41_0)($1)
6359; MIPS32EL-NEXT: ldc1 $f2, 0($sp)
6360; MIPS32EL-NEXT: sub.d $f0, $f2, $f0
6361; MIPS32EL-NEXT: cvt.s.d $f0, $f0
6362; MIPS32EL-NEXT: lwc1 $f1, 28($sp)
6363; MIPS32EL-NEXT: lwc1 $f2, 24($sp)
6364; MIPS32EL-NEXT: add.s $f2, $f0, $f2
6365; MIPS32EL-NEXT: add.s $f1, $f0, $f1
6366; MIPS32EL-NEXT: swc1 $f1, 12($4)
6367; MIPS32EL-NEXT: swc1 $f2, 8($4)
6368; MIPS32EL-NEXT: mtc1 $7, $f1
6369; MIPS32EL-NEXT: add.s $f1, $f0, $f1
6370; MIPS32EL-NEXT: swc1 $f1, 4($4)
6371; MIPS32EL-NEXT: mtc1 $6, $f1
6372; MIPS32EL-NEXT: add.s $f0, $f0, $f1
6373; MIPS32EL-NEXT: swc1 $f0, 0($4)
6374; MIPS32EL-NEXT: addiu $sp, $sp, 8
6375; MIPS32EL-NEXT: jr $ra
6376; MIPS32EL-NEXT: nop
6377;
6378; MIPS64EL-LABEL: mixed_32:
6379; MIPS64EL: # %bb.0: # %entry
6380; MIPS64EL-NEXT: daddiu $sp, $sp, -16
6381; MIPS64EL-NEXT: .cfi_def_cfa_offset 16
6382; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(mixed_32)))
6383; MIPS64EL-NEXT: daddu $1, $1, $25
6384; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32)))
6385; MIPS64EL-NEXT: lui $2, 17200
6386; MIPS64EL-NEXT: sw $2, 12($sp)
6387; MIPS64EL-NEXT: sll $2, $6, 0
6388; MIPS64EL-NEXT: sw $2, 8($sp)
6389; MIPS64EL-NEXT: ld $1, %got_page(.LCPI41_0)($1)
6390; MIPS64EL-NEXT: ldc1 $f0, %got_ofst(.LCPI41_0)($1)
6391; MIPS64EL-NEXT: ldc1 $f1, 8($sp)
6392; MIPS64EL-NEXT: sub.d $f0, $f1, $f0
6393; MIPS64EL-NEXT: cvt.s.d $f0, $f0
6394; MIPS64EL-NEXT: dsrl $1, $4, 32
6395; MIPS64EL-NEXT: sll $1, $1, 0
6396; MIPS64EL-NEXT: mtc1 $1, $f1
6397; MIPS64EL-NEXT: add.s $f1, $f0, $f1
6398; MIPS64EL-NEXT: dsrl $1, $5, 32
6399; MIPS64EL-NEXT: mfc1 $2, $f1
6400; MIPS64EL-NEXT: sll $3, $4, 0
6401; MIPS64EL-NEXT: sll $1, $1, 0
6402; MIPS64EL-NEXT: mtc1 $1, $f1
6403; MIPS64EL-NEXT: add.s $f1, $f0, $f1
6404; MIPS64EL-NEXT: mfc1 $1, $f1
6405; MIPS64EL-NEXT: mtc1 $3, $f1
6406; MIPS64EL-NEXT: sll $3, $5, 0
6407; MIPS64EL-NEXT: mtc1 $3, $f2
6408; MIPS64EL-NEXT: dsll $2, $2, 32
6409; MIPS64EL-NEXT: add.s $f1, $f0, $f1
6410; MIPS64EL-NEXT: mfc1 $3, $f1
6411; MIPS64EL-NEXT: dsll $3, $3, 32
6412; MIPS64EL-NEXT: dsrl $3, $3, 32
6413; MIPS64EL-NEXT: or $2, $3, $2
6414; MIPS64EL-NEXT: dsll $1, $1, 32
6415; MIPS64EL-NEXT: add.s $f0, $f0, $f2
6416; MIPS64EL-NEXT: mfc1 $3, $f0
6417; MIPS64EL-NEXT: dsll $3, $3, 32
6418; MIPS64EL-NEXT: dsrl $3, $3, 32
6419; MIPS64EL-NEXT: or $3, $3, $1
6420; MIPS64EL-NEXT: daddiu $sp, $sp, 16
6421; MIPS64EL-NEXT: jr $ra
6422; MIPS64EL-NEXT: nop
6423;
6424; MIPS64R5EL-LABEL: mixed_32:
6425; MIPS64R5EL: # %bb.0: # %entry
6426; MIPS64R5EL-NEXT: ldi.b $w0, 0
6427; MIPS64R5EL-NEXT: insert.d $w0[0], $4
6428; MIPS64R5EL-NEXT: insert.d $w0[1], $5
6429; MIPS64R5EL-NEXT: sll $1, $6, 0
6430; MIPS64R5EL-NEXT: fill.w $w1, $1
6431; MIPS64R5EL-NEXT: ffint_u.w $w1, $w1
6432; MIPS64R5EL-NEXT: fadd.w $w0, $w1, $w0
6433; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0]
6434; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1]
6435; MIPS64R5EL-NEXT: jr $ra
6436; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00006437entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00006438 %0 = uitofp i32 %b to float
6439 %1 = insertelement <4 x float> undef, float %0, i32 0
6440 %2 = insertelement <4 x float> %1, float %0, i32 1
6441 %3 = insertelement <4 x float> %2, float %0, i32 2
6442 %4 = insertelement <4 x float> %3, float %0, i32 3
6443 %5 = fadd <4 x float> %4, %a
6444 ret <4 x float> %5
6445}
6446
6447
6448; This test is slightly more fragile than I'd like as the offset into the
6449; outgoing arguments area is dependant on the size of the stack frame for
6450; this function.
6451
6452define <4 x float> @cast(<4 x i32> %a) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00006453; MIPS32EB-LABEL: cast:
6454; MIPS32EB: # %bb.0: # %entry
6455; MIPS32EB-NEXT: addiu $sp, $sp, -32
6456; MIPS32EB-NEXT: .cfi_def_cfa_offset 32
6457; MIPS32EB-NEXT: lw $1, 52($sp)
6458; MIPS32EB-NEXT: lui $2, 17200
6459; MIPS32EB-NEXT: sw $2, 24($sp)
6460; MIPS32EB-NEXT: sw $1, 28($sp)
6461; MIPS32EB-NEXT: lw $1, 48($sp)
6462; MIPS32EB-NEXT: sw $2, 16($sp)
6463; MIPS32EB-NEXT: sw $1, 20($sp)
6464; MIPS32EB-NEXT: lui $1, %hi($CPI42_0)
6465; MIPS32EB-NEXT: sw $2, 8($sp)
6466; MIPS32EB-NEXT: sw $7, 12($sp)
6467; MIPS32EB-NEXT: ldc1 $f0, %lo($CPI42_0)($1)
6468; MIPS32EB-NEXT: ldc1 $f2, 24($sp)
6469; MIPS32EB-NEXT: sub.d $f2, $f2, $f0
6470; MIPS32EB-NEXT: ldc1 $f4, 16($sp)
6471; MIPS32EB-NEXT: sub.d $f4, $f4, $f0
6472; MIPS32EB-NEXT: ldc1 $f6, 8($sp)
6473; MIPS32EB-NEXT: sub.d $f6, $f6, $f0
6474; MIPS32EB-NEXT: cvt.s.d $f6, $f6
6475; MIPS32EB-NEXT: cvt.s.d $f4, $f4
6476; MIPS32EB-NEXT: cvt.s.d $f2, $f2
6477; MIPS32EB-NEXT: swc1 $f2, 12($4)
6478; MIPS32EB-NEXT: swc1 $f4, 8($4)
6479; MIPS32EB-NEXT: swc1 $f6, 4($4)
6480; MIPS32EB-NEXT: sw $2, 0($sp)
6481; MIPS32EB-NEXT: sw $6, 4($sp)
6482; MIPS32EB-NEXT: ldc1 $f2, 0($sp)
6483; MIPS32EB-NEXT: sub.d $f0, $f2, $f0
6484; MIPS32EB-NEXT: cvt.s.d $f0, $f0
6485; MIPS32EB-NEXT: swc1 $f0, 0($4)
6486; MIPS32EB-NEXT: addiu $sp, $sp, 32
6487; MIPS32EB-NEXT: jr $ra
6488; MIPS32EB-NEXT: nop
6489;
6490; MIPS64EB-LABEL: cast:
6491; MIPS64EB: # %bb.0: # %entry
6492; MIPS64EB-NEXT: daddiu $sp, $sp, -32
6493; MIPS64EB-NEXT: .cfi_def_cfa_offset 32
6494; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(cast)))
6495; MIPS64EB-NEXT: daddu $1, $1, $25
6496; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(cast)))
6497; MIPS64EB-NEXT: sll $2, $4, 0
6498; MIPS64EB-NEXT: lui $3, 17200
6499; MIPS64EB-NEXT: sw $3, 0($sp)
6500; MIPS64EB-NEXT: sw $2, 4($sp)
6501; MIPS64EB-NEXT: sll $2, $5, 0
6502; MIPS64EB-NEXT: sw $3, 8($sp)
6503; MIPS64EB-NEXT: sw $2, 12($sp)
6504; MIPS64EB-NEXT: ld $1, %got_page(.LCPI42_0)($1)
6505; MIPS64EB-NEXT: ldc1 $f0, %got_ofst(.LCPI42_0)($1)
6506; MIPS64EB-NEXT: ldc1 $f1, 0($sp)
6507; MIPS64EB-NEXT: sub.d $f1, $f1, $f0
6508; MIPS64EB-NEXT: cvt.s.d $f1, $f1
6509; MIPS64EB-NEXT: ldc1 $f2, 8($sp)
6510; MIPS64EB-NEXT: sub.d $f2, $f2, $f0
6511; MIPS64EB-NEXT: mfc1 $1, $f1
6512; MIPS64EB-NEXT: dsrl $2, $4, 32
6513; MIPS64EB-NEXT: sll $2, $2, 0
6514; MIPS64EB-NEXT: sw $3, 16($sp)
6515; MIPS64EB-NEXT: sw $2, 20($sp)
6516; MIPS64EB-NEXT: sw $3, 24($sp)
6517; MIPS64EB-NEXT: dsll $1, $1, 32
6518; MIPS64EB-NEXT: cvt.s.d $f1, $f2
6519; MIPS64EB-NEXT: dsrl $2, $5, 32
6520; MIPS64EB-NEXT: sll $2, $2, 0
6521; MIPS64EB-NEXT: sw $2, 28($sp)
6522; MIPS64EB-NEXT: mfc1 $2, $f1
6523; MIPS64EB-NEXT: dsll $3, $2, 32
6524; MIPS64EB-NEXT: dsrl $1, $1, 32
6525; MIPS64EB-NEXT: ldc1 $f1, 16($sp)
6526; MIPS64EB-NEXT: sub.d $f1, $f1, $f0
6527; MIPS64EB-NEXT: cvt.s.d $f1, $f1
6528; MIPS64EB-NEXT: mfc1 $2, $f1
6529; MIPS64EB-NEXT: dsll $2, $2, 32
6530; MIPS64EB-NEXT: or $2, $1, $2
6531; MIPS64EB-NEXT: dsrl $1, $3, 32
6532; MIPS64EB-NEXT: ldc1 $f1, 24($sp)
6533; MIPS64EB-NEXT: sub.d $f0, $f1, $f0
6534; MIPS64EB-NEXT: cvt.s.d $f0, $f0
6535; MIPS64EB-NEXT: mfc1 $3, $f0
6536; MIPS64EB-NEXT: dsll $3, $3, 32
6537; MIPS64EB-NEXT: or $3, $1, $3
6538; MIPS64EB-NEXT: daddiu $sp, $sp, 32
6539; MIPS64EB-NEXT: jr $ra
6540; MIPS64EB-NEXT: nop
6541;
6542; MIPS32R5-LABEL: cast:
6543; MIPS32R5: # %bb.0: # %entry
6544; MIPS32R5-NEXT: ldi.b $w0, 0
6545; MIPS32R5-NEXT: insert.w $w0[0], $6
6546; MIPS32R5-NEXT: insert.w $w0[1], $7
6547; MIPS32R5-NEXT: lw $1, 16($sp)
6548; MIPS32R5-NEXT: insert.w $w0[2], $1
6549; MIPS32R5-NEXT: lw $1, 20($sp)
6550; MIPS32R5-NEXT: insert.w $w0[3], $1
6551; MIPS32R5-NEXT: ffint_u.w $w0, $w0
6552; MIPS32R5-NEXT: st.w $w0, 0($4)
6553; MIPS32R5-NEXT: jr $ra
6554; MIPS32R5-NEXT: nop
6555;
6556; MIPS64R5EB-LABEL: cast:
6557; MIPS64R5EB: # %bb.0: # %entry
6558; MIPS64R5EB-NEXT: ldi.b $w0, 0
6559; MIPS64R5EB-NEXT: insert.d $w0[0], $4
6560; MIPS64R5EB-NEXT: insert.d $w0[1], $5
6561; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6562; MIPS64R5EB-NEXT: ffint_u.w $w0, $w0
6563; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6564; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0]
6565; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1]
6566; MIPS64R5EB-NEXT: jr $ra
6567; MIPS64R5EB-NEXT: nop
6568;
6569; MIPS32EL-LABEL: cast:
6570; MIPS32EL: # %bb.0: # %entry
6571; MIPS32EL-NEXT: addiu $sp, $sp, -32
6572; MIPS32EL-NEXT: .cfi_def_cfa_offset 32
6573; MIPS32EL-NEXT: lw $1, 52($sp)
6574; MIPS32EL-NEXT: lui $2, 17200
6575; MIPS32EL-NEXT: sw $2, 28($sp)
6576; MIPS32EL-NEXT: sw $1, 24($sp)
6577; MIPS32EL-NEXT: lw $1, 48($sp)
6578; MIPS32EL-NEXT: sw $2, 20($sp)
6579; MIPS32EL-NEXT: sw $1, 16($sp)
6580; MIPS32EL-NEXT: lui $1, %hi($CPI42_0)
6581; MIPS32EL-NEXT: sw $2, 12($sp)
6582; MIPS32EL-NEXT: sw $7, 8($sp)
6583; MIPS32EL-NEXT: ldc1 $f0, %lo($CPI42_0)($1)
6584; MIPS32EL-NEXT: ldc1 $f2, 24($sp)
6585; MIPS32EL-NEXT: sub.d $f2, $f2, $f0
6586; MIPS32EL-NEXT: ldc1 $f4, 16($sp)
6587; MIPS32EL-NEXT: sub.d $f4, $f4, $f0
6588; MIPS32EL-NEXT: ldc1 $f6, 8($sp)
6589; MIPS32EL-NEXT: sub.d $f6, $f6, $f0
6590; MIPS32EL-NEXT: cvt.s.d $f6, $f6
6591; MIPS32EL-NEXT: cvt.s.d $f4, $f4
6592; MIPS32EL-NEXT: cvt.s.d $f2, $f2
6593; MIPS32EL-NEXT: swc1 $f2, 12($4)
6594; MIPS32EL-NEXT: swc1 $f4, 8($4)
6595; MIPS32EL-NEXT: swc1 $f6, 4($4)
6596; MIPS32EL-NEXT: sw $2, 4($sp)
6597; MIPS32EL-NEXT: sw $6, 0($sp)
6598; MIPS32EL-NEXT: ldc1 $f2, 0($sp)
6599; MIPS32EL-NEXT: sub.d $f0, $f2, $f0
6600; MIPS32EL-NEXT: cvt.s.d $f0, $f0
6601; MIPS32EL-NEXT: swc1 $f0, 0($4)
6602; MIPS32EL-NEXT: addiu $sp, $sp, 32
6603; MIPS32EL-NEXT: jr $ra
6604; MIPS32EL-NEXT: nop
6605;
6606; MIPS64EL-LABEL: cast:
6607; MIPS64EL: # %bb.0: # %entry
6608; MIPS64EL-NEXT: daddiu $sp, $sp, -32
6609; MIPS64EL-NEXT: .cfi_def_cfa_offset 32
6610; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(cast)))
6611; MIPS64EL-NEXT: daddu $1, $1, $25
6612; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(cast)))
6613; MIPS64EL-NEXT: sll $2, $4, 0
6614; MIPS64EL-NEXT: lui $3, 17200
6615; MIPS64EL-NEXT: sw $3, 4($sp)
6616; MIPS64EL-NEXT: sw $2, 0($sp)
6617; MIPS64EL-NEXT: sll $2, $5, 0
6618; MIPS64EL-NEXT: sw $3, 12($sp)
6619; MIPS64EL-NEXT: sw $2, 8($sp)
6620; MIPS64EL-NEXT: ld $1, %got_page(.LCPI42_0)($1)
6621; MIPS64EL-NEXT: ldc1 $f0, %got_ofst(.LCPI42_0)($1)
6622; MIPS64EL-NEXT: ldc1 $f1, 0($sp)
6623; MIPS64EL-NEXT: sub.d $f1, $f1, $f0
6624; MIPS64EL-NEXT: cvt.s.d $f1, $f1
6625; MIPS64EL-NEXT: ldc1 $f2, 8($sp)
6626; MIPS64EL-NEXT: sub.d $f2, $f2, $f0
6627; MIPS64EL-NEXT: mfc1 $1, $f1
6628; MIPS64EL-NEXT: dsrl $2, $4, 32
6629; MIPS64EL-NEXT: sll $2, $2, 0
6630; MIPS64EL-NEXT: sw $3, 20($sp)
6631; MIPS64EL-NEXT: sw $2, 16($sp)
6632; MIPS64EL-NEXT: sw $3, 28($sp)
6633; MIPS64EL-NEXT: dsll $1, $1, 32
6634; MIPS64EL-NEXT: cvt.s.d $f1, $f2
6635; MIPS64EL-NEXT: dsrl $2, $5, 32
6636; MIPS64EL-NEXT: sll $2, $2, 0
6637; MIPS64EL-NEXT: sw $2, 24($sp)
6638; MIPS64EL-NEXT: mfc1 $2, $f1
6639; MIPS64EL-NEXT: dsll $3, $2, 32
6640; MIPS64EL-NEXT: dsrl $1, $1, 32
6641; MIPS64EL-NEXT: ldc1 $f1, 16($sp)
6642; MIPS64EL-NEXT: sub.d $f1, $f1, $f0
6643; MIPS64EL-NEXT: cvt.s.d $f1, $f1
6644; MIPS64EL-NEXT: mfc1 $2, $f1
6645; MIPS64EL-NEXT: dsll $2, $2, 32
6646; MIPS64EL-NEXT: or $2, $1, $2
6647; MIPS64EL-NEXT: dsrl $1, $3, 32
6648; MIPS64EL-NEXT: ldc1 $f1, 24($sp)
6649; MIPS64EL-NEXT: sub.d $f0, $f1, $f0
6650; MIPS64EL-NEXT: cvt.s.d $f0, $f0
6651; MIPS64EL-NEXT: mfc1 $3, $f0
6652; MIPS64EL-NEXT: dsll $3, $3, 32
6653; MIPS64EL-NEXT: or $3, $1, $3
6654; MIPS64EL-NEXT: daddiu $sp, $sp, 32
6655; MIPS64EL-NEXT: jr $ra
6656; MIPS64EL-NEXT: nop
6657;
6658; MIPS64R5EL-LABEL: cast:
6659; MIPS64R5EL: # %bb.0: # %entry
6660; MIPS64R5EL-NEXT: ldi.b $w0, 0
6661; MIPS64R5EL-NEXT: insert.d $w0[0], $4
6662; MIPS64R5EL-NEXT: insert.d $w0[1], $5
6663; MIPS64R5EL-NEXT: ffint_u.w $w0, $w0
6664; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0]
6665; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1]
6666; MIPS64R5EL-NEXT: jr $ra
6667; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00006668entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00006669 %0 = uitofp <4 x i32> %a to <4 x float>
6670 ret <4 x float> %0
6671}
6672
6673define <4 x float> @select(<4 x i32> %cond, <4 x float> %arg1, <4 x float> %arg2) {
Simon Pilgrim7aec5062018-02-03 22:11:22 +00006674; MIPS32-LABEL: select:
6675; MIPS32: # %bb.0: # %entry
6676; MIPS32-NEXT: andi $1, $7, 1
6677; MIPS32-NEXT: lw $2, 16($sp)
6678; MIPS32-NEXT: andi $2, $2, 1
6679; MIPS32-NEXT: addiu $3, $sp, 44
6680; MIPS32-NEXT: addiu $5, $sp, 28
6681; MIPS32-NEXT: addiu $7, $sp, 48
6682; MIPS32-NEXT: addiu $8, $sp, 32
6683; MIPS32-NEXT: movn $7, $8, $2
6684; MIPS32-NEXT: movn $3, $5, $1
6685; MIPS32-NEXT: andi $1, $6, 1
6686; MIPS32-NEXT: addiu $2, $sp, 40
6687; MIPS32-NEXT: addiu $5, $sp, 24
6688; MIPS32-NEXT: movn $2, $5, $1
6689; MIPS32-NEXT: lw $1, 20($sp)
6690; MIPS32-NEXT: lwc1 $f0, 0($2)
6691; MIPS32-NEXT: lwc1 $f1, 0($3)
6692; MIPS32-NEXT: lwc1 $f2, 0($7)
6693; MIPS32-NEXT: andi $1, $1, 1
6694; MIPS32-NEXT: addiu $2, $sp, 52
6695; MIPS32-NEXT: addiu $3, $sp, 36
6696; MIPS32-NEXT: movn $2, $3, $1
6697; MIPS32-NEXT: lwc1 $f3, 0($2)
6698; MIPS32-NEXT: swc1 $f3, 12($4)
6699; MIPS32-NEXT: swc1 $f2, 8($4)
6700; MIPS32-NEXT: swc1 $f1, 4($4)
6701; MIPS32-NEXT: swc1 $f0, 0($4)
6702; MIPS32-NEXT: jr $ra
6703; MIPS32-NEXT: nop
6704;
6705; MIPS64-LABEL: select:
6706; MIPS64: # %bb.0: # %entry
6707; MIPS64-NEXT: sll $1, $8, 0
6708; MIPS64-NEXT: mtc1 $1, $f0
6709; MIPS64-NEXT: sll $1, $4, 0
6710; MIPS64-NEXT: andi $1, $1, 1
6711; MIPS64-NEXT: sll $2, $6, 0
6712; MIPS64-NEXT: mtc1 $2, $f1
6713; MIPS64-NEXT: movn.s $f0, $f1, $1
6714; MIPS64-NEXT: dsrl $1, $8, 32
6715; MIPS64-NEXT: dsrl $2, $4, 32
6716; MIPS64-NEXT: sll $1, $1, 0
6717; MIPS64-NEXT: mfc1 $3, $f0
6718; MIPS64-NEXT: sll $4, $9, 0
6719; MIPS64-NEXT: mtc1 $1, $f0
6720; MIPS64-NEXT: sll $1, $2, 0
6721; MIPS64-NEXT: andi $1, $1, 1
6722; MIPS64-NEXT: dsrl $2, $6, 32
6723; MIPS64-NEXT: sll $2, $2, 0
6724; MIPS64-NEXT: mtc1 $2, $f1
6725; MIPS64-NEXT: movn.s $f0, $f1, $1
6726; MIPS64-NEXT: dsll $1, $3, 32
6727; MIPS64-NEXT: mtc1 $4, $f1
6728; MIPS64-NEXT: sll $2, $5, 0
6729; MIPS64-NEXT: andi $2, $2, 1
6730; MIPS64-NEXT: sll $3, $7, 0
6731; MIPS64-NEXT: mtc1 $3, $f2
6732; MIPS64-NEXT: movn.s $f1, $f2, $2
6733; MIPS64-NEXT: mfc1 $2, $f1
6734; MIPS64-NEXT: dsll $3, $2, 32
6735; MIPS64-NEXT: dsrl $1, $1, 32
6736; MIPS64-NEXT: mfc1 $2, $f0
6737; MIPS64-NEXT: dsrl $4, $5, 32
6738; MIPS64-NEXT: dsrl $5, $9, 32
6739; MIPS64-NEXT: dsll $2, $2, 32
6740; MIPS64-NEXT: sll $5, $5, 0
6741; MIPS64-NEXT: or $2, $1, $2
6742; MIPS64-NEXT: dsrl $1, $3, 32
6743; MIPS64-NEXT: mtc1 $5, $f0
6744; MIPS64-NEXT: sll $3, $4, 0
6745; MIPS64-NEXT: andi $3, $3, 1
6746; MIPS64-NEXT: dsrl $4, $7, 32
6747; MIPS64-NEXT: sll $4, $4, 0
6748; MIPS64-NEXT: mtc1 $4, $f1
6749; MIPS64-NEXT: movn.s $f0, $f1, $3
6750; MIPS64-NEXT: mfc1 $3, $f0
6751; MIPS64-NEXT: dsll $3, $3, 32
6752; MIPS64-NEXT: or $3, $1, $3
6753; MIPS64-NEXT: jr $ra
6754; MIPS64-NEXT: nop
6755;
6756; MIPS32R5-LABEL: select:
6757; MIPS32R5: # %bb.0: # %entry
6758; MIPS32R5-NEXT: ldi.b $w0, 0
6759; MIPS32R5-NEXT: lw $1, 44($sp)
6760; MIPS32R5-NEXT: lw $2, 40($sp)
6761; MIPS32R5-NEXT: move.v $w1, $w0
6762; MIPS32R5-NEXT: insert.w $w1[0], $2
6763; MIPS32R5-NEXT: insert.w $w1[1], $1
6764; MIPS32R5-NEXT: lw $1, 48($sp)
6765; MIPS32R5-NEXT: insert.w $w1[2], $1
6766; MIPS32R5-NEXT: lw $1, 28($sp)
6767; MIPS32R5-NEXT: lw $2, 52($sp)
6768; MIPS32R5-NEXT: lw $3, 24($sp)
6769; MIPS32R5-NEXT: move.v $w2, $w0
6770; MIPS32R5-NEXT: insert.w $w2[0], $3
6771; MIPS32R5-NEXT: insert.w $w0[0], $6
6772; MIPS32R5-NEXT: insert.w $w1[3], $2
6773; MIPS32R5-NEXT: insert.w $w2[1], $1
6774; MIPS32R5-NEXT: lw $1, 32($sp)
6775; MIPS32R5-NEXT: insert.w $w2[2], $1
6776; MIPS32R5-NEXT: lw $1, 36($sp)
6777; MIPS32R5-NEXT: insert.w $w2[3], $1
6778; MIPS32R5-NEXT: insert.w $w0[1], $7
6779; MIPS32R5-NEXT: lw $1, 16($sp)
6780; MIPS32R5-NEXT: insert.w $w0[2], $1
6781; MIPS32R5-NEXT: lw $1, 20($sp)
6782; MIPS32R5-NEXT: insert.w $w0[3], $1
6783; MIPS32R5-NEXT: slli.w $w0, $w0, 31
6784; MIPS32R5-NEXT: srai.w $w0, $w0, 31
6785; MIPS32R5-NEXT: bsel.v $w0, $w1, $w2
6786; MIPS32R5-NEXT: st.w $w0, 0($4)
6787; MIPS32R5-NEXT: jr $ra
6788; MIPS32R5-NEXT: nop
6789;
6790; MIPS64R5EB-LABEL: select:
6791; MIPS64R5EB: # %bb.0: # %entry
6792; MIPS64R5EB-NEXT: ldi.b $w0, 0
6793; MIPS64R5EB-NEXT: move.v $w1, $w0
6794; MIPS64R5EB-NEXT: insert.d $w1[0], $8
6795; MIPS64R5EB-NEXT: insert.d $w1[1], $9
6796; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177
6797; MIPS64R5EB-NEXT: move.v $w2, $w0
6798; MIPS64R5EB-NEXT: insert.d $w2[0], $6
6799; MIPS64R5EB-NEXT: insert.d $w2[1], $7
6800; MIPS64R5EB-NEXT: shf.w $w2, $w2, 177
6801; MIPS64R5EB-NEXT: insert.d $w0[0], $4
6802; MIPS64R5EB-NEXT: insert.d $w0[1], $5
6803; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6804; MIPS64R5EB-NEXT: slli.w $w0, $w0, 31
6805; MIPS64R5EB-NEXT: srai.w $w0, $w0, 31
6806; MIPS64R5EB-NEXT: bsel.v $w0, $w1, $w2
6807; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177
6808; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0]
6809; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1]
6810; MIPS64R5EB-NEXT: jr $ra
6811; MIPS64R5EB-NEXT: nop
6812;
6813; MIPS64R5EL-LABEL: select:
6814; MIPS64R5EL: # %bb.0: # %entry
6815; MIPS64R5EL-NEXT: ldi.b $w0, 0
6816; MIPS64R5EL-NEXT: move.v $w1, $w0
6817; MIPS64R5EL-NEXT: insert.d $w1[0], $8
6818; MIPS64R5EL-NEXT: insert.d $w1[1], $9
6819; MIPS64R5EL-NEXT: move.v $w2, $w0
6820; MIPS64R5EL-NEXT: insert.d $w2[0], $6
6821; MIPS64R5EL-NEXT: insert.d $w2[1], $7
6822; MIPS64R5EL-NEXT: insert.d $w0[0], $4
6823; MIPS64R5EL-NEXT: insert.d $w0[1], $5
6824; MIPS64R5EL-NEXT: slli.w $w0, $w0, 31
6825; MIPS64R5EL-NEXT: srai.w $w0, $w0, 31
6826; MIPS64R5EL-NEXT: bsel.v $w0, $w1, $w2
6827; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0]
6828; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1]
6829; MIPS64R5EL-NEXT: jr $ra
6830; MIPS64R5EL-NEXT: nop
Simon Dardis212cccb2017-06-09 14:37:08 +00006831entry:
Simon Dardis212cccb2017-06-09 14:37:08 +00006832 %cond.t = trunc <4 x i32> %cond to <4 x i1>
6833 %res = select <4 x i1> %cond.t, <4 x float> %arg1, <4 x float> %arg2
6834 ret <4 x float> %res
6835}