@@ -1104,77 +1104,113 @@ define i64 @add8192(i64 %a) {
11041104}
11051105
11061106define signext i32 @addshl32_5_6 (i32 signext %a , i32 signext %b ) {
1107- ; CHECK-LABEL: addshl32_5_6:
1108- ; CHECK: # %bb.0:
1109- ; CHECK-NEXT: slli a0, a0, 5
1110- ; CHECK-NEXT: slli a1, a1, 6
1111- ; CHECK-NEXT: addw a0, a0, a1
1112- ; CHECK-NEXT: ret
1107+ ; RV64I-LABEL: addshl32_5_6:
1108+ ; RV64I: # %bb.0:
1109+ ; RV64I-NEXT: slli a0, a0, 5
1110+ ; RV64I-NEXT: slli a1, a1, 6
1111+ ; RV64I-NEXT: addw a0, a0, a1
1112+ ; RV64I-NEXT: ret
1113+ ;
1114+ ; RV64XTHEADBA-LABEL: addshl32_5_6:
1115+ ; RV64XTHEADBA: # %bb.0:
1116+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 1
1117+ ; RV64XTHEADBA-NEXT: slliw a0, a0, 5
1118+ ; RV64XTHEADBA-NEXT: ret
11131119 %c = shl i32 %a , 5
11141120 %d = shl i32 %b , 6
11151121 %e = add i32 %c , %d
11161122 ret i32 %e
11171123}
11181124
11191125define i64 @addshl64_5_6 (i64 %a , i64 %b ) {
1120- ; CHECK-LABEL: addshl64_5_6:
1121- ; CHECK: # %bb.0:
1122- ; CHECK-NEXT: slli a0, a0, 5
1123- ; CHECK-NEXT: slli a1, a1, 6
1124- ; CHECK-NEXT: add a0, a0, a1
1125- ; CHECK-NEXT: ret
1126+ ; RV64I-LABEL: addshl64_5_6:
1127+ ; RV64I: # %bb.0:
1128+ ; RV64I-NEXT: slli a0, a0, 5
1129+ ; RV64I-NEXT: slli a1, a1, 6
1130+ ; RV64I-NEXT: add a0, a0, a1
1131+ ; RV64I-NEXT: ret
1132+ ;
1133+ ; RV64XTHEADBA-LABEL: addshl64_5_6:
1134+ ; RV64XTHEADBA: # %bb.0:
1135+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 1
1136+ ; RV64XTHEADBA-NEXT: slli a0, a0, 5
1137+ ; RV64XTHEADBA-NEXT: ret
11261138 %c = shl i64 %a , 5
11271139 %d = shl i64 %b , 6
11281140 %e = add i64 %c , %d
11291141 ret i64 %e
11301142}
11311143
11321144define signext i32 @addshl32_5_7 (i32 signext %a , i32 signext %b ) {
1133- ; CHECK-LABEL: addshl32_5_7:
1134- ; CHECK: # %bb.0:
1135- ; CHECK-NEXT: slli a0, a0, 5
1136- ; CHECK-NEXT: slli a1, a1, 7
1137- ; CHECK-NEXT: addw a0, a0, a1
1138- ; CHECK-NEXT: ret
1145+ ; RV64I-LABEL: addshl32_5_7:
1146+ ; RV64I: # %bb.0:
1147+ ; RV64I-NEXT: slli a0, a0, 5
1148+ ; RV64I-NEXT: slli a1, a1, 7
1149+ ; RV64I-NEXT: addw a0, a0, a1
1150+ ; RV64I-NEXT: ret
1151+ ;
1152+ ; RV64XTHEADBA-LABEL: addshl32_5_7:
1153+ ; RV64XTHEADBA: # %bb.0:
1154+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
1155+ ; RV64XTHEADBA-NEXT: slliw a0, a0, 5
1156+ ; RV64XTHEADBA-NEXT: ret
11391157 %c = shl i32 %a , 5
11401158 %d = shl i32 %b , 7
11411159 %e = add i32 %c , %d
11421160 ret i32 %e
11431161}
11441162
11451163define i64 @addshl64_5_7 (i64 %a , i64 %b ) {
1146- ; CHECK-LABEL: addshl64_5_7:
1147- ; CHECK: # %bb.0:
1148- ; CHECK-NEXT: slli a0, a0, 5
1149- ; CHECK-NEXT: slli a1, a1, 7
1150- ; CHECK-NEXT: add a0, a0, a1
1151- ; CHECK-NEXT: ret
1164+ ; RV64I-LABEL: addshl64_5_7:
1165+ ; RV64I: # %bb.0:
1166+ ; RV64I-NEXT: slli a0, a0, 5
1167+ ; RV64I-NEXT: slli a1, a1, 7
1168+ ; RV64I-NEXT: add a0, a0, a1
1169+ ; RV64I-NEXT: ret
1170+ ;
1171+ ; RV64XTHEADBA-LABEL: addshl64_5_7:
1172+ ; RV64XTHEADBA: # %bb.0:
1173+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
1174+ ; RV64XTHEADBA-NEXT: slli a0, a0, 5
1175+ ; RV64XTHEADBA-NEXT: ret
11521176 %c = shl i64 %a , 5
11531177 %d = shl i64 %b , 7
11541178 %e = add i64 %c , %d
11551179 ret i64 %e
11561180}
11571181
11581182define signext i32 @addshl32_5_8 (i32 signext %a , i32 signext %b ) {
1159- ; CHECK-LABEL: addshl32_5_8:
1160- ; CHECK: # %bb.0:
1161- ; CHECK-NEXT: slli a0, a0, 5
1162- ; CHECK-NEXT: slli a1, a1, 8
1163- ; CHECK-NEXT: addw a0, a0, a1
1164- ; CHECK-NEXT: ret
1183+ ; RV64I-LABEL: addshl32_5_8:
1184+ ; RV64I: # %bb.0:
1185+ ; RV64I-NEXT: slli a0, a0, 5
1186+ ; RV64I-NEXT: slli a1, a1, 8
1187+ ; RV64I-NEXT: addw a0, a0, a1
1188+ ; RV64I-NEXT: ret
1189+ ;
1190+ ; RV64XTHEADBA-LABEL: addshl32_5_8:
1191+ ; RV64XTHEADBA: # %bb.0:
1192+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
1193+ ; RV64XTHEADBA-NEXT: slliw a0, a0, 5
1194+ ; RV64XTHEADBA-NEXT: ret
11651195 %c = shl i32 %a , 5
11661196 %d = shl i32 %b , 8
11671197 %e = add i32 %c , %d
11681198 ret i32 %e
11691199}
11701200
11711201define i64 @addshl64_5_8 (i64 %a , i64 %b ) {
1172- ; CHECK-LABEL: addshl64_5_8:
1173- ; CHECK: # %bb.0:
1174- ; CHECK-NEXT: slli a0, a0, 5
1175- ; CHECK-NEXT: slli a1, a1, 8
1176- ; CHECK-NEXT: add a0, a0, a1
1177- ; CHECK-NEXT: ret
1202+ ; RV64I-LABEL: addshl64_5_8:
1203+ ; RV64I: # %bb.0:
1204+ ; RV64I-NEXT: slli a0, a0, 5
1205+ ; RV64I-NEXT: slli a1, a1, 8
1206+ ; RV64I-NEXT: add a0, a0, a1
1207+ ; RV64I-NEXT: ret
1208+ ;
1209+ ; RV64XTHEADBA-LABEL: addshl64_5_8:
1210+ ; RV64XTHEADBA: # %bb.0:
1211+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
1212+ ; RV64XTHEADBA-NEXT: slli a0, a0, 5
1213+ ; RV64XTHEADBA-NEXT: ret
11781214 %c = shl i64 %a , 5
11791215 %d = shl i64 %b , 8
11801216 %e = add i64 %c , %d
@@ -1192,9 +1228,8 @@ define i64 @sh6_sh3_add1(i64 noundef %x, i64 noundef %y, i64 noundef %z) {
11921228;
11931229; RV64XTHEADBA-LABEL: sh6_sh3_add1:
11941230; RV64XTHEADBA: # %bb.0: # %entry
1195- ; RV64XTHEADBA-NEXT: slli a1, a1, 6
1196- ; RV64XTHEADBA-NEXT: th.addsl a1, a1, a2, 3
1197- ; RV64XTHEADBA-NEXT: add a0, a1, a0
1231+ ; RV64XTHEADBA-NEXT: th.addsl a1, a2, a1, 3
1232+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
11981233; RV64XTHEADBA-NEXT: ret
11991234entry:
12001235 %shl = shl i64 %z , 3
@@ -1238,9 +1273,8 @@ define i64 @sh6_sh3_add3(i64 noundef %x, i64 noundef %y, i64 noundef %z) {
12381273;
12391274; RV64XTHEADBA-LABEL: sh6_sh3_add3:
12401275; RV64XTHEADBA: # %bb.0: # %entry
1241- ; RV64XTHEADBA-NEXT: slli a1, a1, 6
1242- ; RV64XTHEADBA-NEXT: th.addsl a1, a1, a2, 3
1243- ; RV64XTHEADBA-NEXT: add a0, a0, a1
1276+ ; RV64XTHEADBA-NEXT: th.addsl a1, a2, a1, 3
1277+ ; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
12441278; RV64XTHEADBA-NEXT: ret
12451279entry:
12461280 %shl = shl i64 %z , 3
0 commit comments