• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; 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
4
5
6define i32 @mul5_32(i32 signext %a) {
7; 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
18entry:
19  %mul = mul nsw i32 %a, 5
20  ret i32 %mul
21}
22
23define i32 @mul27_32(i32 signext %a) {
24; 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
39entry:
40  %mul = mul nsw i32 %a, 27
41  ret i32 %mul
42}
43
44define i32 @muln2147483643_32(i32 signext %a) {
45; 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
60entry:
61  %mul = mul nsw i32 %a, -2147483643
62  ret i32 %mul
63}
64
65define i64 @muln9223372036854775805_64(i64 signext %a) {
66; 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
87entry:
88  %mul = mul nsw i64 %a, -9223372036854775805
89  ret i64 %mul
90}
91
92define i128 @muln170141183460469231731687303715884105725_128(i128 signext %a) {
93; 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
139entry:
140  %mul = mul nsw i128 %a, -170141183460469231731687303715884105725
141  ret i128 %mul
142}
143
144define i128 @mul170141183460469231731687303715884105723_128(i128 signext %a) {
145; 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
207entry:
208  %mul = mul nsw i128 %a, 170141183460469231731687303715884105723
209  ret i128 %mul
210}
211
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
260; 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
266; MIPS32-NEXT:    addu $3, $3, $5
267; 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
281; MIPS32-NEXT:    jr $ra
282; MIPS32-NEXT:    addu $3, $1, $3
283;
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
315; MIPS32-NEXT:    subu $1, $1, $2
316; MIPS32-NEXT:    sll $2, $4, 8
317; MIPS32-NEXT:    addu $1, $2, $1
318; MIPS32-NEXT:    sll $2, $4, 10
319; MIPS32-NEXT:    subu $1, $1, $2
320; MIPS32-NEXT:    sll $2, $4, 13
321; MIPS32-NEXT:    addu $1, $2, $1
322; MIPS32-NEXT:    sll $2, $4, 16
323; MIPS32-NEXT:    subu $1, $1, $2
324; 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
328; MIPS32-NEXT:    addu $1, $4, $1
329; 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
341; MIPS64-NEXT:    subu $2, $2, $3
342; MIPS64-NEXT:    sll $3, $1, 8
343; MIPS64-NEXT:    addu $2, $3, $2
344; MIPS64-NEXT:    sll $3, $1, 10
345; MIPS64-NEXT:    subu $2, $2, $3
346; MIPS64-NEXT:    sll $3, $1, 13
347; MIPS64-NEXT:    addu $2, $3, $2
348; MIPS64-NEXT:    sll $3, $1, 16
349; MIPS64-NEXT:    subu $2, $2, $3
350; 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
354; MIPS64-NEXT:    addu $1, $1, $2
355; 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
367; 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
376; MIPS32-NEXT:    subu $3, $3, $4
377; MIPS32-NEXT:    sll $4, $5, 8
378; MIPS32-NEXT:    addu $3, $4, $3
379; MIPS32-NEXT:    sll $4, $5, 10
380; MIPS32-NEXT:    subu $3, $3, $4
381; MIPS32-NEXT:    sll $4, $5, 13
382; MIPS32-NEXT:    addu $3, $4, $3
383; MIPS32-NEXT:    sll $4, $5, 16
384; MIPS32-NEXT:    subu $3, $3, $4
385; 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
389; MIPS32-NEXT:    addu $3, $5, $3
390; MIPS32-NEXT:    addu $3, $7, $3
391; MIPS32-NEXT:    addu $3, $6, $3
392; MIPS32-NEXT:    addu $3, $4, $3
393; MIPS32-NEXT:    jr $ra
394; MIPS32-NEXT:    addu $3, $1, $3
395;
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
402; MIPS64-NEXT:    dsubu $1, $1, $2
403; MIPS64-NEXT:    dsll $2, $4, 8
404; MIPS64-NEXT:    daddu $1, $2, $1
405; MIPS64-NEXT:    dsll $2, $4, 10
406; MIPS64-NEXT:    dsubu $1, $1, $2
407; MIPS64-NEXT:    dsll $2, $4, 13
408; MIPS64-NEXT:    daddu $1, $2, $1
409; MIPS64-NEXT:    dsll $2, $4, 16
410; MIPS64-NEXT:    dsubu $1, $1, $2
411; 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
415; MIPS64-NEXT:    daddu $1, $4, $1
416; 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
466; 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
472; MIPS32-NEXT:    addu $3, $3, $5
473; 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
483; 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}
627