Skip to content

Commit 80d1c85

Browse files
author
git apple-llvm automerger
committed
Merge commit '9621bbdf62d3' from llvm.org/main into next
2 parents 063ceeb + 9621bbd commit 80d1c85

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed

llvm/test/CodeGen/RISCV/addimm-mulimm.ll

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,225 @@ define i64 @add_mul_combine_reject_d3(i64 %x) {
338338
%tmp1 = mul i64 %tmp0, 192
339339
ret i64 %tmp1
340340
}
341+
342+
define i32 @add_mul_combine_reject_e1(i32 %x) {
343+
; RV32IMB-LABEL: add_mul_combine_reject_e1:
344+
; RV32IMB: # %bb.0:
345+
; RV32IMB-NEXT: addi a1, zero, 29
346+
; RV32IMB-NEXT: mul a0, a0, a1
347+
; RV32IMB-NEXT: lui a1, 14
348+
; RV32IMB-NEXT: addi a1, a1, -185
349+
; RV32IMB-NEXT: add a0, a0, a1
350+
; RV32IMB-NEXT: ret
351+
;
352+
; RV64IMB-LABEL: add_mul_combine_reject_e1:
353+
; RV64IMB: # %bb.0:
354+
; RV64IMB-NEXT: addi a1, zero, 29
355+
; RV64IMB-NEXT: mulw a0, a0, a1
356+
; RV64IMB-NEXT: lui a1, 14
357+
; RV64IMB-NEXT: addiw a1, a1, -185
358+
; RV64IMB-NEXT: addw a0, a0, a1
359+
; RV64IMB-NEXT: ret
360+
%tmp0 = mul i32 %x, 29
361+
%tmp1 = add i32 %tmp0, 57159
362+
ret i32 %tmp1
363+
}
364+
365+
define signext i32 @add_mul_combine_reject_e2(i32 signext %x) {
366+
; RV32IMB-LABEL: add_mul_combine_reject_e2:
367+
; RV32IMB: # %bb.0:
368+
; RV32IMB-NEXT: addi a1, zero, 29
369+
; RV32IMB-NEXT: mul a0, a0, a1
370+
; RV32IMB-NEXT: lui a1, 14
371+
; RV32IMB-NEXT: addi a1, a1, -185
372+
; RV32IMB-NEXT: add a0, a0, a1
373+
; RV32IMB-NEXT: ret
374+
;
375+
; RV64IMB-LABEL: add_mul_combine_reject_e2:
376+
; RV64IMB: # %bb.0:
377+
; RV64IMB-NEXT: addi a1, zero, 29
378+
; RV64IMB-NEXT: mulw a0, a0, a1
379+
; RV64IMB-NEXT: lui a1, 14
380+
; RV64IMB-NEXT: addiw a1, a1, -185
381+
; RV64IMB-NEXT: addw a0, a0, a1
382+
; RV64IMB-NEXT: ret
383+
%tmp0 = mul i32 %x, 29
384+
%tmp1 = add i32 %tmp0, 57159
385+
ret i32 %tmp1
386+
}
387+
388+
define i64 @add_mul_combine_reject_e3(i64 %x) {
389+
; RV32IMB-LABEL: add_mul_combine_reject_e3:
390+
; RV32IMB: # %bb.0:
391+
; RV32IMB-NEXT: addi a2, zero, 29
392+
; RV32IMB-NEXT: mul a1, a1, a2
393+
; RV32IMB-NEXT: mulhu a3, a0, a2
394+
; RV32IMB-NEXT: add a1, a3, a1
395+
; RV32IMB-NEXT: mul a2, a0, a2
396+
; RV32IMB-NEXT: lui a0, 14
397+
; RV32IMB-NEXT: addi a0, a0, -185
398+
; RV32IMB-NEXT: add a0, a2, a0
399+
; RV32IMB-NEXT: sltu a2, a0, a2
400+
; RV32IMB-NEXT: add a1, a1, a2
401+
; RV32IMB-NEXT: ret
402+
;
403+
; RV64IMB-LABEL: add_mul_combine_reject_e3:
404+
; RV64IMB: # %bb.0:
405+
; RV64IMB-NEXT: addi a1, zero, 29
406+
; RV64IMB-NEXT: mul a0, a0, a1
407+
; RV64IMB-NEXT: lui a1, 14
408+
; RV64IMB-NEXT: addiw a1, a1, -185
409+
; RV64IMB-NEXT: add a0, a0, a1
410+
; RV64IMB-NEXT: ret
411+
%tmp0 = mul i64 %x, 29
412+
%tmp1 = add i64 %tmp0, 57159
413+
ret i64 %tmp1
414+
}
415+
416+
define i32 @add_mul_combine_reject_f1(i32 %x) {
417+
; RV32IMB-LABEL: add_mul_combine_reject_f1:
418+
; RV32IMB: # %bb.0:
419+
; RV32IMB-NEXT: addi a1, zero, 29
420+
; RV32IMB-NEXT: mul a0, a0, a1
421+
; RV32IMB-NEXT: lui a1, 14
422+
; RV32IMB-NEXT: addi a1, a1, -145
423+
; RV32IMB-NEXT: add a0, a0, a1
424+
; RV32IMB-NEXT: ret
425+
;
426+
; RV64IMB-LABEL: add_mul_combine_reject_f1:
427+
; RV64IMB: # %bb.0:
428+
; RV64IMB-NEXT: addi a1, zero, 29
429+
; RV64IMB-NEXT: mulw a0, a0, a1
430+
; RV64IMB-NEXT: lui a1, 14
431+
; RV64IMB-NEXT: addiw a1, a1, -145
432+
; RV64IMB-NEXT: addw a0, a0, a1
433+
; RV64IMB-NEXT: ret
434+
%tmp0 = mul i32 %x, 29
435+
%tmp1 = add i32 %tmp0, 57199
436+
ret i32 %tmp1
437+
}
438+
439+
define signext i32 @add_mul_combine_reject_f2(i32 signext %x) {
440+
; RV32IMB-LABEL: add_mul_combine_reject_f2:
441+
; RV32IMB: # %bb.0:
442+
; RV32IMB-NEXT: addi a1, zero, 29
443+
; RV32IMB-NEXT: mul a0, a0, a1
444+
; RV32IMB-NEXT: lui a1, 14
445+
; RV32IMB-NEXT: addi a1, a1, -145
446+
; RV32IMB-NEXT: add a0, a0, a1
447+
; RV32IMB-NEXT: ret
448+
;
449+
; RV64IMB-LABEL: add_mul_combine_reject_f2:
450+
; RV64IMB: # %bb.0:
451+
; RV64IMB-NEXT: addi a1, zero, 29
452+
; RV64IMB-NEXT: mulw a0, a0, a1
453+
; RV64IMB-NEXT: lui a1, 14
454+
; RV64IMB-NEXT: addiw a1, a1, -145
455+
; RV64IMB-NEXT: addw a0, a0, a1
456+
; RV64IMB-NEXT: ret
457+
%tmp0 = mul i32 %x, 29
458+
%tmp1 = add i32 %tmp0, 57199
459+
ret i32 %tmp1
460+
}
461+
462+
define i64 @add_mul_combine_reject_f3(i64 %x) {
463+
; RV32IMB-LABEL: add_mul_combine_reject_f3:
464+
; RV32IMB: # %bb.0:
465+
; RV32IMB-NEXT: addi a2, zero, 29
466+
; RV32IMB-NEXT: mul a1, a1, a2
467+
; RV32IMB-NEXT: mulhu a3, a0, a2
468+
; RV32IMB-NEXT: add a1, a3, a1
469+
; RV32IMB-NEXT: mul a2, a0, a2
470+
; RV32IMB-NEXT: lui a0, 14
471+
; RV32IMB-NEXT: addi a0, a0, -145
472+
; RV32IMB-NEXT: add a0, a2, a0
473+
; RV32IMB-NEXT: sltu a2, a0, a2
474+
; RV32IMB-NEXT: add a1, a1, a2
475+
; RV32IMB-NEXT: ret
476+
;
477+
; RV64IMB-LABEL: add_mul_combine_reject_f3:
478+
; RV64IMB: # %bb.0:
479+
; RV64IMB-NEXT: addi a1, zero, 29
480+
; RV64IMB-NEXT: mul a0, a0, a1
481+
; RV64IMB-NEXT: lui a1, 14
482+
; RV64IMB-NEXT: addiw a1, a1, -145
483+
; RV64IMB-NEXT: add a0, a0, a1
484+
; RV64IMB-NEXT: ret
485+
%tmp0 = mul i64 %x, 29
486+
%tmp1 = add i64 %tmp0, 57199
487+
ret i64 %tmp1
488+
}
489+
490+
define i32 @add_mul_combine_reject_g1(i32 %x) {
491+
; RV32IMB-LABEL: add_mul_combine_reject_g1:
492+
; RV32IMB: # %bb.0:
493+
; RV32IMB-NEXT: sh3add a1, a0, a0
494+
; RV32IMB-NEXT: sh3add a0, a1, a0
495+
; RV32IMB-NEXT: lui a1, 2
496+
; RV32IMB-NEXT: addi a1, a1, -882
497+
; RV32IMB-NEXT: add a0, a0, a1
498+
; RV32IMB-NEXT: ret
499+
;
500+
; RV64IMB-LABEL: add_mul_combine_reject_g1:
501+
; RV64IMB: # %bb.0:
502+
; RV64IMB-NEXT: sh3add a1, a0, a0
503+
; RV64IMB-NEXT: sh3add a0, a1, a0
504+
; RV64IMB-NEXT: lui a1, 2
505+
; RV64IMB-NEXT: addiw a1, a1, -882
506+
; RV64IMB-NEXT: addw a0, a0, a1
507+
; RV64IMB-NEXT: ret
508+
%tmp0 = mul i32 %x, 73
509+
%tmp1 = add i32 %tmp0, 7310
510+
ret i32 %tmp1
511+
}
512+
513+
define signext i32 @add_mul_combine_reject_g2(i32 signext %x) {
514+
; RV32IMB-LABEL: add_mul_combine_reject_g2:
515+
; RV32IMB: # %bb.0:
516+
; RV32IMB-NEXT: sh3add a1, a0, a0
517+
; RV32IMB-NEXT: sh3add a0, a1, a0
518+
; RV32IMB-NEXT: lui a1, 2
519+
; RV32IMB-NEXT: addi a1, a1, -882
520+
; RV32IMB-NEXT: add a0, a0, a1
521+
; RV32IMB-NEXT: ret
522+
;
523+
; RV64IMB-LABEL: add_mul_combine_reject_g2:
524+
; RV64IMB: # %bb.0:
525+
; RV64IMB-NEXT: sh3add a1, a0, a0
526+
; RV64IMB-NEXT: sh3add a0, a1, a0
527+
; RV64IMB-NEXT: lui a1, 2
528+
; RV64IMB-NEXT: addiw a1, a1, -882
529+
; RV64IMB-NEXT: addw a0, a0, a1
530+
; RV64IMB-NEXT: ret
531+
%tmp0 = mul i32 %x, 73
532+
%tmp1 = add i32 %tmp0, 7310
533+
ret i32 %tmp1
534+
}
535+
536+
define i64 @add_mul_combine_reject_g3(i64 %x) {
537+
; RV32IMB-LABEL: add_mul_combine_reject_g3:
538+
; RV32IMB: # %bb.0:
539+
; RV32IMB-NEXT: addi a2, zero, 73
540+
; RV32IMB-NEXT: mul a1, a1, a2
541+
; RV32IMB-NEXT: mulhu a3, a0, a2
542+
; RV32IMB-NEXT: add a1, a3, a1
543+
; RV32IMB-NEXT: mul a2, a0, a2
544+
; RV32IMB-NEXT: lui a0, 2
545+
; RV32IMB-NEXT: addi a0, a0, -882
546+
; RV32IMB-NEXT: add a0, a2, a0
547+
; RV32IMB-NEXT: sltu a2, a0, a2
548+
; RV32IMB-NEXT: add a1, a1, a2
549+
; RV32IMB-NEXT: ret
550+
;
551+
; RV64IMB-LABEL: add_mul_combine_reject_g3:
552+
; RV64IMB: # %bb.0:
553+
; RV64IMB-NEXT: sh3add a1, a0, a0
554+
; RV64IMB-NEXT: sh3add a0, a1, a0
555+
; RV64IMB-NEXT: lui a1, 2
556+
; RV64IMB-NEXT: addiw a1, a1, -882
557+
; RV64IMB-NEXT: add a0, a0, a1
558+
; RV64IMB-NEXT: ret
559+
%tmp0 = mul i64 %x, 73
560+
%tmp1 = add i64 %tmp0, 7310
561+
ret i64 %tmp1
562+
}

0 commit comments

Comments
 (0)