@@ -1185,29 +1185,29 @@ define i32 @muli32_p384(i32 %a) nounwind {
11851185; RV32I-LABEL: muli32_p384:
11861186; RV32I: # %bb.0:
11871187; RV32I-NEXT: slli a1, a0, 7
1188- ; RV32I-NEXT: slli a0, a0, 9
1189- ; RV32I-NEXT: sub a0, a0, a1
1188+ ; RV32I-NEXT: slli a0, a0, 8
1189+ ; RV32I-NEXT: add a0, a0, a1
11901190; RV32I-NEXT: ret
11911191;
11921192; RV32IM-LABEL: muli32_p384:
11931193; RV32IM: # %bb.0:
11941194; RV32IM-NEXT: slli a1, a0, 7
1195- ; RV32IM-NEXT: slli a0, a0, 9
1196- ; RV32IM-NEXT: sub a0, a0, a1
1195+ ; RV32IM-NEXT: slli a0, a0, 8
1196+ ; RV32IM-NEXT: add a0, a0, a1
11971197; RV32IM-NEXT: ret
11981198;
11991199; RV64I-LABEL: muli32_p384:
12001200; RV64I: # %bb.0:
12011201; RV64I-NEXT: slli a1, a0, 7
1202- ; RV64I-NEXT: slli a0, a0, 9
1203- ; RV64I-NEXT: sub a0, a0, a1
1202+ ; RV64I-NEXT: slli a0, a0, 8
1203+ ; RV64I-NEXT: add a0, a0, a1
12041204; RV64I-NEXT: ret
12051205;
12061206; RV64IM-LABEL: muli32_p384:
12071207; RV64IM: # %bb.0:
12081208; RV64IM-NEXT: slli a1, a0, 7
1209- ; RV64IM-NEXT: slli a0, a0, 9
1210- ; RV64IM-NEXT: subw a0, a0, a1
1209+ ; RV64IM-NEXT: slli a0, a0, 8
1210+ ; RV64IM-NEXT: addw a0, a0, a1
12111211; RV64IM-NEXT: ret
12121212 %1 = mul i32 %a , 384
12131213 ret i32 %1
@@ -1217,29 +1217,29 @@ define i32 @muli32_p12288(i32 %a) nounwind {
12171217; RV32I-LABEL: muli32_p12288:
12181218; RV32I: # %bb.0:
12191219; RV32I-NEXT: slli a1, a0, 12
1220- ; RV32I-NEXT: slli a0, a0, 14
1221- ; RV32I-NEXT: sub a0, a0, a1
1220+ ; RV32I-NEXT: slli a0, a0, 13
1221+ ; RV32I-NEXT: add a0, a0, a1
12221222; RV32I-NEXT: ret
12231223;
12241224; RV32IM-LABEL: muli32_p12288:
12251225; RV32IM: # %bb.0:
12261226; RV32IM-NEXT: slli a1, a0, 12
1227- ; RV32IM-NEXT: slli a0, a0, 14
1228- ; RV32IM-NEXT: sub a0, a0, a1
1227+ ; RV32IM-NEXT: slli a0, a0, 13
1228+ ; RV32IM-NEXT: add a0, a0, a1
12291229; RV32IM-NEXT: ret
12301230;
12311231; RV64I-LABEL: muli32_p12288:
12321232; RV64I: # %bb.0:
12331233; RV64I-NEXT: slli a1, a0, 12
1234- ; RV64I-NEXT: slli a0, a0, 14
1235- ; RV64I-NEXT: sub a0, a0, a1
1234+ ; RV64I-NEXT: slli a0, a0, 13
1235+ ; RV64I-NEXT: add a0, a0, a1
12361236; RV64I-NEXT: ret
12371237;
12381238; RV64IM-LABEL: muli32_p12288:
12391239; RV64IM: # %bb.0:
12401240; RV64IM-NEXT: slli a1, a0, 12
1241- ; RV64IM-NEXT: slli a0, a0, 14
1242- ; RV64IM-NEXT: subw a0, a0, a1
1241+ ; RV64IM-NEXT: slli a0, a0, 13
1242+ ; RV64IM-NEXT: addw a0, a0, a1
12431243; RV64IM-NEXT: ret
12441244 %1 = mul i32 %a , 12288
12451245 ret i32 %1
@@ -2117,14 +2117,14 @@ define i64 @muland_demand(i64 %x) nounwind {
21172117; RV32IM: # %bb.0:
21182118; RV32IM-NEXT: andi a0, a0, -8
21192119; RV32IM-NEXT: slli a2, a1, 2
2120- ; RV32IM-NEXT: slli a1, a1, 4
2121- ; RV32IM-NEXT: sub a1, a1, a2
2120+ ; RV32IM-NEXT: slli a1, a1, 3
2121+ ; RV32IM-NEXT: add a1, a1, a2
21222122; RV32IM-NEXT: li a2, 12
21232123; RV32IM-NEXT: mulhu a2, a0, a2
21242124; RV32IM-NEXT: add a1, a2, a1
21252125; RV32IM-NEXT: slli a2, a0, 2
2126- ; RV32IM-NEXT: slli a0, a0, 4
2127- ; RV32IM-NEXT: sub a0, a0, a2
2126+ ; RV32IM-NEXT: slli a0, a0, 3
2127+ ; RV32IM-NEXT: add a0, a0, a2
21282128; RV32IM-NEXT: ret
21292129;
21302130; RV64I-LABEL: muland_demand:
@@ -2133,16 +2133,16 @@ define i64 @muland_demand(i64 %x) nounwind {
21332133; RV64I-NEXT: srli a1, a1, 2
21342134; RV64I-NEXT: and a0, a0, a1
21352135; RV64I-NEXT: slli a1, a0, 2
2136- ; RV64I-NEXT: slli a0, a0, 4
2137- ; RV64I-NEXT: sub a0, a0, a1
2136+ ; RV64I-NEXT: slli a0, a0, 3
2137+ ; RV64I-NEXT: add a0, a0, a1
21382138; RV64I-NEXT: ret
21392139;
21402140; RV64IM-LABEL: muland_demand:
21412141; RV64IM: # %bb.0:
21422142; RV64IM-NEXT: andi a0, a0, -8
21432143; RV64IM-NEXT: slli a1, a0, 2
2144- ; RV64IM-NEXT: slli a0, a0, 4
2145- ; RV64IM-NEXT: sub a0, a0, a1
2144+ ; RV64IM-NEXT: slli a0, a0, 3
2145+ ; RV64IM-NEXT: add a0, a0, a1
21462146; RV64IM-NEXT: ret
21472147 %and = and i64 %x , 4611686018427387896
21482148 %mul = mul i64 %and , 12
@@ -2171,15 +2171,15 @@ define i64 @mulzext_demand(i32 signext %x) nounwind {
21712171; RV64I-LABEL: mulzext_demand:
21722172; RV64I: # %bb.0:
21732173; RV64I-NEXT: slli a1, a0, 32
2174- ; RV64I-NEXT: slli a0, a0, 34
2175- ; RV64I-NEXT: sub a0, a0, a1
2174+ ; RV64I-NEXT: slli a0, a0, 33
2175+ ; RV64I-NEXT: add a0, a0, a1
21762176; RV64I-NEXT: ret
21772177;
21782178; RV64IM-LABEL: mulzext_demand:
21792179; RV64IM: # %bb.0:
21802180; RV64IM-NEXT: slli a1, a0, 32
2181- ; RV64IM-NEXT: slli a0, a0, 34
2182- ; RV64IM-NEXT: sub a0, a0, a1
2181+ ; RV64IM-NEXT: slli a0, a0, 33
2182+ ; RV64IM-NEXT: add a0, a0, a1
21832183; RV64IM-NEXT: ret
21842184 %ext = zext i32 %x to i64
21852185 %mul = mul i64 %ext , 12884901888
0 commit comments