New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always inline simple BytePos and CharPos methods. #50407

Merged
merged 1 commit into from May 3, 2018

Conversation

Projects
None yet
7 participants
@nnethercote
Contributor

nnethercote commented May 3, 2018

Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-perf benchmarks, the best by 5%.

Full measurements:

coercions-check
	avg: -3.0%	min: -5.4%	max: -1.3%
helloworld-check
	avg: -3.9%	min: -4.1%	max: -3.6%
unify-linearly-check
	avg: -3.1%	min: -3.7%	max: -2.5%
deeply-nested-check
	avg: -2.6%	min: -3.6%	max: -2.1%
coercions-opt
	avg: -2.1%	min: -3.6%	max: -1.3%
coercions
	avg: -2.0%	min: -3.5%	max: -1.0%
issue-46449-check
	avg: -2.8%	min: -3.1%	max: -2.6%
parser-check
	avg: -2.6%	min: -3.1%	max: -2.0%
deeply-nested-opt
	avg: -1.5%	min: -3.0%	max: -0.8%
deeply-nested
	avg: -1.8%	min: -2.9%	max: -1.1%
issue-46449
	avg: -1.4%	min: -2.7%	max: -1.1%
issue-46449-opt
	avg: -1.0%	min: -2.7%	max: -0.5%
regression-31157-check
	avg: -1.7%	min: -2.3%	max: -1.1%
tuple-stress-opt
	avg: -1.0%	min: -2.2%	max: -0.5%
tokio-webpush-simple-check
	avg: -1.6%	min: -2.1%	max: -1.2%
tuple-stress-check
	avg: -1.2%	min: -2.1%	max: -0.8%
unused-warnings-check
	avg: -1.6%	min: -2.0%	max: -1.4%
encoding-check
	avg: -1.4%	min: -1.8%	max: -1.0%
tuple-stress
	avg: -1.0%	min: -1.7%	max: -0.6%
encoding-opt
	avg: -0.9%	min: -1.6%	max: -0.3%
unused-warnings
	avg: -1.3%	min: -1.6%	max: -1.2%
unused-warnings-opt
	avg: -1.3%	min: -1.5%	max: -1.2%
encoding
	avg: -1.0%	min: -1.5%	max: -0.4%
html5ever-opt
	avg: -0.7%	min: -1.5%	max: -0.3%
futures
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-check
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-opt
	avg: -0.8%	min: -1.4%	max: -0.3%
regression-31157-opt
	avg: -0.5%	min: -1.4%	max: -0.0%
unify-linearly-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
parser-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
helloworld
	avg: -1.3%	min: -1.4%	max: -1.3%
helloworld-opt
	avg: -1.3%	min: -1.3%	max: -1.3%
parser
	avg: -1.2%	min: -1.3%	max: -1.0%
regex-check
	avg: -1.1%	min: -1.3%	max: -0.7%
unify-linearly
	avg: -1.1%	min: -1.3%	max: -1.0%
syn-check
	avg: -0.8%	min: -1.3%	max: -0.3%
piston-image-check
	avg: -0.7%	min: -1.2%	max: -0.4%
regex-opt
	avg: -0.5%	min: -1.2%	max: -0.0%
syn
	avg: -0.6%	min: -1.2%	max: -0.3%
hyper
	avg: -0.8%	min: -1.2%	max: -0.4%
syn-opt
	avg: -0.5%	min: -1.2%	max: -0.1%
regex
	avg: -0.7%	min: -1.2%	max: -0.3%
regression-31157
	avg: -0.7%	min: -1.2%	max: -0.3%
clap-rs-check
	avg: -0.6%	min: -1.1%	max: -0.2%
hyper-check
	avg: -0.8%	min: -1.1%	max: -0.5%
piston-image-opt
	avg: -0.4%	min: -1.1%	max: -0.0%
hyper-opt
	avg: -0.6%	min: -1.0%	max: 0.0%
inflate
	avg: -0.4%	min: -1.0%	max: -0.2%
