Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upGitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
Always inline simple BytePos and CharPos methods. #50407
Conversation
Because they are (a) trivial, and (b) super hot. This change speeds up most rustc-benchmarks, the best by 5%.
|
(rust_highfive has picked a reviewer for you, use r? to override) |
|
@bors r+ Thanks, @nnethercote! |
|
|
…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%
|
Just curious. Why they are not inlined by the optimizer? |
|
They weren't |
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:
…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%
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:
Because they are (a) trivial, and (b) super hot.
This change speeds up most rustc-perf benchmarks, the best by 5%.
Full measurements: