mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 06:22:00 +00:00
Rollup merge of #110814 - WaffleLapkin:sprinkle_#inline, r=Nilstrieb
Sprinkle some `#[inline]` in `rustc_data_structures::tagged_ptr` This is based on `nm --demangle (rustc +a --print sysroot)/lib/librustc_driver-*.so | rg CopyTaggedPtr` which shows many methods that should probably be inlined. May fix the regression in https://github.com/rust-lang/rust/pull/110795. r? ```@Nilstrieb```
This commit is contained in:
commit
b1ff6e3e10
@ -82,11 +82,13 @@ where
|
||||
/// drop, use [`TaggedPtr`] instead.
|
||||
///
|
||||
/// [`TaggedPtr`]: crate::tagged_ptr::TaggedPtr
|
||||
#[inline]
|
||||
pub fn new(pointer: P, tag: T) -> Self {
|
||||
Self { packed: Self::pack(P::into_ptr(pointer), tag), tag_ghost: PhantomData }
|
||||
}
|
||||
|
||||
/// Retrieves the pointer.
|
||||
#[inline]
|
||||
pub fn pointer(self) -> P
|
||||
where
|
||||
P: Copy,
|
||||
@ -123,6 +125,7 @@ where
|
||||
/// according to `self.packed` encoding scheme.
|
||||
///
|
||||
/// [`P::into_ptr`]: Pointer::into_ptr
|
||||
#[inline]
|
||||
fn pack(ptr: NonNull<P::Target>, tag: T) -> NonNull<P::Target> {
|
||||
// Trigger assert!
|
||||
let () = Self::ASSERTION;
|
||||
@ -145,6 +148,7 @@ where
|
||||
}
|
||||
|
||||
/// Retrieves the original raw pointer from `self.packed`.
|
||||
#[inline]
|
||||
pub(super) fn pointer_raw(&self) -> NonNull<P::Target> {
|
||||
self.packed.map_addr(|addr| unsafe { NonZeroUsize::new_unchecked(addr.get() << T::BITS) })
|
||||
}
|
||||
@ -184,6 +188,7 @@ where
|
||||
P: Pointer + Copy,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn clone(&self) -> Self {
|
||||
*self
|
||||
}
|
||||
@ -196,6 +201,7 @@ where
|
||||
{
|
||||
type Target = P::Target;
|
||||
|
||||
#[inline]
|
||||
fn deref(&self) -> &Self::Target {
|
||||
// Safety:
|
||||
// `pointer_raw` returns the original pointer from `P::into_ptr` which,
|
||||
@ -209,6 +215,7 @@ where
|
||||
P: Pointer + DerefMut,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
// Safety:
|
||||
// `pointer_raw` returns the original pointer from `P::into_ptr` which,
|
||||
@ -235,6 +242,7 @@ where
|
||||
P: Pointer,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.packed == other.packed
|
||||
}
|
||||
@ -252,6 +260,7 @@ where
|
||||
P: Pointer,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
self.packed.hash(state);
|
||||
}
|
||||
|
@ -30,16 +30,19 @@ where
|
||||
T: Tag,
|
||||
{
|
||||
/// Tags `pointer` with `tag`.
|
||||
#[inline]
|
||||
pub fn new(pointer: P, tag: T) -> Self {
|
||||
TaggedPtr { raw: CopyTaggedPtr::new(pointer, tag) }
|
||||
}
|
||||
|
||||
/// Retrieves the tag.
|
||||
#[inline]
|
||||
pub fn tag(&self) -> T {
|
||||
self.raw.tag()
|
||||
}
|
||||
|
||||
/// Sets the tag to a new value.
|
||||
#[inline]
|
||||
pub fn set_tag(&mut self, tag: T) {
|
||||
self.raw.set_tag(tag)
|
||||
}
|
||||
@ -63,6 +66,8 @@ where
|
||||
T: Tag,
|
||||
{
|
||||
type Target = P::Target;
|
||||
|
||||
#[inline]
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.raw.deref()
|
||||
}
|
||||
@ -73,6 +78,7 @@ where
|
||||
P: Pointer + DerefMut,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
self.raw.deref_mut()
|
||||
}
|
||||
@ -108,6 +114,7 @@ where
|
||||
P: Pointer,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.raw.eq(&other.raw)
|
||||
}
|
||||
@ -125,6 +132,7 @@ where
|
||||
P: Pointer,
|
||||
T: Tag,
|
||||
{
|
||||
#[inline]
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
self.raw.hash(state);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user