7
7
define i32 @muli32_0x555 (i32 %a ) nounwind {
8
8
; RV32I-LABEL: muli32_0x555:
9
9
; RV32I: # %bb.0:
10
- ; RV32I-NEXT: slli a1, a0, 2
11
- ; RV32I-NEXT: sub a1, a0, a1
12
- ; RV32I-NEXT: slli a0, a0, 4
10
+ ; RV32I-NEXT: slli a1, a0, 6
13
11
; RV32I-NEXT: add a0, a1, a0
14
- ; RV32I-NEXT: slli a1, a0, 2
12
+ ; RV32I-NEXT: slli a1, a0, 3
15
13
; RV32I-NEXT: sub a1, a1, a0
16
14
; RV32I-NEXT: slli a0, a1, 2
17
- ; RV32I-NEXT: add a0, a0, a1
18
- ; RV32I-NEXT: slli a1, a0, 3
19
- ; RV32I-NEXT: sub a0, a1, a0
15
+ ; RV32I-NEXT: sub a0, a0, a1
20
16
; RV32I-NEXT: ret
21
17
;
22
18
; RV64I-LABEL: muli32_0x555:
23
19
; RV64I: # %bb.0:
24
- ; RV64I-NEXT: slli a1, a0, 2
25
- ; RV64I-NEXT: sub a1, a0, a1
26
- ; RV64I-NEXT: slli a0, a0, 4
20
+ ; RV64I-NEXT: slli a1, a0, 6
27
21
; RV64I-NEXT: add a0, a1, a0
28
- ; RV64I-NEXT: slli a1, a0, 2
22
+ ; RV64I-NEXT: slli a1, a0, 3
29
23
; RV64I-NEXT: sub a1, a1, a0
30
24
; RV64I-NEXT: slli a0, a1, 2
31
- ; RV64I-NEXT: add a0, a0, a1
32
- ; RV64I-NEXT: slli a1, a0, 3
33
- ; RV64I-NEXT: sub a0, a1, a0
25
+ ; RV64I-NEXT: sub a0, a0, a1
34
26
; RV64I-NEXT: ret
35
27
%a1 = mul i32 %a , 1365
36
28
ret i32 %a1
@@ -50,16 +42,12 @@ define i64 @muli64_0x555(i64 %a) nounwind {
50
42
;
51
43
; RV64I-LABEL: muli64_0x555:
52
44
; RV64I: # %bb.0:
53
- ; RV64I-NEXT: slli a1, a0, 2
54
- ; RV64I-NEXT: sub a1, a0, a1
55
- ; RV64I-NEXT: slli a0, a0, 4
45
+ ; RV64I-NEXT: slli a1, a0, 6
56
46
; RV64I-NEXT: add a0, a1, a0
57
- ; RV64I-NEXT: slli a1, a0, 2
47
+ ; RV64I-NEXT: slli a1, a0, 3
58
48
; RV64I-NEXT: sub a1, a1, a0
59
49
; RV64I-NEXT: slli a0, a1, 2
60
- ; RV64I-NEXT: add a0, a0, a1
61
- ; RV64I-NEXT: slli a1, a0, 3
62
- ; RV64I-NEXT: sub a0, a1, a0
50
+ ; RV64I-NEXT: sub a0, a0, a1
63
51
; RV64I-NEXT: ret
64
52
%a1 = mul i64 %a , 1365
65
53
ret i64 %a1
@@ -68,26 +56,26 @@ define i64 @muli64_0x555(i64 %a) nounwind {
68
56
define i32 @muli32_0x33333333 (i32 %a ) nounwind {
69
57
; RV32I-LABEL: muli32_0x33333333:
70
58
; RV32I: # %bb.0:
71
- ; RV32I-NEXT: slli a1, a0, 2
72
- ; RV32I-NEXT: sub a1, a1, a0
73
- ; RV32I-NEXT: slli a0, a1, 4
74
- ; RV32I-NEXT: add a0, a0, a1
59
+ ; RV32I-NEXT: slli a1, a0, 16
60
+ ; RV32I-NEXT: add a0, a1, a0
75
61
; RV32I-NEXT: slli a1, a0, 8
76
62
; RV32I-NEXT: add a0, a1, a0
77
- ; RV32I-NEXT: slli a1, a0, 16
63
+ ; RV32I-NEXT: slli a1, a0, 4
78
64
; RV32I-NEXT: add a0, a1, a0
65
+ ; RV32I-NEXT: slli a1, a0, 2
66
+ ; RV32I-NEXT: sub a0, a1, a0
79
67
; RV32I-NEXT: ret
80
68
;
81
69
; RV64I-LABEL: muli32_0x33333333:
82
70
; RV64I: # %bb.0:
83
- ; RV64I-NEXT: slli a1, a0, 2
84
- ; RV64I-NEXT: sub a1, a1, a0
85
- ; RV64I-NEXT: slli a0, a1, 4
86
- ; RV64I-NEXT: add a0, a0, a1
71
+ ; RV64I-NEXT: slli a1, a0, 16
72
+ ; RV64I-NEXT: add a0, a1, a0
87
73
; RV64I-NEXT: slli a1, a0, 8
88
74
; RV64I-NEXT: add a0, a1, a0
89
- ; RV64I-NEXT: slli a1, a0, 16
75
+ ; RV64I-NEXT: slli a1, a0, 4
90
76
; RV64I-NEXT: add a0, a1, a0
77
+ ; RV64I-NEXT: slli a1, a0, 2
78
+ ; RV64I-NEXT: sub a0, a1, a0
91
79
; RV64I-NEXT: ret
92
80
%a1 = mul i32 %a , 858993459
93
81
ret i32 %a1
@@ -108,14 +96,14 @@ define i64 @muli64_0x33333333(i64 %a) nounwind {
108
96
;
109
97
; RV64I-LABEL: muli64_0x33333333:
110
98
; RV64I: # %bb.0:
111
- ; RV64I-NEXT: slli a1, a0, 2
112
- ; RV64I-NEXT: sub a1, a1, a0
113
- ; RV64I-NEXT: slli a0, a1, 4
114
- ; RV64I-NEXT: add a0, a0, a1
99
+ ; RV64I-NEXT: slli a1, a0, 16
100
+ ; RV64I-NEXT: add a0, a1, a0
115
101
; RV64I-NEXT: slli a1, a0, 8
116
102
; RV64I-NEXT: add a0, a1, a0
117
- ; RV64I-NEXT: slli a1, a0, 16
103
+ ; RV64I-NEXT: slli a1, a0, 4
118
104
; RV64I-NEXT: add a0, a1, a0
105
+ ; RV64I-NEXT: slli a1, a0, 2
106
+ ; RV64I-NEXT: sub a0, a1, a0
119
107
; RV64I-NEXT: ret
120
108
%a1 = mul i64 %a , 858993459
121
109
ret i64 %a1
@@ -124,13 +112,13 @@ define i64 @muli64_0x33333333(i64 %a) nounwind {
124
112
define i32 @muli32_0xaaaaaaaa (i32 %a ) nounwind {
125
113
; RV32I-LABEL: muli32_0xaaaaaaaa:
126
114
; RV32I: # %bb.0:
127
- ; RV32I-NEXT: slli a1, a0, 2
128
- ; RV32I-NEXT: add a0, a1, a0
129
- ; RV32I-NEXT: slli a1, a0, 4
115
+ ; RV32I-NEXT: slli a1, a0, 16
130
116
; RV32I-NEXT: add a0, a1, a0
131
117
; RV32I-NEXT: slli a1, a0, 8
132
118
; RV32I-NEXT: add a0, a1, a0
133
- ; RV32I-NEXT: slli a1, a0, 16
119
+ ; RV32I-NEXT: slli a1, a0, 4
120
+ ; RV32I-NEXT: add a0, a1, a0
121
+ ; RV32I-NEXT: slli a1, a0, 2
134
122
; RV32I-NEXT: add a0, a1, a0
135
123
; RV32I-NEXT: slli a0, a0, 1
136
124
; RV32I-NEXT: ret
@@ -265,32 +253,32 @@ define i64 @muli64_0x0fffffff(i64 %a) nounwind {
265
253
define i32 @muli32_0xf0f0f0f0f0 (i32 %a ) nounwind {
266
254
; RV32I-LABEL: muli32_0xf0f0f0f0f0:
267
255
; RV32I: # %bb.0:
268
- ; RV32I-NEXT: slli a1, a0, 2
269
- ; RV32I-NEXT: sub a1, a1, a0
270
- ; RV32I-NEXT: slli a0, a1, 2
271
- ; RV32I-NEXT: add a0, a0, a1
272
- ; RV32I-NEXT: slli a1, a0, 8
273
- ; RV32I-NEXT: add a0, a1, a0
274
256
; RV32I-NEXT: slli a1, a0, 16
275
257
; RV32I-NEXT: add a0, a1, a0
258
+ ; RV32I-NEXT: slli a1, a0, 8
259
+ ; RV32I-NEXT: add a0, a1, a0
260
+ ; RV32I-NEXT: slli a1, a0, 4
261
+ ; RV32I-NEXT: sub a0, a1, a0
276
262
; RV32I-NEXT: slli a0, a0, 4
277
263
; RV32I-NEXT: ret
278
264
;
279
265
; RV64I-LABEL: muli32_0xf0f0f0f0f0:
280
266
; RV64I: # %bb.0:
281
267
; RV64I-NEXT: slli a1, a0, 4
282
- ; RV64I-NEXT: slli a2, a0, 8
283
- ; RV64I-NEXT: slli a3, a0, 12
284
- ; RV64I-NEXT: slli a4, a0, 16
285
- ; RV64I-NEXT: sub a2, a2, a1
286
- ; RV64I-NEXT: slli a1, a0, 20
287
- ; RV64I-NEXT: sub a3, a3, a4
288
- ; RV64I-NEXT: slli a4, a0, 24
289
- ; RV64I-NEXT: sub a1, a1, a4
290
- ; RV64I-NEXT: slli a0, a0, 28
268
+ ; RV64I-NEXT: slli a2, a0, 12
269
+ ; RV64I-NEXT: slli a3, a0, 16
270
+ ; RV64I-NEXT: sub a1, a0, a1
291
271
; RV64I-NEXT: sub a2, a2, a3
272
+ ; RV64I-NEXT: add a1, a1, a2
273
+ ; RV64I-NEXT: slli a0, a0, 24
292
274
; RV64I-NEXT: add a0, a1, a0
293
- ; RV64I-NEXT: sub a0, a2, a0
275
+ ; RV64I-NEXT: slli a1, a0, 16
276
+ ; RV64I-NEXT: add a0, a1, a0
277
+ ; RV64I-NEXT: slli a1, a0, 12
278
+ ; RV64I-NEXT: sub a1, a1, a0
279
+ ; RV64I-NEXT: slli a0, a1, 8
280
+ ; RV64I-NEXT: add a0, a0, a1
281
+ ; RV64I-NEXT: slli a0, a0, 4
294
282
; RV64I-NEXT: ret
295
283
%a1 = mul i32 %a , -252645136
296
284
ret i32 %a1
@@ -312,18 +300,20 @@ define i64 @muli64_0xf0f0f0f0f0(i64 %a) nounwind {
312
300
; RV64I-LABEL: muli64_0xf0f0f0f0f0:
313
301
; RV64I: # %bb.0:
314
302
; RV64I-NEXT: slli a1, a0, 4
315
- ; RV64I-NEXT: slli a2, a0, 8
316
- ; RV64I-NEXT: slli a3, a0, 12
317
- ; RV64I-NEXT: slli a4, a0, 16
318
- ; RV64I-NEXT: sub a2, a2, a1
319
- ; RV64I-NEXT: slli a1, a0, 20
320
- ; RV64I-NEXT: sub a3, a3, a4
321
- ; RV64I-NEXT: slli a4, a0, 24
322
- ; RV64I-NEXT: sub a1, a1, a4
323
- ; RV64I-NEXT: slli a0, a0, 28
303
+ ; RV64I-NEXT: slli a2, a0, 12
304
+ ; RV64I-NEXT: slli a3, a0, 16
305
+ ; RV64I-NEXT: sub a1, a0, a1
324
306
; RV64I-NEXT: sub a2, a2, a3
307
+ ; RV64I-NEXT: add a1, a1, a2
308
+ ; RV64I-NEXT: slli a0, a0, 24
309
+ ; RV64I-NEXT: add a0, a1, a0
310
+ ; RV64I-NEXT: slli a1, a0, 16
325
311
; RV64I-NEXT: add a0, a1, a0
326
- ; RV64I-NEXT: sub a0, a2, a0
312
+ ; RV64I-NEXT: slli a1, a0, 12
313
+ ; RV64I-NEXT: sub a1, a1, a0
314
+ ; RV64I-NEXT: slli a0, a1, 8
315
+ ; RV64I-NEXT: add a0, a0, a1
316
+ ; RV64I-NEXT: slli a0, a0, 4
327
317
; RV64I-NEXT: ret
328
318
%a1 = mul i64 %a , -252645136
329
319
ret i64 %a1
@@ -336,10 +326,10 @@ define i32 @muli32_0xf7f7f7f7(i32 %a) nounwind {
336
326
; RV32I-NEXT: add a1, a0, a1
337
327
; RV32I-NEXT: slli a0, a0, 8
338
328
; RV32I-NEXT: sub a0, a0, a1
339
- ; RV32I-NEXT: slli a1, a0, 8
340
- ; RV32I-NEXT: add a0, a1, a0
341
329
; RV32I-NEXT: slli a1, a0, 16
342
330
; RV32I-NEXT: add a0, a1, a0
331
+ ; RV32I-NEXT: slli a1, a0, 8
332
+ ; RV32I-NEXT: add a0, a1, a0
343
333
; RV32I-NEXT: ret
344
334
;
345
335
; RV64I-LABEL: muli32_0xf7f7f7f7:
0 commit comments