@@ -109,6 +109,25 @@ define i64 @addmul6(i64 %a, i64 %b) {
109
109
ret i64 %d
110
110
}
111
111
112
+ define i64 @disjointormul6 (i64 %a , i64 %b ) {
113
+ ; RV64I-LABEL: disjointormul6:
114
+ ; RV64I: # %bb.0:
115
+ ; RV64I-NEXT: slli a2, a0, 1
116
+ ; RV64I-NEXT: slli a0, a0, 3
117
+ ; RV64I-NEXT: sub a0, a0, a2
118
+ ; RV64I-NEXT: or a0, a0, a1
119
+ ; RV64I-NEXT: ret
120
+ ;
121
+ ; RV64XTHEADBA-LABEL: disjointormul6:
122
+ ; RV64XTHEADBA: # %bb.0:
123
+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 1
124
+ ; RV64XTHEADBA-NEXT: th.addsl a0, a1, a0, 1
125
+ ; RV64XTHEADBA-NEXT: ret
126
+ %c = mul i64 %a , 6
127
+ %d = or disjoint i64 %c , %b
128
+ ret i64 %d
129
+ }
130
+
112
131
define i64 @addmul10 (i64 %a , i64 %b ) {
113
132
; RV64I-LABEL: addmul10:
114
133
; RV64I: # %bb.0:
@@ -423,8 +442,8 @@ define i64 @add255mul180(i64 %a) {
423
442
; RV64XTHEADBA: # %bb.0:
424
443
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 2
425
444
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 3
426
- ; RV64XTHEADBA-NEXT: li a1, 255
427
- ; RV64XTHEADBA-NEXT: th.addsl a0, a1, a0, 2
445
+ ; RV64XTHEADBA-NEXT: slli a0, a0, 2
446
+ ; RV64XTHEADBA-NEXT: addi a0, a0, 255
428
447
; RV64XTHEADBA-NEXT: ret
429
448
%c = mul i64 %a , 180
430
449
%d = add i64 %c , 255
@@ -642,6 +661,39 @@ define i64 @mul288(i64 %a) {
642
661
ret i64 %c
643
662
}
644
663
664
+ define i64 @sh1add_imm (i64 %0 ) {
665
+ ; CHECK-LABEL: sh1add_imm:
666
+ ; CHECK: # %bb.0:
667
+ ; CHECK-NEXT: slli a0, a0, 1
668
+ ; CHECK-NEXT: addi a0, a0, 5
669
+ ; CHECK-NEXT: ret
670
+ %a = shl i64 %0 , 1
671
+ %b = add i64 %a , 5
672
+ ret i64 %b
673
+ }
674
+
675
+ define i64 @sh2add_imm (i64 %0 ) {
676
+ ; CHECK-LABEL: sh2add_imm:
677
+ ; CHECK: # %bb.0:
678
+ ; CHECK-NEXT: slli a0, a0, 2
679
+ ; CHECK-NEXT: addi a0, a0, -6
680
+ ; CHECK-NEXT: ret
681
+ %a = shl i64 %0 , 2
682
+ %b = add i64 %a , -6
683
+ ret i64 %b
684
+ }
685
+
686
+ define i64 @sh3add_imm (i64 %0 ) {
687
+ ; CHECK-LABEL: sh3add_imm:
688
+ ; CHECK: # %bb.0:
689
+ ; CHECK-NEXT: slli a0, a0, 3
690
+ ; CHECK-NEXT: addi a0, a0, 7
691
+ ; CHECK-NEXT: ret
692
+ %a = shl i64 %0 , 3
693
+ %b = add i64 %a , 7
694
+ ret i64 %b
695
+ }
696
+
645
697
define i64 @mul258 (i64 %a ) {
646
698
; RV64I-LABEL: mul258:
647
699
; RV64I: # %bb.0:
@@ -983,12 +1035,18 @@ define i64 @add4104(i64 %a) {
983
1035
}
984
1036
985
1037
define i64 @add4104_2 (i64 %a ) {
986
- ; CHECK-LABEL: add4104_2:
987
- ; CHECK: # %bb.0:
988
- ; CHECK-NEXT: lui a1, 1
989
- ; CHECK-NEXT: addiw a1, a1, 8
990
- ; CHECK-NEXT: or a0, a0, a1
991
- ; CHECK-NEXT: ret
1038
+ ; RV64I-LABEL: add4104_2:
1039
+ ; RV64I: # %bb.0:
1040
+ ; RV64I-NEXT: lui a1, 1
1041
+ ; RV64I-NEXT: addiw a1, a1, 8
1042
+ ; RV64I-NEXT: or a0, a0, a1
1043
+ ; RV64I-NEXT: ret
1044
+ ;
1045
+ ; RV64XTHEADBA-LABEL: add4104_2:
1046
+ ; RV64XTHEADBA: # %bb.0:
1047
+ ; RV64XTHEADBA-NEXT: li a1, 1026
1048
+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
1049
+ ; RV64XTHEADBA-NEXT: ret
992
1050
%c = or disjoint i64 %a , 4104
993
1051
ret i64 %c
994
1052
}
0 commit comments