html5ever
	avg: -0.5%	min: -1.0%	max: -0.2%
inflate-opt
	avg: -0.3%	min: -1.0%	max: 0.3%
deep-vector-check
	avg: -0.6%	min: -1.0%	max: -0.3%
style-servo-check
	avg: -0.7%	min: -1.0%	max: -0.5%
tokio-webpush-simple-opt
	avg: -0.3%	min: -0.9%	max: 0.0%
inflate-check
	avg: -0.3%	min: -0.9%	max: -0.1%
piston-image
	avg: -0.4%	min: -0.8%	max: -0.2%
deep-vector
	avg: -0.4%	min: -0.8%	max: -0.1%
clap-rs
	avg: -0.4%	min: -0.7%	max: -0.2%
deep-vector-opt
	avg: -0.2%	min: -0.7%	max: 0.2%
style-servo
	avg: -0.3%	min: -0.7%	max: 0.1%
crates.io
	avg: -0.4%	min: -0.6%	max: -0.2%
crates.io-opt
	avg: -0.3%	min: -0.6%	max: -0.1%
tokio-webpush-simple
	avg: -0.4%	min: -0.6%	max: -0.3%
crates.io-check
	avg: -0.4%	min: -0.6%	max: -0.3%
html5ever-check
	avg: -0.4%	min: -0.6%	max: -0.2%
serde
	avg: -0.1%	min: -0.6%	max: 0.2%
serde-check
	avg: -0.1%	min: -0.5%	max: 0.4%
serde-opt
	avg: -0.2%	min: -0.5%	max: -0.1%
style-servo-opt
	avg: -0.2%	min: -0.4%	max: -0.0%
clap-rs-opt
	avg: -0.1%	min: -0.3%	max: 0.0%

Always inline simple BytePos and CharPos methods.
Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-benchmarks, the best by 5%.
@rust-highfive

This comment has been minimized.

Collaborator

rust-highfive commented May 3, 2018

r? @nikomatsakis

(rust_highfive has picked a reviewer for you, use r? to override)

@michaelwoerister

This comment has been minimized.

Contributor

michaelwoerister commented May 3, 2018

@bors r+

Thanks, @nnethercote!

@bors

This comment has been minimized.

Contributor

bors commented May 3, 2018

📌 Commit e740b97 has been approved by michaelwoerister

kennytm added a commit to kennytm/rust that referenced this pull request May 3, 2018

Rollup merge of rust-lang#50407 - nnethercote:inline-BytePos, r=micha…
…elwoerister

Always inline simple BytePos and CharPos methods.

Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-perf benchmarks, the best by 5%.

