Skip to content

Commit 37e5a37

Browse files
committed
Use BinOp::Cmp for iNN::signum
This way it can use the nice new LLVM intrinsic in LLVM20.
1 parent 071d976 commit 37e5a37

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

Diff for: core/src/intrinsics/mod.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -2528,13 +2528,15 @@ pub const fn bswap<T: Copy>(_x: T) -> T;
25282528
#[rustc_intrinsic]
25292529
pub const fn bitreverse<T: Copy>(_x: T) -> T;
25302530

2531-
/// Does a three-way comparison between the two integer arguments.
2531+
/// Does a three-way comparison between the two arguments,
2532+
/// which must be of character or integer (signed or unsigned) type.
25322533
///
2533-
/// This is included as an intrinsic as it's useful to let it be one thing
2534-
/// in MIR, rather than the multiple checks and switches that make its IR
2535-
/// large and difficult to optimize.
2534+
/// This was originally added because it greatly simplified the MIR in `cmp`
2535+
/// implementations, and then LLVM 20 added a backend intrinsic for it too.
25362536
///
25372537
/// The stabilized version of this intrinsic is [`Ord::cmp`].
2538+
#[rustc_intrinsic_const_stable_indirect]
2539+
#[rustc_nounwind]
25382540
#[rustc_intrinsic]
25392541
pub const fn three_way_compare<T: Copy>(_lhs: T, _rhss: T) -> crate::cmp::Ordering;
25402542

Diff for: core/src/num/int_macros.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -3571,10 +3571,7 @@ macro_rules! int_impl {
35713571
// so delegate it to `Ord` which is already producing -1/0/+1
35723572
// exactly like we need and can be the place to deal with the complexity.
35733573

3574-
// FIXME(const-hack): replace with cmp
3575-
if self < 0 { -1 }
3576-
else if self == 0 { 0 }
3577-
else { 1 }
3574+
crate::intrinsics::three_way_compare(self, 0) as Self
35783575
}
35793576

35803577
/// Returns `true` if `self` is positive and `false` if the number is zero or

0 commit comments

Comments
 (0)