blob: cbb3c91299fa98c25ca0cb9782f6c745e99bae68 [file] [log] [blame]
Simon Dardis47e66332018-04-05 10:30:17 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=mipsel-mti-linux-gnu < %s | FileCheck %s -check-prefix=MIPS32
3; RUN: llc -mtriple=mips64el-mti-linux-gnu < %s | FileCheck %s -check-prefix=MIPS64
Akira Hatanaka5832fc62013-06-26 18:48:17 +00004
Akira Hatanaka5832fc62013-06-26 18:48:17 +00005
Daniel Sandersc43cda82014-11-07 16:54:21 +00006define i32 @mul5_32(i32 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +00007; MIPS32-LABEL: mul5_32:
8; MIPS32: # %bb.0: # %entry
9; MIPS32-NEXT: sll $1, $4, 2
10; MIPS32-NEXT: jr $ra
11; MIPS32-NEXT: addu $2, $1, $4
12;
13; MIPS64-LABEL: mul5_32:
14; MIPS64: # %bb.0: # %entry
15; MIPS64-NEXT: sll $1, $4, 2
16; MIPS64-NEXT: jr $ra
17; MIPS64-NEXT: addu $2, $1, $4
Akira Hatanaka5832fc62013-06-26 18:48:17 +000018entry:
19 %mul = mul nsw i32 %a, 5
20 ret i32 %mul
21}
22
Daniel Sandersc43cda82014-11-07 16:54:21 +000023define i32 @mul27_32(i32 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +000024; MIPS32-LABEL: mul27_32:
25; MIPS32: # %bb.0: # %entry
26; MIPS32-NEXT: sll $1, $4, 2
27; MIPS32-NEXT: addu $1, $1, $4
28; MIPS32-NEXT: sll $2, $4, 5
29; MIPS32-NEXT: jr $ra
30; MIPS32-NEXT: subu $2, $2, $1
31;
32; MIPS64-LABEL: mul27_32:
33; MIPS64: # %bb.0: # %entry
34; MIPS64-NEXT: sll $1, $4, 2
35; MIPS64-NEXT: addu $1, $1, $4
36; MIPS64-NEXT: sll $2, $4, 5
37; MIPS64-NEXT: jr $ra
38; MIPS64-NEXT: subu $2, $2, $1
Akira Hatanaka5832fc62013-06-26 18:48:17 +000039entry:
40 %mul = mul nsw i32 %a, 27
41 ret i32 %mul
42}
43
Daniel Sandersc43cda82014-11-07 16:54:21 +000044define i32 @muln2147483643_32(i32 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +000045; MIPS32-LABEL: muln2147483643_32:
46; MIPS32: # %bb.0: # %entry
47; MIPS32-NEXT: sll $1, $4, 2
48; MIPS32-NEXT: addu $1, $1, $4
49; MIPS32-NEXT: sll $2, $4, 31
50; MIPS32-NEXT: jr $ra
51; MIPS32-NEXT: addu $2, $2, $1
52;
53; MIPS64-LABEL: muln2147483643_32:
54; MIPS64: # %bb.0: # %entry
55; MIPS64-NEXT: sll $1, $4, 2
56; MIPS64-NEXT: addu $1, $1, $4
57; MIPS64-NEXT: sll $2, $4, 31
58; MIPS64-NEXT: jr $ra
59; MIPS64-NEXT: addu $2, $2, $1
Akira Hatanaka5832fc62013-06-26 18:48:17 +000060entry:
61 %mul = mul nsw i32 %a, -2147483643
62 ret i32 %mul
63}
64
Daniel Sandersc43cda82014-11-07 16:54:21 +000065define i64 @muln9223372036854775805_64(i64 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +000066; MIPS32-LABEL: muln9223372036854775805_64:
67; MIPS32: # %bb.0: # %entry
68; MIPS32-NEXT: sll $1, $4, 1
69; MIPS32-NEXT: addu $2, $1, $4
70; MIPS32-NEXT: sltu $1, $2, $1
71; MIPS32-NEXT: srl $3, $4, 31
72; MIPS32-NEXT: sll $6, $5, 1
73; MIPS32-NEXT: or $3, $6, $3
74; MIPS32-NEXT: addu $3, $3, $5
75; MIPS32-NEXT: addu $1, $3, $1
76; MIPS32-NEXT: sll $3, $4, 31
77; MIPS32-NEXT: jr $ra
78; MIPS32-NEXT: addu $3, $3, $1
79;
80; MIPS64-LABEL: muln9223372036854775805_64:
81; MIPS64: # %bb.0: # %entry
82; MIPS64-NEXT: dsll $1, $4, 1
83; MIPS64-NEXT: daddu $1, $1, $4
84; MIPS64-NEXT: dsll $2, $4, 63
85; MIPS64-NEXT: jr $ra
86; MIPS64-NEXT: daddu $2, $2, $1
Akira Hatanaka5832fc62013-06-26 18:48:17 +000087entry:
88 %mul = mul nsw i64 %a, -9223372036854775805
89 ret i64 %mul
90}
Petar Jovanoviccd729ea2017-11-15 15:24:04 +000091
Petar Jovanoviccd729ea2017-11-15 15:24:04 +000092define i128 @muln170141183460469231731687303715884105725_128(i128 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +000093; MIPS32-LABEL: muln170141183460469231731687303715884105725_128:
94; MIPS32: # %bb.0: # %entry
95; MIPS32-NEXT: sll $1, $4, 1
96; MIPS32-NEXT: addu $2, $1, $4
97; MIPS32-NEXT: sltu $1, $2, $1
98; MIPS32-NEXT: srl $3, $4, 31
99; MIPS32-NEXT: sll $8, $5, 1
100; MIPS32-NEXT: or $8, $8, $3
101; MIPS32-NEXT: addu $3, $8, $5
102; MIPS32-NEXT: addu $3, $3, $1
103; MIPS32-NEXT: sltu $9, $3, $8
104; MIPS32-NEXT: xor $8, $3, $8
105; MIPS32-NEXT: movz $9, $1, $8
106; MIPS32-NEXT: srl $1, $5, 31
107; MIPS32-NEXT: sll $5, $6, 1
108; MIPS32-NEXT: or $5, $5, $1
109; MIPS32-NEXT: addu $8, $5, $6
110; MIPS32-NEXT: addu $1, $8, $9
111; MIPS32-NEXT: sltu $5, $8, $5
112; MIPS32-NEXT: srl $6, $6, 31
113; MIPS32-NEXT: sll $9, $7, 1
114; MIPS32-NEXT: or $6, $9, $6
115; MIPS32-NEXT: addu $6, $6, $7
116; MIPS32-NEXT: addu $5, $6, $5
117; MIPS32-NEXT: sll $4, $4, 31
118; MIPS32-NEXT: sltu $6, $1, $8
119; MIPS32-NEXT: addu $5, $5, $6
120; MIPS32-NEXT: addu $5, $4, $5
121; MIPS32-NEXT: jr $ra
122; MIPS32-NEXT: move $4, $1
123;
124; MIPS64-LABEL: muln170141183460469231731687303715884105725_128:
125; MIPS64: # %bb.0: # %entry
126; MIPS64-NEXT: dsrl $1, $4, 63
127; MIPS64-NEXT: dsll $2, $5, 1
128; MIPS64-NEXT: or $1, $2, $1
129; MIPS64-NEXT: daddu $1, $1, $5
130; MIPS64-NEXT: dsll $3, $4, 1
131; MIPS64-NEXT: daddu $2, $3, $4
132; MIPS64-NEXT: sltu $3, $2, $3
133; MIPS64-NEXT: dsll $3, $3, 32
134; MIPS64-NEXT: dsrl $3, $3, 32
135; MIPS64-NEXT: daddu $1, $1, $3
136; MIPS64-NEXT: dsll $3, $4, 63
137; MIPS64-NEXT: jr $ra
138; MIPS64-NEXT: daddu $3, $3, $1
Petar Jovanoviccd729ea2017-11-15 15:24:04 +0000139entry:
140 %mul = mul nsw i128 %a, -170141183460469231731687303715884105725
141 ret i128 %mul
142}
143
Petar Jovanoviccd729ea2017-11-15 15:24:04 +0000144define i128 @mul170141183460469231731687303715884105723_128(i128 signext %a) {
Simon Dardis47e66332018-04-05 10:30:17 +0000145; MIPS32-LABEL: mul170141183460469231731687303715884105723_128:
146; MIPS32: # %bb.0: # %entry
147; MIPS32-NEXT: sll $1, $4, 2
148; MIPS32-NEXT: addu $2, $1, $4
149; MIPS32-NEXT: sltu $1, $2, $1
150; MIPS32-NEXT: srl $3, $4, 30
151; MIPS32-NEXT: sll $8, $5, 2
152; MIPS32-NEXT: or $3, $8, $3
153; MIPS32-NEXT: addu $8, $3, $5
154; MIPS32-NEXT: addu $8, $8, $1
155; MIPS32-NEXT: sltu $9, $8, $3
156; MIPS32-NEXT: xor $3, $8, $3
157; MIPS32-NEXT: sltu $10, $zero, $8
158; MIPS32-NEXT: sltu $11, $zero, $2
159; MIPS32-NEXT: movz $10, $11, $8
160; MIPS32-NEXT: movz $9, $1, $3
161; MIPS32-NEXT: srl $1, $5, 30
162; MIPS32-NEXT: sll $3, $6, 2
163; MIPS32-NEXT: or $1, $3, $1
164; MIPS32-NEXT: addu $3, $1, $6
165; MIPS32-NEXT: addu $5, $3, $9
166; MIPS32-NEXT: sll $4, $4, 31
167; MIPS32-NEXT: negu $9, $5
168; MIPS32-NEXT: sltu $12, $9, $10
169; MIPS32-NEXT: sltu $13, $5, $3
170; MIPS32-NEXT: sltu $1, $3, $1
171; MIPS32-NEXT: srl $3, $6, 30
172; MIPS32-NEXT: sll $6, $7, 2
173; MIPS32-NEXT: or $3, $6, $3
174; MIPS32-NEXT: addu $3, $3, $7
175; MIPS32-NEXT: addu $1, $3, $1
176; MIPS32-NEXT: addu $1, $1, $13
177; MIPS32-NEXT: subu $1, $4, $1
178; MIPS32-NEXT: sltu $3, $zero, $5
179; MIPS32-NEXT: subu $1, $1, $3
180; MIPS32-NEXT: subu $5, $1, $12
181; MIPS32-NEXT: subu $4, $9, $10
182; MIPS32-NEXT: negu $1, $8
183; MIPS32-NEXT: subu $3, $1, $11
184; MIPS32-NEXT: jr $ra
185; MIPS32-NEXT: negu $2, $2
186;
187; MIPS64-LABEL: mul170141183460469231731687303715884105723_128:
188; MIPS64: # %bb.0: # %entry
189; MIPS64-NEXT: dsrl $1, $4, 62
190; MIPS64-NEXT: dsll $2, $5, 2
191; MIPS64-NEXT: or $1, $2, $1
192; MIPS64-NEXT: daddu $1, $1, $5
193; MIPS64-NEXT: dsll $2, $4, 2
194; MIPS64-NEXT: daddu $5, $2, $4
195; MIPS64-NEXT: sltu $2, $5, $2
196; MIPS64-NEXT: dsll $2, $2, 32
197; MIPS64-NEXT: dsrl $2, $2, 32
198; MIPS64-NEXT: daddu $1, $1, $2
199; MIPS64-NEXT: dsll $2, $4, 63
200; MIPS64-NEXT: dsubu $1, $2, $1
201; MIPS64-NEXT: sltu $2, $zero, $5
202; MIPS64-NEXT: dsll $2, $2, 32
203; MIPS64-NEXT: dsrl $2, $2, 32
204; MIPS64-NEXT: dsubu $3, $1, $2
205; MIPS64-NEXT: jr $ra
206; MIPS64-NEXT: dnegu $2, $5
Petar Jovanoviccd729ea2017-11-15 15:24:04 +0000207entry:
208 %mul = mul nsw i128 %a, 170141183460469231731687303715884105723
209 ret i128 %mul
Francis Visoiu Mistrihc71cced2017-11-30 16:12:24 +0000210}
Simon Dardis47e66332018-04-05 10:30:17 +0000211
212define i32 @mul42949673_32(i32 %a) {
213; MIPS32-LABEL: mul42949673_32:
214; MIPS32: # %bb.0:
215; MIPS32-NEXT: sll $1, $4, 3
216; MIPS32-NEXT: addu $1, $1, $4
217; MIPS32-NEXT: sll $2, $4, 5
218; MIPS32-NEXT: addu $1, $2, $1
219; MIPS32-NEXT: sll $2, $4, 10
220; MIPS32-NEXT: subu $1, $2, $1
221; MIPS32-NEXT: sll $2, $4, 13
222; MIPS32-NEXT: addu $1, $2, $1
223; MIPS32-NEXT: sll $2, $4, 15
224; MIPS32-NEXT: addu $1, $2, $1
225; MIPS32-NEXT: sll $2, $4, 20
226; MIPS32-NEXT: subu $1, $2, $1
227; MIPS32-NEXT: sll $2, $4, 25
228; MIPS32-NEXT: sll $3, $4, 23
229; MIPS32-NEXT: addu $1, $3, $1
230; MIPS32-NEXT: jr $ra
231; MIPS32-NEXT: addu $2, $2, $1
232;
233; MIPS64-LABEL: mul42949673_32:
234; MIPS64: # %bb.0:
235; MIPS64-NEXT: sll $1, $4, 0
236; MIPS64-NEXT: sll $2, $1, 3
237; MIPS64-NEXT: addu $2, $2, $1
238; MIPS64-NEXT: sll $3, $1, 5
239; MIPS64-NEXT: addu $2, $3, $2
240; MIPS64-NEXT: sll $3, $1, 10
241; MIPS64-NEXT: subu $2, $3, $2
242; MIPS64-NEXT: sll $3, $1, 13
243; MIPS64-NEXT: addu $2, $3, $2
244; MIPS64-NEXT: sll $3, $1, 15
245; MIPS64-NEXT: addu $2, $3, $2
246; MIPS64-NEXT: sll $3, $1, 20
247; MIPS64-NEXT: subu $2, $3, $2
248; MIPS64-NEXT: sll $3, $1, 25
249; MIPS64-NEXT: sll $1, $1, 23
250; MIPS64-NEXT: addu $1, $1, $2
251; MIPS64-NEXT: jr $ra
252; MIPS64-NEXT: addu $2, $3, $1
253 %b = mul i32 %a, 42949673
254 ret i32 %b
255}
256
257define i64 @mul42949673_64(i64 %a) {
258; MIPS32-LABEL: mul42949673_64:
259; MIPS32: # %bb.0: # %entry
Simon Dardis9ec9f442018-04-13 16:09:07 +0000260; MIPS32-NEXT: lui $1, 655
261; MIPS32-NEXT: ori $1, $1, 23593
262; MIPS32-NEXT: multu $4, $1
263; MIPS32-NEXT: mflo $2
264; MIPS32-NEXT: mfhi $1
265; MIPS32-NEXT: sll $3, $5, 3
Simon Dardis47e66332018-04-05 10:30:17 +0000266; MIPS32-NEXT: addu $3, $3, $5
Simon Dardis9ec9f442018-04-13 16:09:07 +0000267; MIPS32-NEXT: sll $4, $5, 5
268; MIPS32-NEXT: addu $3, $4, $3
269; MIPS32-NEXT: sll $4, $5, 10
270; MIPS32-NEXT: subu $3, $4, $3
271; MIPS32-NEXT: sll $4, $5, 13
272; MIPS32-NEXT: addu $3, $4, $3
273; MIPS32-NEXT: sll $4, $5, 15
274; MIPS32-NEXT: addu $3, $4, $3
275; MIPS32-NEXT: sll $4, $5, 20
276; MIPS32-NEXT: subu $3, $4, $3
277; MIPS32-NEXT: sll $4, $5, 25
278; MIPS32-NEXT: sll $5, $5, 23
279; MIPS32-NEXT: addu $3, $5, $3
280; MIPS32-NEXT: addu $3, $4, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000281; MIPS32-NEXT: jr $ra
Simon Dardis9ec9f442018-04-13 16:09:07 +0000282; MIPS32-NEXT: addu $3, $1, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000283;
284; MIPS64-LABEL: mul42949673_64:
285; MIPS64: # %bb.0: # %entry
286; MIPS64-NEXT: dsll $1, $4, 3
287; MIPS64-NEXT: daddu $1, $1, $4
288; MIPS64-NEXT: dsll $2, $4, 5
289; MIPS64-NEXT: daddu $1, $2, $1
290; MIPS64-NEXT: dsll $2, $4, 10
291; MIPS64-NEXT: dsubu $1, $2, $1
292; MIPS64-NEXT: dsll $2, $4, 13
293; MIPS64-NEXT: daddu $1, $2, $1
294; MIPS64-NEXT: dsll $2, $4, 15
295; MIPS64-NEXT: daddu $1, $2, $1
296; MIPS64-NEXT: dsll $2, $4, 20
297; MIPS64-NEXT: dsubu $1, $2, $1
298; MIPS64-NEXT: dsll $2, $4, 25
299; MIPS64-NEXT: dsll $3, $4, 23
300; MIPS64-NEXT: daddu $1, $3, $1
301; MIPS64-NEXT: jr $ra
302; MIPS64-NEXT: daddu $2, $2, $1
303entry:
304 %b = mul i64 %a, 42949673
305 ret i64 %b
306}
307
308define i32 @mul22224078_32(i32 %a) {
309; MIPS32-LABEL: mul22224078_32:
310; MIPS32: # %bb.0: # %entry
311; MIPS32-NEXT: sll $1, $4, 1
312; MIPS32-NEXT: sll $2, $4, 4
313; MIPS32-NEXT: subu $1, $2, $1
314; MIPS32-NEXT: sll $2, $4, 6
Craig Topper50b1d432018-07-28 00:27:25 +0000315; MIPS32-NEXT: subu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000316; MIPS32-NEXT: sll $2, $4, 8
Craig Topper50b1d432018-07-28 00:27:25 +0000317; MIPS32-NEXT: addu $1, $2, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000318; MIPS32-NEXT: sll $2, $4, 10
Craig Topper50b1d432018-07-28 00:27:25 +0000319; MIPS32-NEXT: subu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000320; MIPS32-NEXT: sll $2, $4, 13
Craig Topper50b1d432018-07-28 00:27:25 +0000321; MIPS32-NEXT: addu $1, $2, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000322; MIPS32-NEXT: sll $2, $4, 16
Craig Topper50b1d432018-07-28 00:27:25 +0000323; MIPS32-NEXT: subu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000324; MIPS32-NEXT: sll $2, $4, 24
325; MIPS32-NEXT: sll $3, $4, 22
326; MIPS32-NEXT: sll $5, $4, 20
327; MIPS32-NEXT: sll $4, $4, 18
Craig Topper50b1d432018-07-28 00:27:25 +0000328; MIPS32-NEXT: addu $1, $4, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000329; MIPS32-NEXT: addu $1, $5, $1
330; MIPS32-NEXT: addu $1, $3, $1
331; MIPS32-NEXT: jr $ra
332; MIPS32-NEXT: addu $2, $2, $1
333;
334; MIPS64-LABEL: mul22224078_32:
335; MIPS64: # %bb.0: # %entry
336; MIPS64-NEXT: sll $1, $4, 0
337; MIPS64-NEXT: sll $2, $1, 1
338; MIPS64-NEXT: sll $3, $1, 4
339; MIPS64-NEXT: subu $2, $3, $2
340; MIPS64-NEXT: sll $3, $1, 6
Craig Topper50b1d432018-07-28 00:27:25 +0000341; MIPS64-NEXT: subu $2, $2, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000342; MIPS64-NEXT: sll $3, $1, 8
Craig Topper50b1d432018-07-28 00:27:25 +0000343; MIPS64-NEXT: addu $2, $3, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000344; MIPS64-NEXT: sll $3, $1, 10
Craig Topper50b1d432018-07-28 00:27:25 +0000345; MIPS64-NEXT: subu $2, $2, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000346; MIPS64-NEXT: sll $3, $1, 13
Craig Topper50b1d432018-07-28 00:27:25 +0000347; MIPS64-NEXT: addu $2, $3, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000348; MIPS64-NEXT: sll $3, $1, 16
Craig Topper50b1d432018-07-28 00:27:25 +0000349; MIPS64-NEXT: subu $2, $2, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000350; MIPS64-NEXT: sll $3, $1, 24
351; MIPS64-NEXT: sll $4, $1, 22
352; MIPS64-NEXT: sll $5, $1, 20
353; MIPS64-NEXT: sll $1, $1, 18
Craig Topper50b1d432018-07-28 00:27:25 +0000354; MIPS64-NEXT: addu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000355; MIPS64-NEXT: addu $1, $5, $1
356; MIPS64-NEXT: addu $1, $4, $1
357; MIPS64-NEXT: jr $ra
358; MIPS64-NEXT: addu $2, $3, $1
359entry:
360 %b = mul i32 %a, 22224078
361 ret i32 %b
362}
363
364define i64 @mul22224078_64(i64 %a) {
365; MIPS32-LABEL: mul22224078_64:
366; MIPS32: # %bb.0: # %entry
Simon Dardis9ec9f442018-04-13 16:09:07 +0000367; MIPS32-NEXT: lui $1, 339
368; MIPS32-NEXT: ori $1, $1, 7374
369; MIPS32-NEXT: multu $4, $1
370; MIPS32-NEXT: mflo $2
371; MIPS32-NEXT: mfhi $1
372; MIPS32-NEXT: sll $3, $5, 1
373; MIPS32-NEXT: sll $4, $5, 4
374; MIPS32-NEXT: subu $3, $4, $3
375; MIPS32-NEXT: sll $4, $5, 6
Craig Topper50b1d432018-07-28 00:27:25 +0000376; MIPS32-NEXT: subu $3, $3, $4
Simon Dardis9ec9f442018-04-13 16:09:07 +0000377; MIPS32-NEXT: sll $4, $5, 8
Craig Topper50b1d432018-07-28 00:27:25 +0000378; MIPS32-NEXT: addu $3, $4, $3
Simon Dardis9ec9f442018-04-13 16:09:07 +0000379; MIPS32-NEXT: sll $4, $5, 10
Craig Topper50b1d432018-07-28 00:27:25 +0000380; MIPS32-NEXT: subu $3, $3, $4
Simon Dardis9ec9f442018-04-13 16:09:07 +0000381; MIPS32-NEXT: sll $4, $5, 13
Craig Topper50b1d432018-07-28 00:27:25 +0000382; MIPS32-NEXT: addu $3, $4, $3
Simon Dardis9ec9f442018-04-13 16:09:07 +0000383; MIPS32-NEXT: sll $4, $5, 16
Craig Topper50b1d432018-07-28 00:27:25 +0000384; MIPS32-NEXT: subu $3, $3, $4
Simon Dardis9ec9f442018-04-13 16:09:07 +0000385; MIPS32-NEXT: sll $4, $5, 24
386; MIPS32-NEXT: sll $6, $5, 22
387; MIPS32-NEXT: sll $7, $5, 20
388; MIPS32-NEXT: sll $5, $5, 18
Craig Topper50b1d432018-07-28 00:27:25 +0000389; MIPS32-NEXT: addu $3, $5, $3
Simon Dardis9ec9f442018-04-13 16:09:07 +0000390; MIPS32-NEXT: addu $3, $7, $3
391; MIPS32-NEXT: addu $3, $6, $3
392; MIPS32-NEXT: addu $3, $4, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000393; MIPS32-NEXT: jr $ra
Simon Dardis9ec9f442018-04-13 16:09:07 +0000394; MIPS32-NEXT: addu $3, $1, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000395;
396; MIPS64-LABEL: mul22224078_64:
397; MIPS64: # %bb.0: # %entry
398; MIPS64-NEXT: dsll $1, $4, 1
399; MIPS64-NEXT: dsll $2, $4, 4
400; MIPS64-NEXT: dsubu $1, $2, $1
401; MIPS64-NEXT: dsll $2, $4, 6
Craig Topper50b1d432018-07-28 00:27:25 +0000402; MIPS64-NEXT: dsubu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000403; MIPS64-NEXT: dsll $2, $4, 8
Craig Topper50b1d432018-07-28 00:27:25 +0000404; MIPS64-NEXT: daddu $1, $2, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000405; MIPS64-NEXT: dsll $2, $4, 10
Craig Topper50b1d432018-07-28 00:27:25 +0000406; MIPS64-NEXT: dsubu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000407; MIPS64-NEXT: dsll $2, $4, 13
Craig Topper50b1d432018-07-28 00:27:25 +0000408; MIPS64-NEXT: daddu $1, $2, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000409; MIPS64-NEXT: dsll $2, $4, 16
Craig Topper50b1d432018-07-28 00:27:25 +0000410; MIPS64-NEXT: dsubu $1, $1, $2
Simon Dardis47e66332018-04-05 10:30:17 +0000411; MIPS64-NEXT: dsll $2, $4, 24
412; MIPS64-NEXT: dsll $3, $4, 22
413; MIPS64-NEXT: dsll $5, $4, 20
414; MIPS64-NEXT: dsll $4, $4, 18
Craig Topper50b1d432018-07-28 00:27:25 +0000415; MIPS64-NEXT: daddu $1, $4, $1
Simon Dardis47e66332018-04-05 10:30:17 +0000416; MIPS64-NEXT: daddu $1, $5, $1
417; MIPS64-NEXT: daddu $1, $3, $1
418; MIPS64-NEXT: jr $ra
419; MIPS64-NEXT: daddu $2, $2, $1
420entry:
421 %b = mul i64 %a, 22224078
422 ret i64 %b
423}
424
425define i32 @mul22245375_32(i32 %a) {
426; MIPS32-LABEL: mul22245375_32:
427; MIPS32: # %bb.0: # %entry
428; MIPS32-NEXT: sll $1, $4, 12
429; MIPS32-NEXT: addu $1, $1, $4
430; MIPS32-NEXT: sll $2, $4, 15
431; MIPS32-NEXT: addu $1, $2, $1
432; MIPS32-NEXT: sll $2, $4, 18
433; MIPS32-NEXT: subu $1, $2, $1
434; MIPS32-NEXT: sll $2, $4, 20
435; MIPS32-NEXT: addu $1, $2, $1
436; MIPS32-NEXT: sll $2, $4, 22
437; MIPS32-NEXT: addu $1, $2, $1
438; MIPS32-NEXT: sll $2, $4, 24
439; MIPS32-NEXT: jr $ra
440; MIPS32-NEXT: addu $2, $2, $1
441;
442; MIPS64-LABEL: mul22245375_32:
443; MIPS64: # %bb.0: # %entry
444; MIPS64-NEXT: sll $1, $4, 0
445; MIPS64-NEXT: sll $2, $1, 12
446; MIPS64-NEXT: addu $2, $2, $1
447; MIPS64-NEXT: sll $3, $1, 15
448; MIPS64-NEXT: addu $2, $3, $2
449; MIPS64-NEXT: sll $3, $1, 18
450; MIPS64-NEXT: subu $2, $3, $2
451; MIPS64-NEXT: sll $3, $1, 20
452; MIPS64-NEXT: addu $2, $3, $2
453; MIPS64-NEXT: sll $3, $1, 22
454; MIPS64-NEXT: addu $2, $3, $2
455; MIPS64-NEXT: sll $1, $1, 24
456; MIPS64-NEXT: jr $ra
457; MIPS64-NEXT: addu $2, $1, $2
458entry:
459 %b = mul i32 %a, 22245375
460 ret i32 %b
461}
462
463define i64 @mul22245375_64(i64 %a) {
464; MIPS32-LABEL: mul22245375_64:
465; MIPS32: # %bb.0: # %entry
Simon Dardis9ec9f442018-04-13 16:09:07 +0000466; MIPS32-NEXT: lui $1, 339
467; MIPS32-NEXT: ori $1, $1, 28671
468; MIPS32-NEXT: multu $4, $1
469; MIPS32-NEXT: mflo $2
470; MIPS32-NEXT: mfhi $1
471; MIPS32-NEXT: sll $3, $5, 12
Simon Dardis47e66332018-04-05 10:30:17 +0000472; MIPS32-NEXT: addu $3, $3, $5
Simon Dardis9ec9f442018-04-13 16:09:07 +0000473; MIPS32-NEXT: sll $4, $5, 15
474; MIPS32-NEXT: addu $3, $4, $3
475; MIPS32-NEXT: sll $4, $5, 18
476; MIPS32-NEXT: subu $3, $4, $3
477; MIPS32-NEXT: sll $4, $5, 20
478; MIPS32-NEXT: addu $3, $4, $3
479; MIPS32-NEXT: sll $4, $5, 22
480; MIPS32-NEXT: addu $3, $4, $3
481; MIPS32-NEXT: sll $4, $5, 24
482; MIPS32-NEXT: addu $3, $4, $3
Simon Dardis47e66332018-04-05 10:30:17 +0000483; MIPS32-NEXT: jr $ra
484; MIPS32-NEXT: addu $3, $1, $3
485;
486; MIPS64-LABEL: mul22245375_64:
487; MIPS64: # %bb.0: # %entry
488; MIPS64-NEXT: dsll $1, $4, 12
489; MIPS64-NEXT: daddu $1, $1, $4
490; MIPS64-NEXT: dsll $2, $4, 15
491; MIPS64-NEXT: daddu $1, $2, $1
492; MIPS64-NEXT: dsll $2, $4, 18
493; MIPS64-NEXT: dsubu $1, $2, $1
494; MIPS64-NEXT: dsll $2, $4, 20
495; MIPS64-NEXT: daddu $1, $2, $1
496; MIPS64-NEXT: dsll $2, $4, 22
497; MIPS64-NEXT: daddu $1, $2, $1
498; MIPS64-NEXT: dsll $2, $4, 24
499; MIPS64-NEXT: jr $ra
500; MIPS64-NEXT: daddu $2, $2, $1
501entry:
502 %b = mul i64 %a, 22245375
503 ret i64 %b
504}
505
506define i32 @mul25165824_32(i32 %a) {
507; MIPS32-LABEL: mul25165824_32:
508; MIPS32: # %bb.0: # %entry
509; MIPS32-NEXT: sll $1, $4, 12
510; MIPS32-NEXT: addu $1, $1, $4
511; MIPS32-NEXT: sll $2, $4, 15
512; MIPS32-NEXT: addu $1, $2, $1
513; MIPS32-NEXT: sll $2, $4, 18
514; MIPS32-NEXT: subu $1, $2, $1
515; MIPS32-NEXT: sll $2, $4, 20
516; MIPS32-NEXT: addu $1, $2, $1
517; MIPS32-NEXT: sll $2, $4, 22
518; MIPS32-NEXT: addu $1, $2, $1
519; MIPS32-NEXT: sll $2, $4, 24
520; MIPS32-NEXT: jr $ra
521; MIPS32-NEXT: addu $2, $2, $1
522;
523; MIPS64-LABEL: mul25165824_32:
524; MIPS64: # %bb.0: # %entry
525; MIPS64-NEXT: sll $1, $4, 0
526; MIPS64-NEXT: sll $2, $1, 12
527; MIPS64-NEXT: addu $2, $2, $1
528; MIPS64-NEXT: sll $3, $1, 15
529; MIPS64-NEXT: addu $2, $3, $2
530; MIPS64-NEXT: sll $3, $1, 18
531; MIPS64-NEXT: subu $2, $3, $2
532; MIPS64-NEXT: sll $3, $1, 20
533; MIPS64-NEXT: addu $2, $3, $2
534; MIPS64-NEXT: sll $3, $1, 22
535; MIPS64-NEXT: addu $2, $3, $2
536; MIPS64-NEXT: sll $1, $1, 24
537; MIPS64-NEXT: jr $ra
538; MIPS64-NEXT: addu $2, $1, $2
539entry:
540 %b = mul i32 %a, 22245375
541 ret i32 %b
542}
543
544define i64 @mul25165824_64(i64 %a) {
545; MIPS32-LABEL: mul25165824_64:
546; MIPS32: # %bb.0: # %entry
547; MIPS32-NEXT: srl $1, $4, 9
548; MIPS32-NEXT: sll $2, $5, 23
549; MIPS32-NEXT: or $1, $2, $1
550; MIPS32-NEXT: srl $2, $4, 8
551; MIPS32-NEXT: sll $3, $5, 24
552; MIPS32-NEXT: or $2, $3, $2
553; MIPS32-NEXT: addu $1, $2, $1
554; MIPS32-NEXT: sll $2, $4, 23
555; MIPS32-NEXT: sll $3, $4, 24
556; MIPS32-NEXT: addu $2, $3, $2
557; MIPS32-NEXT: sltu $3, $2, $3
558; MIPS32-NEXT: jr $ra
559; MIPS32-NEXT: addu $3, $1, $3
560;
561; MIPS64-LABEL: mul25165824_64:
562; MIPS64: # %bb.0: # %entry
563; MIPS64-NEXT: dsll $1, $4, 23
564; MIPS64-NEXT: dsll $2, $4, 24
565; MIPS64-NEXT: jr $ra
566; MIPS64-NEXT: daddu $2, $2, $1
567entry:
568 %b = mul i64 %a, 25165824
569 ret i64 %b
570}
571
572define i32 @mul33554432_32(i32 %a) {
573; MIPS32-LABEL: mul33554432_32:
574; MIPS32: # %bb.0: # %entry
575; MIPS32-NEXT: sll $1, $4, 12
576; MIPS32-NEXT: addu $1, $1, $4
577; MIPS32-NEXT: sll $2, $4, 15
578; MIPS32-NEXT: addu $1, $2, $1
579; MIPS32-NEXT: sll $2, $4, 18
580; MIPS32-NEXT: subu $1, $2, $1
581; MIPS32-NEXT: sll $2, $4, 20
582; MIPS32-NEXT: addu $1, $2, $1
583; MIPS32-NEXT: sll $2, $4, 22
584; MIPS32-NEXT: addu $1, $2, $1
585; MIPS32-NEXT: sll $2, $4, 24
586; MIPS32-NEXT: jr $ra
587; MIPS32-NEXT: addu $2, $2, $1
588;
589; MIPS64-LABEL: mul33554432_32:
590; MIPS64: # %bb.0: # %entry
591; MIPS64-NEXT: sll $1, $4, 0
592; MIPS64-NEXT: sll $2, $1, 12
593; MIPS64-NEXT: addu $2, $2, $1
594; MIPS64-NEXT: sll $3, $1, 15
595; MIPS64-NEXT: addu $2, $3, $2
596; MIPS64-NEXT: sll $3, $1, 18
597; MIPS64-NEXT: subu $2, $3, $2
598; MIPS64-NEXT: sll $3, $1, 20
599; MIPS64-NEXT: addu $2, $3, $2
600; MIPS64-NEXT: sll $3, $1, 22
601; MIPS64-NEXT: addu $2, $3, $2
602; MIPS64-NEXT: sll $1, $1, 24
603; MIPS64-NEXT: jr $ra
604; MIPS64-NEXT: addu $2, $1, $2
605entry:
606 %b = mul i32 %a, 22245375
607 ret i32 %b
608}
609
610define i64 @mul33554432_64(i64 %a) {
611; MIPS32-LABEL: mul33554432_64:
612; MIPS32: # %bb.0: # %entry
613; MIPS32-NEXT: srl $1, $4, 7
614; MIPS32-NEXT: sll $2, $5, 25
615; MIPS32-NEXT: or $3, $2, $1
616; MIPS32-NEXT: jr $ra
617; MIPS32-NEXT: sll $2, $4, 25
618;
619; MIPS64-LABEL: mul33554432_64:
620; MIPS64: # %bb.0: # %entry
621; MIPS64-NEXT: jr $ra
622; MIPS64-NEXT: dsll $2, $4, 25
623entry:
624 %b = mul i64 %a, 33554432
625 ret i64 %b
626}