Skip to content

Commit e668363

Browse files
author
Thorsten Schütt
committed
remove bitwidth
1 parent aed590c commit e668363

File tree

1 file changed

+10
-32
lines changed

1 file changed

+10
-32
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

+10-32
Original file line numberDiff line numberDiff line change
@@ -6982,21 +6982,9 @@ bool CombinerHelper::matchAddOverflow(MachineInstr &MI, BuildFnTy &MatchInfo) {
69826982
// Fold addo(c1, c2) -> c3, carry.
69836983
if (MaybeLHS && MaybeRHS && isConstantLegalOrBeforeLegalizer(DstTy) &&
69846984
isConstantLegalOrBeforeLegalizer(CarryTy)) {
6985-
// They must both have the same bitwidth. Otherwise APInt might
6986-
// assert. Pre legalization, they may have widely different bitwidths.
6987-
unsigned BitWidth =
6988-
std::max(MaybeLHS->getBitWidth(), MaybeRHS->getBitWidth());
69896985
bool Overflow;
6990-
APInt Result;
6991-
if (IsSigned) {
6992-
APInt LHS = MaybeLHS->sext(BitWidth);
6993-
APInt RHS = MaybeRHS->sext(BitWidth);
6994-
Result = LHS.sadd_ov(RHS, Overflow);
6995-
} else {
6996-
APInt LHS = MaybeLHS->zext(BitWidth);
6997-
APInt RHS = MaybeRHS->zext(BitWidth);
6998-
Result = LHS.uadd_ov(RHS, Overflow);
6999-
}
6986+
APInt Result = IsSigned ? MaybeLHS->sadd_ov(*MaybeRHS, Overflow)
6987+
: MaybeLHS->uadd_ov(*MaybeRHS, Overflow);
70006988
MatchInfo = [=](MachineIRBuilder &B) {
70016989
B.buildConstant(Dst, Result);
70026990
B.buildConstant(Carry, Overflow);
@@ -7023,33 +7011,23 @@ bool CombinerHelper::matchAddOverflow(MachineInstr &MI, BuildFnTy &MatchInfo) {
70237011
std::optional<APInt> MaybeAddRHS =
70247012
getConstantOrConstantSplatVector(AddLHS->getRHSReg());
70257013
if (MaybeAddRHS) {
7026-
unsigned BitWidth =
7027-
std::max(MaybeRHS->getBitWidth(), MaybeAddRHS->getBitWidth());
70287014
bool Overflow;
7029-
APInt NewC;
7030-
if (IsSigned) {
7031-
APInt LHS = MaybeRHS->sext(BitWidth);
7032-
APInt RHS = MaybeAddRHS->sext(BitWidth);
7033-
NewC = LHS.sadd_ov(RHS, Overflow);
7034-
} else {
7035-
APInt LHS = MaybeRHS->zext(BitWidth);
7036-
APInt RHS = MaybeAddRHS->zext(BitWidth);
7037-
NewC = LHS.uadd_ov(RHS, Overflow);
7038-
}
7015+
APInt NewC = IsSigned ? MaybeAddRHS->sadd_ov(*MaybeRHS, Overflow)
7016+
: MaybeAddRHS->uadd_ov(*MaybeRHS, Overflow);
70397017
if (!Overflow && isConstantLegalOrBeforeLegalizer(DstTy)) {
70407018
if (IsSigned) {
70417019
MatchInfo = [=](MachineIRBuilder &B) {
70427020
auto ConstRHS = B.buildConstant(DstTy, NewC);
70437021
B.buildSAddo(Dst, Carry, AddLHS->getLHSReg(), ConstRHS);
70447022
};
70457023
return true;
7046-
} else {
7047-
MatchInfo = [=](MachineIRBuilder &B) {
7048-
auto ConstRHS = B.buildConstant(DstTy, NewC);
7049-
B.buildUAddo(Dst, Carry, AddLHS->getLHSReg(), ConstRHS);
7050-
};
7051-
return true;
70527024
}
7025+
// !IsSigned
7026+
MatchInfo = [=](MachineIRBuilder &B) {
7027+
auto ConstRHS = B.buildConstant(DstTy, NewC);
7028+
B.buildUAddo(Dst, Carry, AddLHS->getLHSReg(), ConstRHS);
7029+
};
7030+
return true;
70537031
}
70547032
}
70557033
};

0 commit comments

Comments
 (0)