Full measurements:
```
coercions-check
	avg: -3.0%	min: -5.4%	max: -1.3%
helloworld-check
	avg: -3.9%	min: -4.1%	max: -3.6%
unify-linearly-check
	avg: -3.1%	min: -3.7%	max: -2.5%
deeply-nested-check
	avg: -2.6%	min: -3.6%	max: -2.1%
coercions-opt
	avg: -2.1%	min: -3.6%	max: -1.3%
coercions
	avg: -2.0%	min: -3.5%	max: -1.0%
issue-46449-check
	avg: -2.8%	min: -3.1%	max: -2.6%
parser-check
	avg: -2.6%	min: -3.1%	max: -2.0%
deeply-nested-opt
	avg: -1.5%	min: -3.0%	max: -0.8%
deeply-nested
	avg: -1.8%	min: -2.9%	max: -1.1%
issue-46449
	avg: -1.4%	min: -2.7%	max: -1.1%
issue-46449-opt
	avg: -1.0%	min: -2.7%	max: -0.5%
regression-31157-check
	avg: -1.7%	min: -2.3%	max: -1.1%
tuple-stress-opt
	avg: -1.0%	min: -2.2%	max: -0.5%
tokio-webpush-simple-check
	avg: -1.6%	min: -2.1%	max: -1.2%
tuple-stress-check
	avg: -1.2%	min: -2.1%	max: -0.8%
unused-warnings-check
	avg: -1.6%	min: -2.0%	max: -1.4%
encoding-check
	avg: -1.4%	min: -1.8%	max: -1.0%
tuple-stress
	avg: -1.0%	min: -1.7%	max: -0.6%
encoding-opt
	avg: -0.9%	min: -1.6%	max: -0.3%
unused-warnings
	avg: -1.3%	min: -1.6%	max: -1.2%
unused-warnings-opt
	avg: -1.3%	min: -1.5%	max: -1.2%
encoding
	avg: -1.0%	min: -1.5%	max: -0.4%
html5ever-opt
	avg: -0.7%	min: -1.5%	max: -0.3%
futures
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-check
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-opt
	avg: -0.8%	min: -1.4%	max: -0.3%
regression-31157-opt
	avg: -0.5%	min: -1.4%	max: -0.0%
unify-linearly-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
parser-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
helloworld
	avg: -1.3%	min: -1.4%	max: -1.3%
helloworld-opt
	avg: -1.3%	min: -1.3%	max: -1.3%
parser
	avg: -1.2%	min: -1.3%	max: -1.0%
regex-check
	avg: -1.1%	min: -1.3%	max: -0.7%
unify-linearly
	avg: -1.1%	min: -1.3%	max: -1.0%
syn-check
	avg: -0.8%	min: -1.3%	max: -0.3%
piston-image-check
	avg: -0.7%	min: -1.2%	max: -0.4%
regex-opt
	avg: -0.5%	min: -1.2%	max: -0.0%
syn
	avg: -0.6%	min: -1.2%	max: -0.3%
hyper
	avg: -0.8%	min: -1.2%	max: -0.4%
syn-opt
	avg: -0.5%	min: -1.2%	max: -0.1%
regex
	avg: -0.7%	min: -1.2%	max: -0.3%
regression-31157
	avg: -0.7%	min: -1.2%	max: -0.3%
clap-rs-check
	avg: -0.6%	min: -1.1%	max: -0.2%
hyper-check
	avg: -0.8%	min: -1.1%	max: -0.5%
piston-image-opt
	avg: -0.4%	min: -1.1%	max: -0.0%
hyper-opt
	avg: -0.6%	min: -1.0%	max: 0.0%
inflate
	avg: -0.4%	min: -1.0%	max: -0.2%
html5ever
	avg: -0.5%	min: -1.0%	max: -0.2%
inflate-opt
	avg: -0.3%	min: -1.0%	max: 0.3%
deep-vector-check
	avg: -0.6%	min: -1.0%	max: -0.3%
style-servo-check
	avg: -0.7%	min: -1.0%	max: -0.5%
tokio-webpush-simple-opt
	avg: -0.3%	min: -0.9%	max: 0.0%
inflate-check
	avg: -0.3%	min: -0.9%	max: -0.1%
piston-image
	avg: -0.4%	min: -0.8%	max: -0.2%
deep-vector
	avg: -0.4%	min: -0.8%	max: -0.1%
clap-rs
	avg: -0.4%	min: -0.7%	max: -0.2%
deep-vector-opt
	avg: -0.2%	min: -0.7%	max: 0.2%
style-servo
	avg: -0.3%	min: -0.7%	max: 0.1%
crates.io
	avg: -0.4%	min: -0.6%	max: -0.2%
crates.io-opt
	avg: -0.3%	min: -0.6%	max: -0.1%
tokio-webpush-simple
	avg: -0.4%	min: -0.6%	max: -0.3%
crates.io-check
	avg: -0.4%	min: -0.6%	max: -0.3%
html5ever-check
	avg: -0.4%	min: -0.6%	max: -0.2%
serde
	avg: -0.1%	min: -0.6%	max: 0.2%
serde-check
	avg: -0.1%	min: -0.5%	max: 0.4%
serde-opt
	avg: -0.2%	min: -0.5%	max: -0.1%
style-servo-opt
	avg: -0.2%	min: -0.4%	max: -0.0%
clap-rs-opt
	avg: -0.1%	min: -0.3%	max: 0.0%
@arthurprs

This comment has been minimized.

Contributor

arthurprs commented May 3, 2018

Just curious. Why they are not inlined by the optimizer?

@rkruppe

This comment has been minimized.

Contributor

rkruppe commented May 3, 2018

They weren't #[inline] before and are used across codegen units. I am pretty sure that #[inline] would have been entirely sufficient.

bors added a commit that referenced this pull request May 3, 2018

Auto merge of #50413 - kennytm:rollup, r=kennytm
Rollup of 10 pull requests

Successful merges:

 - #50302 (Add query search order check)
 - #50320 (Fix invalid path generation in rustdoc search)
 - #50349 (Rename "show type declaration" to "show declaration")
 - #50360 (Clarify wordings of the `unstable_name_collision` lint.)
 - #50365 (Use two vectors in nearest_common_ancestor.)
 - #50393 (Allow unaligned reads in constants)
 - #50401 (Revert "Implement FromStr for PathBuf")
 - #50407 (Always inline simple BytePos and CharPos methods.)
 - #50417 (Update Cargo)
 - #50421 (Fix ICE when using a..=b in a closure.)

Failed merges:

kennytm added a commit to kennytm/rust that referenced this pull request May 3, 2018

Rollup merge of rust-lang#50407 - nnethercote:inline-BytePos, r=micha…
…elwoerister

Always inline simple BytePos and CharPos methods.

Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-perf benchmarks, the best by 5%.

Full measurements:
```
coercions-check
	avg: -3.0%	min: -5.4%	max: -1.3%
