[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / RISCV / rv32zba.ll
blob6ee346d2029c243165a1004f190181c99287fb8c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s -check-prefix=RV32I
4 ; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-b -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s -check-prefix=RV32B
6 ; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-zba -verify-machineinstrs < %s \
7 ; RUN:   | FileCheck %s -check-prefix=RV32ZBA
9 define signext i16 @sh1add(i64 %0, i16* %1) {
10 ; RV32I-LABEL: sh1add:
11 ; RV32I:       # %bb.0:
12 ; RV32I-NEXT:    slli a0, a0, 1
13 ; RV32I-NEXT:    add a0, a2, a0
14 ; RV32I-NEXT:    lh a0, 0(a0)
15 ; RV32I-NEXT:    ret
17 ; RV32B-LABEL: sh1add:
18 ; RV32B:       # %bb.0:
19 ; RV32B-NEXT:    sh1add a0, a0, a2
20 ; RV32B-NEXT:    lh a0, 0(a0)
21 ; RV32B-NEXT:    ret
23 ; RV32ZBA-LABEL: sh1add:
24 ; RV32ZBA:       # %bb.0:
25 ; RV32ZBA-NEXT:    sh1add a0, a0, a2
26 ; RV32ZBA-NEXT:    lh a0, 0(a0)
27 ; RV32ZBA-NEXT:    ret
28   %3 = getelementptr inbounds i16, i16* %1, i64 %0
29   %4 = load i16, i16* %3
30   ret i16 %4
33 define i32 @sh2add(i64 %0, i32* %1) {
34 ; RV32I-LABEL: sh2add:
35 ; RV32I:       # %bb.0:
36 ; RV32I-NEXT:    slli a0, a0, 2
37 ; RV32I-NEXT:    add a0, a2, a0
38 ; RV32I-NEXT:    lw a0, 0(a0)
39 ; RV32I-NEXT:    ret
41 ; RV32B-LABEL: sh2add:
42 ; RV32B:       # %bb.0:
43 ; RV32B-NEXT:    sh2add a0, a0, a2
44 ; RV32B-NEXT:    lw a0, 0(a0)
45 ; RV32B-NEXT:    ret
47 ; RV32ZBA-LABEL: sh2add:
48 ; RV32ZBA:       # %bb.0:
49 ; RV32ZBA-NEXT:    sh2add a0, a0, a2
50 ; RV32ZBA-NEXT:    lw a0, 0(a0)
51 ; RV32ZBA-NEXT:    ret
52   %3 = getelementptr inbounds i32, i32* %1, i64 %0
53   %4 = load i32, i32* %3
54   ret i32 %4
57 define i64 @sh3add(i64 %0, i64* %1) {
58 ; RV32I-LABEL: sh3add:
59 ; RV32I:       # %bb.0:
60 ; RV32I-NEXT:    slli a0, a0, 3
61 ; RV32I-NEXT:    add a1, a2, a0
62 ; RV32I-NEXT:    lw a0, 0(a1)
63 ; RV32I-NEXT:    lw a1, 4(a1)
64 ; RV32I-NEXT:    ret
66 ; RV32B-LABEL: sh3add:
67 ; RV32B:       # %bb.0:
68 ; RV32B-NEXT:    sh3add a1, a0, a2
69 ; RV32B-NEXT:    lw a0, 0(a1)
70 ; RV32B-NEXT:    lw a1, 4(a1)
71 ; RV32B-NEXT:    ret
73 ; RV32ZBA-LABEL: sh3add:
74 ; RV32ZBA:       # %bb.0:
75 ; RV32ZBA-NEXT:    sh3add a1, a0, a2
76 ; RV32ZBA-NEXT:    lw a0, 0(a1)
77 ; RV32ZBA-NEXT:    lw a1, 4(a1)
78 ; RV32ZBA-NEXT:    ret
79   %3 = getelementptr inbounds i64, i64* %1, i64 %0
80   %4 = load i64, i64* %3
81   ret i64 %4
84 define i32 @addmul6(i32 %a, i32 %b) {
85 ; RV32I-LABEL: addmul6:
86 ; RV32I:       # %bb.0:
87 ; RV32I-NEXT:    addi a2, zero, 6
88 ; RV32I-NEXT:    mul a0, a0, a2
89 ; RV32I-NEXT:    add a0, a0, a1
90 ; RV32I-NEXT:    ret
92 ; RV32B-LABEL: addmul6:
93 ; RV32B:       # %bb.0:
94 ; RV32B-NEXT:    sh1add a0, a0, a0
95 ; RV32B-NEXT:    sh1add a0, a0, a1
96 ; RV32B-NEXT:    ret
98 ; RV32ZBA-LABEL: addmul6:
99 ; RV32ZBA:       # %bb.0:
100 ; RV32ZBA-NEXT:    sh1add a0, a0, a0
101 ; RV32ZBA-NEXT:    sh1add a0, a0, a1
102 ; RV32ZBA-NEXT:    ret
103   %c = mul i32 %a, 6
104   %d = add i32 %c, %b
105   ret i32 %d
108 define i32 @addmul10(i32 %a, i32 %b) {
109 ; RV32I-LABEL: addmul10:
110 ; RV32I:       # %bb.0:
111 ; RV32I-NEXT:    addi a2, zero, 10
112 ; RV32I-NEXT:    mul a0, a0, a2
113 ; RV32I-NEXT:    add a0, a0, a1
114 ; RV32I-NEXT:    ret
116 ; RV32B-LABEL: addmul10:
117 ; RV32B:       # %bb.0:
118 ; RV32B-NEXT:    sh2add a0, a0, a0
119 ; RV32B-NEXT:    sh1add a0, a0, a1
120 ; RV32B-NEXT:    ret
122 ; RV32ZBA-LABEL: addmul10:
123 ; RV32ZBA:       # %bb.0:
124 ; RV32ZBA-NEXT:    sh2add a0, a0, a0
125 ; RV32ZBA-NEXT:    sh1add a0, a0, a1
126 ; RV32ZBA-NEXT:    ret
127   %c = mul i32 %a, 10
128   %d = add i32 %c, %b
129   ret i32 %d
132 define i32 @addmul12(i32 %a, i32 %b) {
133 ; RV32I-LABEL: addmul12:
134 ; RV32I:       # %bb.0:
135 ; RV32I-NEXT:    addi a2, zero, 12
136 ; RV32I-NEXT:    mul a0, a0, a2
137 ; RV32I-NEXT:    add a0, a0, a1
138 ; RV32I-NEXT:    ret
140 ; RV32B-LABEL: addmul12:
141 ; RV32B:       # %bb.0:
142 ; RV32B-NEXT:    sh1add a0, a0, a0
143 ; RV32B-NEXT:    sh2add a0, a0, a1
144 ; RV32B-NEXT:    ret
146 ; RV32ZBA-LABEL: addmul12:
147 ; RV32ZBA:       # %bb.0:
148 ; RV32ZBA-NEXT:    sh1add a0, a0, a0
149 ; RV32ZBA-NEXT:    sh2add a0, a0, a1
150 ; RV32ZBA-NEXT:    ret
151   %c = mul i32 %a, 12
152   %d = add i32 %c, %b
153   ret i32 %d
156 define i32 @addmul18(i32 %a, i32 %b) {
157 ; RV32I-LABEL: addmul18:
158 ; RV32I:       # %bb.0:
159 ; RV32I-NEXT:    addi a2, zero, 18
160 ; RV32I-NEXT:    mul a0, a0, a2
161 ; RV32I-NEXT:    add a0, a0, a1
162 ; RV32I-NEXT:    ret
164 ; RV32B-LABEL: addmul18:
165 ; RV32B:       # %bb.0:
166 ; RV32B-NEXT:    sh3add a0, a0, a0
167 ; RV32B-NEXT:    sh1add a0, a0, a1
168 ; RV32B-NEXT:    ret
170 ; RV32ZBA-LABEL: addmul18:
171 ; RV32ZBA:       # %bb.0:
172 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
173 ; RV32ZBA-NEXT:    sh1add a0, a0, a1
174 ; RV32ZBA-NEXT:    ret
175   %c = mul i32 %a, 18
176   %d = add i32 %c, %b
177   ret i32 %d
180 define i32 @addmul20(i32 %a, i32 %b) {
181 ; RV32I-LABEL: addmul20:
182 ; RV32I:       # %bb.0:
183 ; RV32I-NEXT:    addi a2, zero, 20
184 ; RV32I-NEXT:    mul a0, a0, a2
185 ; RV32I-NEXT:    add a0, a0, a1
186 ; RV32I-NEXT:    ret
188 ; RV32B-LABEL: addmul20:
189 ; RV32B:       # %bb.0:
190 ; RV32B-NEXT:    sh2add a0, a0, a0
191 ; RV32B-NEXT:    sh2add a0, a0, a1
192 ; RV32B-NEXT:    ret
194 ; RV32ZBA-LABEL: addmul20:
195 ; RV32ZBA:       # %bb.0:
196 ; RV32ZBA-NEXT:    sh2add a0, a0, a0
197 ; RV32ZBA-NEXT:    sh2add a0, a0, a1
198 ; RV32ZBA-NEXT:    ret
199   %c = mul i32 %a, 20
200   %d = add i32 %c, %b
201   ret i32 %d
204 define i32 @addmul24(i32 %a, i32 %b) {
205 ; RV32I-LABEL: addmul24:
206 ; RV32I:       # %bb.0:
207 ; RV32I-NEXT:    addi a2, zero, 24
208 ; RV32I-NEXT:    mul a0, a0, a2
209 ; RV32I-NEXT:    add a0, a0, a1
210 ; RV32I-NEXT:    ret
212 ; RV32B-LABEL: addmul24:
213 ; RV32B:       # %bb.0:
214 ; RV32B-NEXT:    sh1add a0, a0, a0
215 ; RV32B-NEXT:    sh3add a0, a0, a1
216 ; RV32B-NEXT:    ret
218 ; RV32ZBA-LABEL: addmul24:
219 ; RV32ZBA:       # %bb.0:
220 ; RV32ZBA-NEXT:    sh1add a0, a0, a0
221 ; RV32ZBA-NEXT:    sh3add a0, a0, a1
222 ; RV32ZBA-NEXT:    ret
223   %c = mul i32 %a, 24
224   %d = add i32 %c, %b
225   ret i32 %d
228 define i32 @addmul36(i32 %a, i32 %b) {
229 ; RV32I-LABEL: addmul36:
230 ; RV32I:       # %bb.0:
231 ; RV32I-NEXT:    addi a2, zero, 36
232 ; RV32I-NEXT:    mul a0, a0, a2
233 ; RV32I-NEXT:    add a0, a0, a1
234 ; RV32I-NEXT:    ret
236 ; RV32B-LABEL: addmul36:
237 ; RV32B:       # %bb.0:
238 ; RV32B-NEXT:    sh3add a0, a0, a0
239 ; RV32B-NEXT:    sh2add a0, a0, a1
240 ; RV32B-NEXT:    ret
242 ; RV32ZBA-LABEL: addmul36:
243 ; RV32ZBA:       # %bb.0:
244 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
245 ; RV32ZBA-NEXT:    sh2add a0, a0, a1
246 ; RV32ZBA-NEXT:    ret
247   %c = mul i32 %a, 36
248   %d = add i32 %c, %b
249   ret i32 %d
252 define i32 @addmul40(i32 %a, i32 %b) {
253 ; RV32I-LABEL: addmul40:
254 ; RV32I:       # %bb.0:
255 ; RV32I-NEXT:    addi a2, zero, 40
256 ; RV32I-NEXT:    mul a0, a0, a2
257 ; RV32I-NEXT:    add a0, a0, a1
258 ; RV32I-NEXT:    ret
260 ; RV32B-LABEL: addmul40:
261 ; RV32B:       # %bb.0:
262 ; RV32B-NEXT:    sh2add a0, a0, a0
263 ; RV32B-NEXT:    sh3add a0, a0, a1
264 ; RV32B-NEXT:    ret
266 ; RV32ZBA-LABEL: addmul40:
267 ; RV32ZBA:       # %bb.0:
268 ; RV32ZBA-NEXT:    sh2add a0, a0, a0
269 ; RV32ZBA-NEXT:    sh3add a0, a0, a1
270 ; RV32ZBA-NEXT:    ret
271   %c = mul i32 %a, 40
272   %d = add i32 %c, %b
273   ret i32 %d
276 define i32 @addmul72(i32 %a, i32 %b) {
277 ; RV32I-LABEL: addmul72:
278 ; RV32I:       # %bb.0:
279 ; RV32I-NEXT:    addi a2, zero, 72
280 ; RV32I-NEXT:    mul a0, a0, a2
281 ; RV32I-NEXT:    add a0, a0, a1
282 ; RV32I-NEXT:    ret
284 ; RV32B-LABEL: addmul72:
285 ; RV32B:       # %bb.0:
286 ; RV32B-NEXT:    sh3add a0, a0, a0
287 ; RV32B-NEXT:    sh3add a0, a0, a1
288 ; RV32B-NEXT:    ret
290 ; RV32ZBA-LABEL: addmul72:
291 ; RV32ZBA:       # %bb.0:
292 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
293 ; RV32ZBA-NEXT:    sh3add a0, a0, a1
294 ; RV32ZBA-NEXT:    ret
295   %c = mul i32 %a, 72
296   %d = add i32 %c, %b
297   ret i32 %d
300 define i32 @mul96(i32 %a) {
301 ; RV32I-LABEL: mul96:
302 ; RV32I:       # %bb.0:
303 ; RV32I-NEXT:    addi a1, zero, 96
304 ; RV32I-NEXT:    mul a0, a0, a1
305 ; RV32I-NEXT:    ret
307 ; RV32B-LABEL: mul96:
308 ; RV32B:       # %bb.0:
309 ; RV32B-NEXT:    sh1add a0, a0, a0
310 ; RV32B-NEXT:    slli a0, a0, 5
311 ; RV32B-NEXT:    ret
313 ; RV32ZBA-LABEL: mul96:
314 ; RV32ZBA:       # %bb.0:
315 ; RV32ZBA-NEXT:    sh1add a0, a0, a0
316 ; RV32ZBA-NEXT:    slli a0, a0, 5
317 ; RV32ZBA-NEXT:    ret
318   %c = mul i32 %a, 96
319   ret i32 %c
322 define i32 @mul160(i32 %a) {
323 ; RV32I-LABEL: mul160:
324 ; RV32I:       # %bb.0:
325 ; RV32I-NEXT:    addi a1, zero, 160
326 ; RV32I-NEXT:    mul a0, a0, a1
327 ; RV32I-NEXT:    ret
329 ; RV32B-LABEL: mul160:
330 ; RV32B:       # %bb.0:
331 ; RV32B-NEXT:    sh2add a0, a0, a0
332 ; RV32B-NEXT:    slli a0, a0, 5
333 ; RV32B-NEXT:    ret
335 ; RV32ZBA-LABEL: mul160:
336 ; RV32ZBA:       # %bb.0:
337 ; RV32ZBA-NEXT:    sh2add a0, a0, a0
338 ; RV32ZBA-NEXT:    slli a0, a0, 5
339 ; RV32ZBA-NEXT:    ret
340   %c = mul i32 %a, 160
341   ret i32 %c
344 define i32 @mul288(i32 %a) {
345 ; RV32I-LABEL: mul288:
346 ; RV32I:       # %bb.0:
347 ; RV32I-NEXT:    addi a1, zero, 288
348 ; RV32I-NEXT:    mul a0, a0, a1
349 ; RV32I-NEXT:    ret
351 ; RV32B-LABEL: mul288:
352 ; RV32B:       # %bb.0:
353 ; RV32B-NEXT:    sh3add a0, a0, a0
354 ; RV32B-NEXT:    slli a0, a0, 5
355 ; RV32B-NEXT:    ret
357 ; RV32ZBA-LABEL: mul288:
358 ; RV32ZBA:       # %bb.0:
359 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
360 ; RV32ZBA-NEXT:    slli a0, a0, 5
361 ; RV32ZBA-NEXT:    ret
362   %c = mul i32 %a, 288
363   ret i32 %c
366 define i32 @mul258(i32 %a) {
367 ; RV32I-LABEL: mul258:
368 ; RV32I:       # %bb.0:
369 ; RV32I-NEXT:    addi a1, zero, 258
370 ; RV32I-NEXT:    mul a0, a0, a1
371 ; RV32I-NEXT:    ret
373 ; RV32B-LABEL: mul258:
374 ; RV32B:       # %bb.0:
375 ; RV32B-NEXT:    addi a1, zero, 258
376 ; RV32B-NEXT:    mul a0, a0, a1
377 ; RV32B-NEXT:    ret
379 ; RV32ZBA-LABEL: mul258:
380 ; RV32ZBA:       # %bb.0:
381 ; RV32ZBA-NEXT:    addi a1, zero, 258
382 ; RV32ZBA-NEXT:    mul a0, a0, a1
383 ; RV32ZBA-NEXT:    ret
384   %c = mul i32 %a, 258
385   ret i32 %c
388 define i32 @mul260(i32 %a) {
389 ; RV32I-LABEL: mul260:
390 ; RV32I:       # %bb.0:
391 ; RV32I-NEXT:    addi a1, zero, 260
392 ; RV32I-NEXT:    mul a0, a0, a1
393 ; RV32I-NEXT:    ret
395 ; RV32B-LABEL: mul260:
396 ; RV32B:       # %bb.0:
397 ; RV32B-NEXT:    addi a1, zero, 260
398 ; RV32B-NEXT:    mul a0, a0, a1
399 ; RV32B-NEXT:    ret
401 ; RV32ZBA-LABEL: mul260:
402 ; RV32ZBA:       # %bb.0:
403 ; RV32ZBA-NEXT:    addi a1, zero, 260
404 ; RV32ZBA-NEXT:    mul a0, a0, a1
405 ; RV32ZBA-NEXT:    ret
406   %c = mul i32 %a, 260
407   ret i32 %c
410 define i32 @mul264(i32 %a) {
411 ; RV32I-LABEL: mul264:
412 ; RV32I:       # %bb.0:
413 ; RV32I-NEXT:    addi a1, zero, 264
414 ; RV32I-NEXT:    mul a0, a0, a1
415 ; RV32I-NEXT:    ret
417 ; RV32B-LABEL: mul264:
418 ; RV32B:       # %bb.0:
419 ; RV32B-NEXT:    addi a1, zero, 264
420 ; RV32B-NEXT:    mul a0, a0, a1
421 ; RV32B-NEXT:    ret
423 ; RV32ZBA-LABEL: mul264:
424 ; RV32ZBA:       # %bb.0:
425 ; RV32ZBA-NEXT:    addi a1, zero, 264
426 ; RV32ZBA-NEXT:    mul a0, a0, a1
427 ; RV32ZBA-NEXT:    ret
428   %c = mul i32 %a, 264
429   ret i32 %c
432 define i32 @mul11(i32 %a) {
433 ; RV32I-LABEL: mul11:
434 ; RV32I:       # %bb.0:
435 ; RV32I-NEXT:    addi a1, zero, 11
436 ; RV32I-NEXT:    mul a0, a0, a1
437 ; RV32I-NEXT:    ret
439 ; RV32B-LABEL: mul11:
440 ; RV32B:       # %bb.0:
441 ; RV32B-NEXT:    sh2add a1, a0, a0
442 ; RV32B-NEXT:    sh1add a0, a1, a0
443 ; RV32B-NEXT:    ret
445 ; RV32ZBA-LABEL: mul11:
446 ; RV32ZBA:       # %bb.0:
447 ; RV32ZBA-NEXT:    sh2add a1, a0, a0
448 ; RV32ZBA-NEXT:    sh1add a0, a1, a0
449 ; RV32ZBA-NEXT:    ret
450   %c = mul i32 %a, 11
451   ret i32 %c
454 define i32 @mul19(i32 %a) {
455 ; RV32I-LABEL: mul19:
456 ; RV32I:       # %bb.0:
457 ; RV32I-NEXT:    addi a1, zero, 19
458 ; RV32I-NEXT:    mul a0, a0, a1
459 ; RV32I-NEXT:    ret
461 ; RV32B-LABEL: mul19:
462 ; RV32B:       # %bb.0:
463 ; RV32B-NEXT:    sh3add a1, a0, a0
464 ; RV32B-NEXT:    sh1add a0, a1, a0
465 ; RV32B-NEXT:    ret
467 ; RV32ZBA-LABEL: mul19:
468 ; RV32ZBA:       # %bb.0:
469 ; RV32ZBA-NEXT:    sh3add a1, a0, a0
470 ; RV32ZBA-NEXT:    sh1add a0, a1, a0
471 ; RV32ZBA-NEXT:    ret
472   %c = mul i32 %a, 19
473   ret i32 %c
476 define i32 @mul13(i32 %a) {
477 ; RV32I-LABEL: mul13:
478 ; RV32I:       # %bb.0:
479 ; RV32I-NEXT:    addi a1, zero, 13
480 ; RV32I-NEXT:    mul a0, a0, a1
481 ; RV32I-NEXT:    ret
483 ; RV32B-LABEL: mul13:
484 ; RV32B:       # %bb.0:
485 ; RV32B-NEXT:    sh1add a1, a0, a0
486 ; RV32B-NEXT:    sh2add a0, a1, a0
487 ; RV32B-NEXT:    ret
489 ; RV32ZBA-LABEL: mul13:
490 ; RV32ZBA:       # %bb.0:
491 ; RV32ZBA-NEXT:    sh1add a1, a0, a0
492 ; RV32ZBA-NEXT:    sh2add a0, a1, a0
493 ; RV32ZBA-NEXT:    ret
494   %c = mul i32 %a, 13
495   ret i32 %c
498 define i32 @mul21(i32 %a) {
499 ; RV32I-LABEL: mul21:
500 ; RV32I:       # %bb.0:
501 ; RV32I-NEXT:    addi a1, zero, 21
502 ; RV32I-NEXT:    mul a0, a0, a1
503 ; RV32I-NEXT:    ret
505 ; RV32B-LABEL: mul21:
506 ; RV32B:       # %bb.0:
507 ; RV32B-NEXT:    sh2add a1, a0, a0
508 ; RV32B-NEXT:    sh2add a0, a1, a0
509 ; RV32B-NEXT:    ret
511 ; RV32ZBA-LABEL: mul21:
512 ; RV32ZBA:       # %bb.0:
513 ; RV32ZBA-NEXT:    sh2add a1, a0, a0
514 ; RV32ZBA-NEXT:    sh2add a0, a1, a0
515 ; RV32ZBA-NEXT:    ret
516   %c = mul i32 %a, 21
517   ret i32 %c
520 define i32 @mul37(i32 %a) {
521 ; RV32I-LABEL: mul37:
522 ; RV32I:       # %bb.0:
523 ; RV32I-NEXT:    addi a1, zero, 37
524 ; RV32I-NEXT:    mul a0, a0, a1
525 ; RV32I-NEXT:    ret
527 ; RV32B-LABEL: mul37:
528 ; RV32B:       # %bb.0:
529 ; RV32B-NEXT:    sh3add a1, a0, a0
530 ; RV32B-NEXT:    sh2add a0, a1, a0
531 ; RV32B-NEXT:    ret
533 ; RV32ZBA-LABEL: mul37:
534 ; RV32ZBA:       # %bb.0:
535 ; RV32ZBA-NEXT:    sh3add a1, a0, a0
536 ; RV32ZBA-NEXT:    sh2add a0, a1, a0
537 ; RV32ZBA-NEXT:    ret
538   %c = mul i32 %a, 37
539   ret i32 %c
542 define i32 @mul25(i32 %a) {
543 ; RV32I-LABEL: mul25:
544 ; RV32I:       # %bb.0:
545 ; RV32I-NEXT:    addi a1, zero, 25
546 ; RV32I-NEXT:    mul a0, a0, a1
547 ; RV32I-NEXT:    ret
549 ; RV32B-LABEL: mul25:
550 ; RV32B:       # %bb.0:
551 ; RV32B-NEXT:    sh1add a1, a0, a0
552 ; RV32B-NEXT:    sh3add a0, a1, a0
553 ; RV32B-NEXT:    ret
555 ; RV32ZBA-LABEL: mul25:
556 ; RV32ZBA:       # %bb.0:
557 ; RV32ZBA-NEXT:    sh1add a1, a0, a0
558 ; RV32ZBA-NEXT:    sh3add a0, a1, a0
559 ; RV32ZBA-NEXT:    ret
560   %c = mul i32 %a, 25
561   ret i32 %c
564 define i32 @mul41(i32 %a) {
565 ; RV32I-LABEL: mul41:
566 ; RV32I:       # %bb.0:
567 ; RV32I-NEXT:    addi a1, zero, 41
568 ; RV32I-NEXT:    mul a0, a0, a1
569 ; RV32I-NEXT:    ret
571 ; RV32B-LABEL: mul41:
572 ; RV32B:       # %bb.0:
573 ; RV32B-NEXT:    sh2add a1, a0, a0
574 ; RV32B-NEXT:    sh3add a0, a1, a0
575 ; RV32B-NEXT:    ret
577 ; RV32ZBA-LABEL: mul41:
578 ; RV32ZBA:       # %bb.0:
579 ; RV32ZBA-NEXT:    sh2add a1, a0, a0
580 ; RV32ZBA-NEXT:    sh3add a0, a1, a0
581 ; RV32ZBA-NEXT:    ret
582   %c = mul i32 %a, 41
583   ret i32 %c
586 define i32 @mul73(i32 %a) {
587 ; RV32I-LABEL: mul73:
588 ; RV32I:       # %bb.0:
589 ; RV32I-NEXT:    addi a1, zero, 73
590 ; RV32I-NEXT:    mul a0, a0, a1
591 ; RV32I-NEXT:    ret
593 ; RV32B-LABEL: mul73:
594 ; RV32B:       # %bb.0:
595 ; RV32B-NEXT:    sh3add a1, a0, a0
596 ; RV32B-NEXT:    sh3add a0, a1, a0
597 ; RV32B-NEXT:    ret
599 ; RV32ZBA-LABEL: mul73:
600 ; RV32ZBA:       # %bb.0:
601 ; RV32ZBA-NEXT:    sh3add a1, a0, a0
602 ; RV32ZBA-NEXT:    sh3add a0, a1, a0
603 ; RV32ZBA-NEXT:    ret
604   %c = mul i32 %a, 73
605   ret i32 %c
608 define i32 @mul27(i32 %a) {
609 ; RV32I-LABEL: mul27:
610 ; RV32I:       # %bb.0:
611 ; RV32I-NEXT:    addi a1, zero, 27
612 ; RV32I-NEXT:    mul a0, a0, a1
613 ; RV32I-NEXT:    ret
615 ; RV32B-LABEL: mul27:
616 ; RV32B:       # %bb.0:
617 ; RV32B-NEXT:    sh3add a0, a0, a0
618 ; RV32B-NEXT:    sh1add a0, a0, a0
619 ; RV32B-NEXT:    ret
621 ; RV32ZBA-LABEL: mul27:
622 ; RV32ZBA:       # %bb.0:
623 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
624 ; RV32ZBA-NEXT:    sh1add a0, a0, a0
625 ; RV32ZBA-NEXT:    ret
626   %c = mul i32 %a, 27
627   ret i32 %c
630 define i32 @mul45(i32 %a) {
631 ; RV32I-LABEL: mul45:
632 ; RV32I:       # %bb.0:
633 ; RV32I-NEXT:    addi a1, zero, 45
634 ; RV32I-NEXT:    mul a0, a0, a1
635 ; RV32I-NEXT:    ret
637 ; RV32B-LABEL: mul45:
638 ; RV32B:       # %bb.0:
639 ; RV32B-NEXT:    sh3add a0, a0, a0
640 ; RV32B-NEXT:    sh2add a0, a0, a0
641 ; RV32B-NEXT:    ret
643 ; RV32ZBA-LABEL: mul45:
644 ; RV32ZBA:       # %bb.0:
645 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
646 ; RV32ZBA-NEXT:    sh2add a0, a0, a0
647 ; RV32ZBA-NEXT:    ret
648   %c = mul i32 %a, 45
649   ret i32 %c
652 define i32 @mul81(i32 %a) {
653 ; RV32I-LABEL: mul81:
654 ; RV32I:       # %bb.0:
655 ; RV32I-NEXT:    addi a1, zero, 81
656 ; RV32I-NEXT:    mul a0, a0, a1
657 ; RV32I-NEXT:    ret
659 ; RV32B-LABEL: mul81:
660 ; RV32B:       # %bb.0:
661 ; RV32B-NEXT:    sh3add a0, a0, a0
662 ; RV32B-NEXT:    sh3add a0, a0, a0
663 ; RV32B-NEXT:    ret
665 ; RV32ZBA-LABEL: mul81:
666 ; RV32ZBA:       # %bb.0:
667 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
668 ; RV32ZBA-NEXT:    sh3add a0, a0, a0
669 ; RV32ZBA-NEXT:    ret
670   %c = mul i32 %a, 81
671   ret i32 %c
674 define i32 @mul4098(i32 %a) {
675 ; RV32I-LABEL: mul4098:
676 ; RV32I:       # %bb.0:
677 ; RV32I-NEXT:    lui a1, 1
678 ; RV32I-NEXT:    addi a1, a1, 2
679 ; RV32I-NEXT:    mul a0, a0, a1
680 ; RV32I-NEXT:    ret
682 ; RV32B-LABEL: mul4098:
683 ; RV32B:       # %bb.0:
684 ; RV32B-NEXT:    slli a1, a0, 12
685 ; RV32B-NEXT:    sh1add a0, a0, a1
686 ; RV32B-NEXT:    ret
688 ; RV32ZBA-LABEL: mul4098:
689 ; RV32ZBA:       # %bb.0:
690 ; RV32ZBA-NEXT:    slli a1, a0, 12
691 ; RV32ZBA-NEXT:    sh1add a0, a0, a1
692 ; RV32ZBA-NEXT:    ret
693   %c = mul i32 %a, 4098
694   ret i32 %c
697 define i32 @mul4100(i32 %a) {
698 ; RV32I-LABEL: mul4100:
699 ; RV32I:       # %bb.0:
700 ; RV32I-NEXT:    lui a1, 1
701 ; RV32I-NEXT:    addi a1, a1, 4
702 ; RV32I-NEXT:    mul a0, a0, a1
703 ; RV32I-NEXT:    ret
705 ; RV32B-LABEL: mul4100:
706 ; RV32B:       # %bb.0:
707 ; RV32B-NEXT:    slli a1, a0, 12
708 ; RV32B-NEXT:    sh2add a0, a0, a1
709 ; RV32B-NEXT:    ret
711 ; RV32ZBA-LABEL: mul4100:
712 ; RV32ZBA:       # %bb.0:
713 ; RV32ZBA-NEXT:    slli a1, a0, 12
714 ; RV32ZBA-NEXT:    sh2add a0, a0, a1
715 ; RV32ZBA-NEXT:    ret
716   %c = mul i32 %a, 4100
717   ret i32 %c
720 define i32 @mul4104(i32 %a) {
721 ; RV32I-LABEL: mul4104:
722 ; RV32I:       # %bb.0:
723 ; RV32I-NEXT:    lui a1, 1
724 ; RV32I-NEXT:    addi a1, a1, 8
725 ; RV32I-NEXT:    mul a0, a0, a1
726 ; RV32I-NEXT:    ret
728 ; RV32B-LABEL: mul4104:
729 ; RV32B:       # %bb.0:
730 ; RV32B-NEXT:    slli a1, a0, 12
731 ; RV32B-NEXT:    sh3add a0, a0, a1
732 ; RV32B-NEXT:    ret
734 ; RV32ZBA-LABEL: mul4104:
735 ; RV32ZBA:       # %bb.0:
736 ; RV32ZBA-NEXT:    slli a1, a0, 12
737 ; RV32ZBA-NEXT:    sh3add a0, a0, a1
738 ; RV32ZBA-NEXT:    ret
739   %c = mul i32 %a, 4104
740   ret i32 %c
743 define i32 @add4104(i32 %a) {
744 ; RV32I-LABEL: add4104:
745 ; RV32I:       # %bb.0:
746 ; RV32I-NEXT:    lui a1, 1
747 ; RV32I-NEXT:    addi a1, a1, 8
748 ; RV32I-NEXT:    add a0, a0, a1
749 ; RV32I-NEXT:    ret
751 ; RV32B-LABEL: add4104:
752 ; RV32B:       # %bb.0:
753 ; RV32B-NEXT:    addi a1, zero, 1026
754 ; RV32B-NEXT:    sh2add a0, a1, a0
755 ; RV32B-NEXT:    ret
757 ; RV32ZBA-LABEL: add4104:
758 ; RV32ZBA:       # %bb.0:
759 ; RV32ZBA-NEXT:    addi a1, zero, 1026
760 ; RV32ZBA-NEXT:    sh2add a0, a1, a0
761 ; RV32ZBA-NEXT:    ret
762   %c = add i32 %a, 4104
763   ret i32 %c
766 define i32 @add8208(i32 %a) {
767 ; RV32I-LABEL: add8208:
768 ; RV32I:       # %bb.0:
769 ; RV32I-NEXT:    lui a1, 2
770 ; RV32I-NEXT:    addi a1, a1, 16
771 ; RV32I-NEXT:    add a0, a0, a1
772 ; RV32I-NEXT:    ret
774 ; RV32B-LABEL: add8208:
775 ; RV32B:       # %bb.0:
776 ; RV32B-NEXT:    addi a1, zero, 1026
777 ; RV32B-NEXT:    sh3add a0, a1, a0
778 ; RV32B-NEXT:    ret
780 ; RV32ZBA-LABEL: add8208:
781 ; RV32ZBA:       # %bb.0:
782 ; RV32ZBA-NEXT:    addi a1, zero, 1026
783 ; RV32ZBA-NEXT:    sh3add a0, a1, a0
784 ; RV32ZBA-NEXT:    ret
785   %c = add i32 %a, 8208
786   ret i32 %c