Skip to content

Commit

Permalink
Always inline simple BytePos and CharPos methods.
Browse files Browse the repository at this point in the history
Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-benchmarks, the best by 5%.
  • Loading branch information
nnethercote committed May 3, 2018
1 parent f76f6fb commit e740b97
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/libsyntax_pos/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1150,13 +1150,17 @@ pub struct CharPos(pub usize);
// have been unsuccessful

impl Pos for BytePos {
#[inline(always)]
fn from_usize(n: usize) -> BytePos { BytePos(n as u32) }

#[inline(always)]
fn to_usize(&self) -> usize { let BytePos(n) = *self; n as usize }
}

impl Add for BytePos {
type Output = BytePos;

#[inline(always)]
fn add(self, rhs: BytePos) -> BytePos {
BytePos((self.to_usize() + rhs.to_usize()) as u32)
}
Expand All @@ -1165,6 +1169,7 @@ impl Add for BytePos {
impl Sub for BytePos {
type Output = BytePos;

#[inline(always)]
fn sub(self, rhs: BytePos) -> BytePos {
BytePos((self.to_usize() - rhs.to_usize()) as u32)
}
Expand All @@ -1183,13 +1188,17 @@ impl Decodable for BytePos {
}

impl Pos for CharPos {
#[inline(always)]
fn from_usize(n: usize) -> CharPos { CharPos(n) }

#[inline(always)]
fn to_usize(&self) -> usize { let CharPos(n) = *self; n }
}

impl Add for CharPos {
type Output = CharPos;

#[inline(always)]
fn add(self, rhs: CharPos) -> CharPos {
CharPos(self.to_usize() + rhs.to_usize())
}
Expand All @@ -1198,6 +1207,7 @@ impl Add for CharPos {
impl Sub for CharPos {
type Output = CharPos;

#[inline(always)]
fn sub(self, rhs: CharPos) -> CharPos {
CharPos(self.to_usize() - rhs.to_usize())
}
Expand Down

0 comments on commit e740b97

Please sign in to comment.