diff --git a/llvm/lib/CodeGen/TypePromotion.cpp b/llvm/lib/CodeGen/TypePromotion.cpp --- a/llvm/lib/CodeGen/TypePromotion.cpp +++ b/llvm/lib/CodeGen/TypePromotion.cpp @@ -281,7 +281,7 @@ // wrap in respect to itself in the original bitwidth. If it doesn't wrap, // just underflows the range, the icmp would give the same result whether the // result has been truncated or not. We calculate this by: - // - Zero extending both constants, if needed, to 32-bits. + // - Zero extending both constants, if needed, to RegisterBitWidth. // - Take the absolute value of I's constant, adding this to the icmp const. // - Check that this value is not out of range for small type. If it is, it // means that it has underflowed enough to wrap around the icmp constant. @@ -359,11 +359,8 @@ return false; // Now check that the result can't wrap on itself. - APInt Total = ICmpConst->getValue().getBitWidth() < 32 ? - ICmpConst->getValue().zext(32) : ICmpConst->getValue(); - - Total += OverflowConst->getValue().getBitWidth() < 32 ? - OverflowConst->getValue().abs().zext(32) : OverflowConst->getValue().abs(); + APInt Total = ICmpConst->getValue().zextOrSelf(RegisterBitWidth); + Total += OverflowConst->getValue().abs().zextOrSelf(RegisterBitWidth); APInt Max = APInt::getAllOnes(TypePromotion::TypeSize);