@@ -6982,21 +6982,9 @@ bool CombinerHelper::matchAddOverflow(MachineInstr &MI, BuildFnTy &MatchInfo) {
6982
6982
// Fold addo(c1, c2) -> c3, carry.
6983
6983
if (MaybeLHS && MaybeRHS && isConstantLegalOrBeforeLegalizer (DstTy) &&
6984
6984
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 ());
6989
6985
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);
7000
6988
MatchInfo = [=](MachineIRBuilder &B) {
7001
6989
B.buildConstant (Dst, Result);
7002
6990
B.buildConstant (Carry, Overflow);
@@ -7023,33 +7011,23 @@ bool CombinerHelper::matchAddOverflow(MachineInstr &MI, BuildFnTy &MatchInfo) {
7023
7011
std::optional<APInt> MaybeAddRHS =
7024
7012
getConstantOrConstantSplatVector (AddLHS->getRHSReg ());
7025
7013
if (MaybeAddRHS) {
7026
- unsigned BitWidth =
7027
- std::max (MaybeRHS->getBitWidth (), MaybeAddRHS->getBitWidth ());
7028
7014
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);
7039
7017
if (!Overflow && isConstantLegalOrBeforeLegalizer (DstTy)) {
7040
7018
if (IsSigned) {
7041
7019
MatchInfo = [=](MachineIRBuilder &B) {
7042
7020
auto ConstRHS = B.buildConstant (DstTy, NewC);
7043
7021
B.buildSAddo (Dst, Carry, AddLHS->getLHSReg (), ConstRHS);
7044
7022
};
7045
7023
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 ;
7052
7024
}
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 ;
7053
7031
}
7054
7032
}
7055
7033
};
0 commit comments