helloworld-check
	avg: -3.9%	min: -4.1%	max: -3.6%
unify-linearly-check
	avg: -3.1%	min: -3.7%	max: -2.5%
deeply-nested-check
	avg: -2.6%	min: -3.6%	max: -2.1%
coercions-opt
	avg: -2.1%	min: -3.6%	max: -1.3%
coercions
	avg: -2.0%	min: -3.5%	max: -1.0%
issue-46449-check
	avg: -2.8%	min: -3.1%	max: -2.6%
parser-check
	avg: -2.6%	min: -3.1%	max: -2.0%
deeply-nested-opt
	avg: -1.5%	min: -3.0%	max: -0.8%
deeply-nested
	avg: -1.8%	min: -2.9%	max: -1.1%
issue-46449
	avg: -1.4%	min: -2.7%	max: -1.1%
issue-46449-opt
	avg: -1.0%	min: -2.7%	max: -0.5%
regression-31157-check
	avg: -1.7%	min: -2.3%	max: -1.1%
tuple-stress-opt
	avg: -1.0%	min: -2.2%	max: -0.5%
tokio-webpush-simple-check
	avg: -1.6%	min: -2.1%	max: -1.2%
tuple-stress-check
	avg: -1.2%	min: -2.1%	max: -0.8%
unused-warnings-check
	avg: -1.6%	min: -2.0%	max: -1.4%
encoding-check
	avg: -1.4%	min: -1.8%	max: -1.0%
tuple-stress
	avg: -1.0%	min: -1.7%	max: -0.6%
encoding-opt
	avg: -0.9%	min: -1.6%	max: -0.3%
unused-warnings
	avg: -1.3%	min: -1.6%	max: -1.2%
unused-warnings-opt
	avg: -1.3%	min: -1.5%	max: -1.2%
encoding
	avg: -1.0%	min: -1.5%	max: -0.4%
html5ever-opt
	avg: -0.7%	min: -1.5%	max: -0.3%
futures
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-check
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-opt
	avg: -0.8%	min: -1.4%	max: -0.3%
regression-31157-opt
	avg: -0.5%	min: -1.4%	max: -0.0%
unify-linearly-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
parser-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
helloworld
	avg: -1.3%	min: -1.4%	max: -1.3%
helloworld-opt
	avg: -1.3%	min: -1.3%	max: -1.3%
parser
	avg: -1.2%	min: -1.3%	max: -1.0%
