Skip to content

Commit

Permalink
Slightly simplify the iN::partial_cmp MIR
Browse files Browse the repository at this point in the history
This saves some debug and scope metadata in every single function that calls it.

Normally wouldn't be worth it, but with the derives there's *so* many of these.
  • Loading branch information
scottmcm committed Mar 24, 2024
1 parent 3da115a commit 8d5977d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 20 deletions.
21 changes: 14 additions & 7 deletions library/core/src/cmp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1548,7 +1548,14 @@ mod impls {
impl PartialOrd for $t {
#[inline]
fn partial_cmp(&self, other: &$t) -> Option<Ordering> {
Some(self.cmp(other))
#[cfg(bootstrap)]
{
Some(self.cmp(other))
}
#[cfg(not(bootstrap))]
{
Some(crate::intrinsics::three_way_compare(*self, *other))
}
}
#[inline(always)]
fn lt(&self, other: &$t) -> bool { (*self) < (*other) }
Expand All @@ -1566,12 +1573,12 @@ mod impls {
fn cmp(&self, other: &$t) -> Ordering {
#[cfg(bootstrap)]
{
// The order here is important to generate more optimal assembly.
// See <https://github.com/rust-lang/rust/issues/63758> for more info.
if *self < *other { Less }
else if *self == *other { Equal }
else { Greater }
}
// The order here is important to generate more optimal assembly.
// See <https://github.com/rust-lang/rust/issues/63758> for more info.
if *self < *other { Less }
else if *self == *other { Equal }
else { Greater }
}
#[cfg(not(bootstrap))]
{
crate::intrinsics::three_way_compare(*self, *other)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,16 @@ fn <impl at $DIR/derived_ord.rs:6:10: 6:20>::partial_cmp(_1: &MultiField, _2: &M
scope 2 (inlined std::cmp::impls::<impl PartialOrd for char>::partial_cmp) {
debug self => _3;
debug other => _4;
let mut _5: char;
let mut _6: char;
let mut _7: std::cmp::Ordering;
scope 3 (inlined std::cmp::impls::<impl Ord for char>::cmp) {
debug self => _3;
debug other => _4;
let mut _5: char;
let mut _6: char;
}
}
scope 4 (inlined std::cmp::impls::<impl PartialOrd for i16>::partial_cmp) {
scope 3 (inlined std::cmp::impls::<impl PartialOrd for i16>::partial_cmp) {
debug self => _10;
debug other => _11;
let mut _12: i16;
let mut _13: i16;
let mut _14: std::cmp::Ordering;
scope 5 (inlined std::cmp::impls::<impl Ord for i16>::cmp) {
debug self => _10;
debug other => _11;
let mut _12: i16;
let mut _13: i16;
}
}

bb0: {
Expand Down

0 comments on commit 8d5977d

Please sign in to comment.