@@ -585,6 +585,33 @@ define i64 @addmul12(i64 %a, i64 %b) {
585585 ret i64 %d
586586}
587587
588+ define i64 @addmul14 (i64 %a , i64 %b ) {
589+ ; RV64I-LABEL: addmul14:
590+ ; RV64I: # %bb.0:
591+ ; RV64I-NEXT: slli a2, a0, 1
592+ ; RV64I-NEXT: slli a0, a0, 4
593+ ; RV64I-NEXT: sub a0, a0, a2
594+ ; RV64I-NEXT: add a0, a0, a1
595+ ; RV64I-NEXT: ret
596+ ;
597+ ; RV64ZBA-LABEL: addmul14:
598+ ; RV64ZBA: # %bb.0:
599+ ; RV64ZBA-NEXT: sh1add a2, a0, a0
600+ ; RV64ZBA-NEXT: sh1add a0, a2, a0
601+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
602+ ; RV64ZBA-NEXT: ret
603+ ;
604+ ; RV64XANDESPERF-LABEL: addmul14:
605+ ; RV64XANDESPERF: # %bb.0:
606+ ; RV64XANDESPERF-NEXT: nds.lea.h a2, a0, a0
607+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a0, a2
608+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
609+ ; RV64XANDESPERF-NEXT: ret
610+ %c = mul i64 %a , 14
611+ %d = add i64 %c , %b
612+ ret i64 %d
613+ }
614+
588615define i64 @addmul18 (i64 %a , i64 %b ) {
589616; RV64I-LABEL: addmul18:
590617; RV64I: # %bb.0:
@@ -636,12 +663,26 @@ define i64 @addmul20(i64 %a, i64 %b) {
636663}
637664
638665define i64 @addmul22 (i64 %a , i64 %b ) {
639- ; CHECK-LABEL: addmul22:
640- ; CHECK: # %bb.0:
641- ; CHECK-NEXT: li a2, 22
642- ; CHECK-NEXT: mul a0, a0, a2
643- ; CHECK-NEXT: add a0, a0, a1
644- ; CHECK-NEXT: ret
666+ ; RV64I-LABEL: addmul22:
667+ ; RV64I: # %bb.0:
668+ ; RV64I-NEXT: li a2, 22
669+ ; RV64I-NEXT: mul a0, a0, a2
670+ ; RV64I-NEXT: add a0, a0, a1
671+ ; RV64I-NEXT: ret
672+ ;
673+ ; RV64ZBA-LABEL: addmul22:
674+ ; RV64ZBA: # %bb.0:
675+ ; RV64ZBA-NEXT: sh2add a2, a0, a0
676+ ; RV64ZBA-NEXT: sh1add a0, a2, a0
677+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
678+ ; RV64ZBA-NEXT: ret
679+ ;
680+ ; RV64XANDESPERF-LABEL: addmul22:
681+ ; RV64XANDESPERF: # %bb.0:
682+ ; RV64XANDESPERF-NEXT: nds.lea.w a2, a0, a0
683+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a0, a2
684+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
685+ ; RV64XANDESPERF-NEXT: ret
645686 %c = mul i64 %a , 22
646687 %d = add i64 %c , %b
647688 ret i64 %d
@@ -672,6 +713,32 @@ define i64 @addmul24(i64 %a, i64 %b) {
672713 ret i64 %d
673714}
674715
716+ define i64 @addmul26 (i64 %a , i64 %b ) {
717+ ; RV64I-LABEL: addmul26:
718+ ; RV64I: # %bb.0:
719+ ; RV64I-NEXT: li a2, 26
720+ ; RV64I-NEXT: mul a0, a0, a2
721+ ; RV64I-NEXT: add a0, a0, a1
722+ ; RV64I-NEXT: ret
723+ ;
724+ ; RV64ZBA-LABEL: addmul26:
725+ ; RV64ZBA: # %bb.0:
726+ ; RV64ZBA-NEXT: sh1add a2, a0, a0
727+ ; RV64ZBA-NEXT: sh2add a0, a2, a0
728+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
729+ ; RV64ZBA-NEXT: ret
730+ ;
731+ ; RV64XANDESPERF-LABEL: addmul26:
732+ ; RV64XANDESPERF: # %bb.0:
733+ ; RV64XANDESPERF-NEXT: nds.lea.h a2, a0, a0
734+ ; RV64XANDESPERF-NEXT: nds.lea.w a0, a0, a2
735+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
736+ ; RV64XANDESPERF-NEXT: ret
737+ %c = mul i64 %a , 26
738+ %d = add i64 %c , %b
739+ ret i64 %d
740+ }
741+
675742define i64 @addmul36 (i64 %a , i64 %b ) {
676743; RV64I-LABEL: addmul36:
677744; RV64I: # %bb.0:
@@ -722,6 +789,58 @@ define i64 @addmul40(i64 %a, i64 %b) {
722789 ret i64 %d
723790}
724791
792+ define i64 @addmul38 (i64 %a , i64 %b ) {
793+ ; RV64I-LABEL: addmul38:
794+ ; RV64I: # %bb.0:
795+ ; RV64I-NEXT: li a2, 38
796+ ; RV64I-NEXT: mul a0, a0, a2
797+ ; RV64I-NEXT: add a0, a0, a1
798+ ; RV64I-NEXT: ret
799+ ;
800+ ; RV64ZBA-LABEL: addmul38:
801+ ; RV64ZBA: # %bb.0:
802+ ; RV64ZBA-NEXT: sh3add a2, a0, a0
803+ ; RV64ZBA-NEXT: sh1add a0, a2, a0
804+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
805+ ; RV64ZBA-NEXT: ret
806+ ;
807+ ; RV64XANDESPERF-LABEL: addmul38:
808+ ; RV64XANDESPERF: # %bb.0:
809+ ; RV64XANDESPERF-NEXT: nds.lea.d a2, a0, a0
810+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a0, a2
811+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
812+ ; RV64XANDESPERF-NEXT: ret
813+ %c = mul i64 %a , 38
814+ %d = add i64 %c , %b
815+ ret i64 %d
816+ }
817+
818+ define i64 @addmul42 (i64 %a , i64 %b ) {
819+ ; RV64I-LABEL: addmul42:
820+ ; RV64I: # %bb.0:
821+ ; RV64I-NEXT: li a2, 42
822+ ; RV64I-NEXT: mul a0, a0, a2
823+ ; RV64I-NEXT: add a0, a0, a1
824+ ; RV64I-NEXT: ret
825+ ;
826+ ; RV64ZBA-LABEL: addmul42:
827+ ; RV64ZBA: # %bb.0:
828+ ; RV64ZBA-NEXT: sh2add a2, a0, a0
829+ ; RV64ZBA-NEXT: sh2add a0, a2, a0
830+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
831+ ; RV64ZBA-NEXT: ret
832+ ;
833+ ; RV64XANDESPERF-LABEL: addmul42:
834+ ; RV64XANDESPERF: # %bb.0:
835+ ; RV64XANDESPERF-NEXT: nds.lea.w a2, a0, a0
836+ ; RV64XANDESPERF-NEXT: nds.lea.w a0, a0, a2
837+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
838+ ; RV64XANDESPERF-NEXT: ret
839+ %c = mul i64 %a , 42
840+ %d = add i64 %c , %b
841+ ret i64 %d
842+ }
843+
725844define i64 @addmul72 (i64 %a , i64 %b ) {
726845; RV64I-LABEL: addmul72:
727846; RV64I: # %bb.0:
@@ -747,6 +866,84 @@ define i64 @addmul72(i64 %a, i64 %b) {
747866 ret i64 %d
748867}
749868
869+ define i64 @addmul74 (i64 %a , i64 %b ) {
870+ ; RV64I-LABEL: addmul74:
871+ ; RV64I: # %bb.0:
872+ ; RV64I-NEXT: li a2, 74
873+ ; RV64I-NEXT: mul a0, a0, a2
874+ ; RV64I-NEXT: add a0, a0, a1
875+ ; RV64I-NEXT: ret
876+ ;
877+ ; RV64ZBA-LABEL: addmul74:
878+ ; RV64ZBA: # %bb.0:
879+ ; RV64ZBA-NEXT: sh3add a2, a0, a0
880+ ; RV64ZBA-NEXT: sh2add a0, a2, a0
881+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
882+ ; RV64ZBA-NEXT: ret
883+ ;
884+ ; RV64XANDESPERF-LABEL: addmul74:
885+ ; RV64XANDESPERF: # %bb.0:
886+ ; RV64XANDESPERF-NEXT: nds.lea.d a2, a0, a0
887+ ; RV64XANDESPERF-NEXT: nds.lea.w a0, a0, a2
888+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
889+ ; RV64XANDESPERF-NEXT: ret
890+ %c = mul i64 %a , 74
891+ %d = add i64 %c , %b
892+ ret i64 %d
893+ }
894+
895+ define i64 @addmul82 (i64 %a , i64 %b ) {
896+ ; RV64I-LABEL: addmul82:
897+ ; RV64I: # %bb.0:
898+ ; RV64I-NEXT: li a2, 82
899+ ; RV64I-NEXT: mul a0, a0, a2
900+ ; RV64I-NEXT: add a0, a0, a1
901+ ; RV64I-NEXT: ret
902+ ;
903+ ; RV64ZBA-LABEL: addmul82:
904+ ; RV64ZBA: # %bb.0:
905+ ; RV64ZBA-NEXT: sh2add a2, a0, a0
906+ ; RV64ZBA-NEXT: sh3add a0, a2, a0
907+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
908+ ; RV64ZBA-NEXT: ret
909+ ;
910+ ; RV64XANDESPERF-LABEL: addmul82:
911+ ; RV64XANDESPERF: # %bb.0:
912+ ; RV64XANDESPERF-NEXT: nds.lea.w a2, a0, a0
913+ ; RV64XANDESPERF-NEXT: nds.lea.d a0, a0, a2
914+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
915+ ; RV64XANDESPERF-NEXT: ret
916+ %c = mul i64 %a , 82
917+ %d = add i64 %c , %b
918+ ret i64 %d
919+ }
920+
921+ define i64 @addmul146 (i64 %a , i64 %b ) {
922+ ; RV64I-LABEL: addmul146:
923+ ; RV64I: # %bb.0:
924+ ; RV64I-NEXT: li a2, 146
925+ ; RV64I-NEXT: mul a0, a0, a2
926+ ; RV64I-NEXT: add a0, a0, a1
927+ ; RV64I-NEXT: ret
928+ ;
929+ ; RV64ZBA-LABEL: addmul146:
930+ ; RV64ZBA: # %bb.0:
931+ ; RV64ZBA-NEXT: sh3add a2, a0, a0
932+ ; RV64ZBA-NEXT: sh3add a0, a2, a0
933+ ; RV64ZBA-NEXT: sh1add a0, a0, a1
934+ ; RV64ZBA-NEXT: ret
935+ ;
936+ ; RV64XANDESPERF-LABEL: addmul146:
937+ ; RV64XANDESPERF: # %bb.0:
938+ ; RV64XANDESPERF-NEXT: nds.lea.d a2, a0, a0
939+ ; RV64XANDESPERF-NEXT: nds.lea.d a0, a0, a2
940+ ; RV64XANDESPERF-NEXT: nds.lea.h a0, a1, a0
941+ ; RV64XANDESPERF-NEXT: ret
942+ %c = mul i64 %a , 146
943+ %d = add i64 %c , %b
944+ ret i64 %d
945+ }
946+
750947define i64 @mul50 (i64 %a ) {
751948; RV64I-LABEL: mul50:
752949; RV64I: # %bb.0:
0 commit comments