regex-check
	avg: -1.1%	min: -1.3%	max: -0.7%
unify-linearly
	avg: -1.1%	min: -1.3%	max: -1.0%
syn-check
	avg: -0.8%	min: -1.3%	max: -0.3%
piston-image-check
	avg: -0.7%	min: -1.2%	max: -0.4%
regex-opt
	avg: -0.5%	min: -1.2%	max: -0.0%
syn
	avg: -0.6%	min: -1.2%	max: -0.3%
hyper
	avg: -0.8%	min: -1.2%	max: -0.4%
syn-opt
	avg: -0.5%	min: -1.2%	max: -0.1%
regex
	avg: -0.7%	min: -1.2%	max: -0.3%
regression-31157
	avg: -0.7%	min: -1.2%	max: -0.3%
clap-rs-check
	avg: -0.6%	min: -1.1%	max: -0.2%
hyper-check
	avg: -0.8%	min: -1.1%	max: -0.5%
piston-image-opt
	avg: -0.4%	min: -1.1%	max: -0.0%
hyper-opt
	avg: -0.6%	min: -1.0%	max: 0.0%
inflate
	avg: -0.4%	min: -1.0%	max: -0.2%
html5ever
	avg: -0.5%	min: -1.0%	max: -0.2%
inflate-opt
	avg: -0.3%	min: -1.0%	max: 0.3%
deep-vector-check
	avg: -0.6%	min: -1.0%	max: -0.3%
style-servo-check
	avg: -0.7%	min: -1.0%	max: -0.5%
tokio-webpush-simple-opt
	avg: -0.3%	min: -0.9%	max: 0.0%
inflate-check
	avg: -0.3%	min: -0.9%	max: -0.1%
piston-image
	avg: -0.4%	min: -0.8%	max: -0.2%
deep-vector
	avg: -0.4%	min: -0.8%	max: -0.1%
clap-rs
	avg: -0.4%	min: -0.7%	max: -0.2%
deep-vector-opt
	avg: -0.2%	min: -0.7%	max: 0.2%
style-servo
	avg: -0.3%	min: -0.7%	max: 0.1%
crates.io
	avg: -0.4%	min: -0.6%	max: -0.2%
crates.io-opt
	avg: -0.3%	min: -0.6%	max: -0.1%
tokio-webpush-simple
	avg: -0.4%	min: -0.6%	max: -0.3%
crates.io-check
	avg: -0.4%	min: -0.6%	max: -0.3%
html5ever-check
	avg: -0.4%	min: -0.6%	max: -0.2%
serde
	avg: -0.1%	min: -0.6%	max: 0.2%
serde-check
	avg: -0.1%	min: -0.5%	max: 0.4%
serde-opt
	avg: -0.2%	min: -0.5%	max: -0.1%
style-servo-opt
	avg: -0.2%	min: -0.4%	max: -0.0%
clap-rs-opt
	avg: -0.1%	min: -0.3%	max: 0.0%

bors added a commit that referenced this pull request May 3, 2018

Auto merge of #50413 - kennytm:rollup, r=kennytm
Rollup of 12 pull requests

Successful merges:

 - #50302 (Add query search order check)
 - #50320 (Fix invalid path generation in rustdoc search)
 - #50349 (Rename "show type declaration" to "show declaration")
 - #50360 (Clarify wordings of the `unstable_name_collision` lint.)
 - #50365 (Use two vectors in nearest_common_ancestor.)
 - #50393 (Allow unaligned reads in constants)
 - #50401 (Revert "Implement FromStr for PathBuf")
 - #50406 (Forbid constructing empty identifiers from concat_idents)
 - #50407 (Always inline simple BytePos and CharPos methods.)
 - #50416 (check if the token is a lifetime before parsing)
 - #50417 (Update Cargo)
 - #50421 (Fix ICE when using a..=b in a closure.)

Failed merges:

@bors bors merged commit e740b97 into rust-lang:master May 3, 2018

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details

@nnethercote nnethercote deleted the nnethercote:inline-BytePos branch May 4, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment