without modifying the original"]
#[inline]
pub const fn checked_div(self, rhs: Self) -> Option<Self> {
- if unlikely!(rhs == 0 || (self == Self::MIN && rhs == -1)) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!(rhs == 0 || ((self == Self::MIN) & (rhs == -1))) {
None
} else {
// SAFETY: div by zero and by INT_MIN have been checked above
without modifying the original"]
#[inline]
pub const fn checked_div_euclid(self, rhs: Self) -> Option<Self> {
- if unlikely!(rhs == 0 || (self == Self::MIN && rhs == -1)) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!(rhs == 0 || ((self == Self::MIN) & (rhs == -1))) {
None
} else {
Some(self.div_euclid(rhs))
without modifying the original"]
#[inline]
pub const fn checked_rem(self, rhs: Self) -> Option<Self> {
- if unlikely!(rhs == 0 || (self == Self::MIN && rhs == -1)) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!(rhs == 0 || ((self == Self::MIN) & (rhs == -1))) {
None
} else {
// SAFETY: div by zero and by INT_MIN have been checked above
without modifying the original"]
#[inline]
pub const fn checked_rem_euclid(self, rhs: Self) -> Option<Self> {
- if unlikely!(rhs == 0 || (self == Self::MIN && rhs == -1)) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!(rhs == 0 || ((self == Self::MIN) & (rhs == -1))) {
None
} else {
Some(self.rem_euclid(rhs))
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn overflowing_div(self, rhs: Self) -> (Self, bool) {
- if unlikely!(self == Self::MIN && rhs == -1) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!((self == Self::MIN) & (rhs == -1)) {
(self, true)
} else {
(self / rhs, false)
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn overflowing_div_euclid(self, rhs: Self) -> (Self, bool) {
- if unlikely!(self == Self::MIN && rhs == -1) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!((self == Self::MIN) & (rhs == -1)) {
(self, true)
} else {
(self.div_euclid(rhs), false)
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn overflowing_rem(self, rhs: Self) -> (Self, bool) {
- if unlikely!(self == Self::MIN && rhs == -1) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!((self == Self::MIN) & (rhs == -1)) {
(0, true)
} else {
(self % rhs, false)
without modifying the original"]
#[inline]
pub const fn overflowing_rem_euclid(self, rhs: Self) -> (Self, bool) {
- if unlikely!(self == Self::MIN && rhs == -1) {
+ // Using `&` helps LLVM see that it is the same check made in division.
+ if unlikely!((self == Self::MIN) & (rhs == -1)) {
(0, true)
} else {
(self.rem_euclid(rhs), false)