-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Rollup of 9 pull requests #74649
Rollup of 9 pull requests #74649
Commits on Jul 15, 2020
-
Rearrange the pipeline of
pow
to gain efficiencyThe check of the `exp` parameter seems useless if we execute the while-loop more than once. The original implementation of `pow` function using one more comparison if the `exp==0` and may break the pipeline of the cpu, which may generate a slower code. The performance gap between the old and the new implementation may be small, but IMO, at least the newer one looks more beautiful. --- bench prog: ``` #![feature(test)] extern crate test; #[macro_export]macro_rules! timing{ ($a:expr)=>{let time=std::time::Instant::now();{$a;}print!("{:?} ",time.elapsed())}; ($a:expr,$b:literal)=>{let time=std::time::Instant::now();let mut a=0;for _ in 0..$b{a^=$a;}print!("{:?} {} ",time.elapsed(),a)} } #[inline] pub fn pow_rust(x:i64, mut exp: u32) -> i64 { let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp /= 2; base = base * base; } if exp == 1 { acc = acc * base; } acc } #[inline] pub fn pow_new(x:i64, mut exp: u32) -> i64 { if exp==0{ 1 }else{ let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp >>= 1; base = base * base; } acc * base } } fn main(){ let a=2i64; let b=1_u32; println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); } ``` bench in my laptop: ``` neutron@Neutron:/me/rust$ rc commit.rs rustc commit.rs && ./commit 3.978419716s 0 4.079765171s 0 3.964630622s 0 3.997127013s 0 4.260304804s 0 3.997638211s 0 3.963195544s 0 4.11657718s 0 4.176054164s 0 3.830128579s 0 3.980396122s 0 3.937258567s 0 3.986055948s 0 4.127804162s 0 4.018943411s 0 4.185568857s 0 4.217512517s 0 3.98313603s 0 3.863018225s 0 4.030447988s 0 3.694878237s 0 4.206987927s 0 4.137608047s 0 4.115564664s 0 neutron@Neutron:/me/rust$ rc commit.rs -O rustc commit.rs -O && ./commit 162.111993ms 0 165.107125ms 0 166.26924ms 0 175.20479ms 0 205.062565ms 0 176.278791ms 0 174.408975ms 0 166.526899ms 0 201.857604ms 0 146.190062ms 0 168.592821ms 0 154.61411ms 0 199.678912ms 0 168.411598ms 0 162.129996ms 0 147.420765ms 0 209.759326ms 0 154.807907ms 0 165.507134ms 0 188.476239ms 0 157.351524ms 0 121.320123ms 0 126.401229ms 0 114.86428ms 0 ```
Configuration menu - View commit details
-
Copy full SHA for 9dee590 - Browse repository at this point
Copy the full SHA 9dee590View commit details
Commits on Jul 16, 2020
-
Configuration menu - View commit details
-
Copy full SHA for ebafab9 - Browse repository at this point
Copy the full SHA ebafab9View commit details -
Configuration menu - View commit details
-
Copy full SHA for 020c0b5 - Browse repository at this point
Copy the full SHA 020c0b5View commit details -
I checked all the implementations, and finally found that there is one function that does not check whether `exp == 0`
Configuration menu - View commit details
-
Copy full SHA for 8f58ce4 - Browse repository at this point
Copy the full SHA 8f58ce4View commit details -
Configuration menu - View commit details
-
Copy full SHA for f3d476b - Browse repository at this point
Copy the full SHA f3d476bView commit details -
finished adding the extra tests to prevent further typo
Configuration menu - View commit details
-
Copy full SHA for 8795845 - Browse repository at this point
Copy the full SHA 8795845View commit details -
Configuration menu - View commit details
-
Copy full SHA for 319db30 - Browse repository at this point
Copy the full SHA 319db30View commit details -
Configuration menu - View commit details
-
Copy full SHA for e2f3e3c - Browse repository at this point
Copy the full SHA e2f3e3cView commit details -
Configuration menu - View commit details
-
Copy full SHA for d5d7ca2 - Browse repository at this point
Copy the full SHA d5d7ca2View commit details -
Configuration menu - View commit details
-
Copy full SHA for 7599e01 - Browse repository at this point
Copy the full SHA 7599e01View commit details -
Configuration menu - View commit details
-
Copy full SHA for 364cacb - Browse repository at this point
Copy the full SHA 364cacbView commit details
Commits on Jul 19, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 6100b74 - Browse repository at this point
Copy the full SHA 6100b74View commit details -
Configuration menu - View commit details
-
Copy full SHA for 4fb260b - Browse repository at this point
Copy the full SHA 4fb260bView commit details
Commits on Jul 21, 2020
-
Add the aarch64-apple-darwin target
This is a basic copy-paste-modify from the existing x86_64-apple-darwin target.
Configuration menu - View commit details
-
Copy full SHA for 4c69d4b - Browse repository at this point
Copy the full SHA 4c69d4bView commit details -
Configuration menu - View commit details
-
Copy full SHA for 804241e - Browse repository at this point
Copy the full SHA 804241eView commit details -
Configuration menu - View commit details
-
Copy full SHA for b3340b5 - Browse repository at this point
Copy the full SHA b3340b5View commit details
Commits on Jul 22, 2020
-
Configuration menu - View commit details
-
Copy full SHA for 430bd39 - Browse repository at this point
Copy the full SHA 430bd39View commit details -
Configuration menu - View commit details
-
Copy full SHA for c74c648 - Browse repository at this point
Copy the full SHA c74c648View commit details -
Configuration menu - View commit details
-
Copy full SHA for d257bac - Browse repository at this point
Copy the full SHA d257bacView commit details -
This adds a dedicated branch for perf to use for CI, intended to allow perf to enqueue builds without needing to use bors. bors is great, but bors requires an open PR to work, and we want to invoke perf on closed PRs sometimes (in particular, rollups).
Configuration menu - View commit details
-
Copy full SHA for 747bc8e - Browse repository at this point
Copy the full SHA 747bc8eView commit details -
Configuration menu - View commit details
-
Copy full SHA for 49b9a64 - Browse repository at this point
Copy the full SHA 49b9a64View commit details -
Configuration menu - View commit details
-
Copy full SHA for 4b05202 - Browse repository at this point
Copy the full SHA 4b05202View commit details -
Configuration menu - View commit details
-
Copy full SHA for 0b662c2 - Browse repository at this point
Copy the full SHA 0b662c2View commit details -
Configuration menu - View commit details
-
Copy full SHA for 461c576 - Browse repository at this point
Copy the full SHA 461c576View commit details -
build: Avoid unnecessary build script reruns in libstd
Add a FIXME to build scripts in profiler_builtins
Configuration menu - View commit details
-
Copy full SHA for 7be36a8 - Browse repository at this point
Copy the full SHA 7be36a8View commit details -
Rollup merge of rust-lang#73868 - ecstatic-morse:fix-stable-version, …
…r=jonas-schievink Advertise correct stable version for const control flow rust-lang#72437 was opened before the 1.45 release but merged afterwards. These will be stable in 1.46.
Configuration menu - View commit details
-
Copy full SHA for 5013636 - Browse repository at this point
Copy the full SHA 5013636View commit details -
Rollup merge of rust-lang#74367 - Neutron3529:patch-1, r=nagisa
Rearrange the pipeline of `pow` to gain efficiency The check of the `exp` parameter seems useless if we execute the while-loop more than once. The original implementation of `pow` function using one more comparison if the `exp==0` and may break the pipeline of the cpu, which may generate a slower code. The performance gap between the old and the new implementation may be small, but IMO, at least the newer one looks more beautiful. --- bench prog: ``` #![feature(test)] extern crate test; #[macro_export]macro_rules! timing{ ($a:expr)=>{let time=std::time::Instant::now();{$a;}print!("{:?} ",time.elapsed())}; ($a:expr,$b:literal)=>{let time=std::time::Instant::now();let mut a=0;for _ in 0..$b{a^=$a;}print!("{:?} {} ",time.elapsed(),a)} } #[inline] pub fn pow_rust(x:i64, mut exp: u32) -> i64 { let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp /= 2; base = base * base; } if exp == 1 { acc = acc * base; } acc } #[inline] pub fn pow_new(x:i64, mut exp: u32) -> i64 { if exp==0{ 1 }else{ let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp >>= 1; base = base * base; } acc * base } } fn main(){ let a=2i64; let b=1_u32; println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); } ``` bench in my laptop: ``` neutron@Neutron:/me/rust$ rc commit.rs rustc commit.rs && ./commit 3.978419716s 0 4.079765171s 0 3.964630622s 0 3.997127013s 0 4.260304804s 0 3.997638211s 0 3.963195544s 0 4.11657718s 0 4.176054164s 0 3.830128579s 0 3.980396122s 0 3.937258567s 0 3.986055948s 0 4.127804162s 0 4.018943411s 0 4.185568857s 0 4.217512517s 0 3.98313603s 0 3.863018225s 0 4.030447988s 0 3.694878237s 0 4.206987927s 0 4.137608047s 0 4.115564664s 0 neutron@Neutron:/me/rust$ rc commit.rs -O rustc commit.rs -O && ./commit 162.111993ms 0 165.107125ms 0 166.26924ms 0 175.20479ms 0 205.062565ms 0 176.278791ms 0 174.408975ms 0 166.526899ms 0 201.857604ms 0 146.190062ms 0 168.592821ms 0 154.61411ms 0 199.678912ms 0 168.411598ms 0 162.129996ms 0 147.420765ms 0 209.759326ms 0 154.807907ms 0 165.507134ms 0 188.476239ms 0 157.351524ms 0 121.320123ms 0 126.401229ms 0 114.86428ms 0 ```
Configuration menu - View commit details
-
Copy full SHA for 45f2730 - Browse repository at this point
Copy the full SHA 45f2730View commit details -
Rollup merge of rust-lang#74507 - lcnr:const-prop-into-op, r=oli-obk
add `visit_operand` to const prop r? @oli-obk
Configuration menu - View commit details
-
Copy full SHA for 792d485 - Browse repository at this point
Copy the full SHA 792d485View commit details -
Rollup merge of rust-lang#74538 - nbdd0121:issue-73976, r=lcnr
Guard against non-monomorphized type_id intrinsic call This PR checks whether the type is sufficient monomorphized when calling type_id or type_name intrinsics. If the type is not sufficiently monomorphized, e.g. used in a pattern, the code will be rejected. Fixes rust-lang#73976
Configuration menu - View commit details
-
Copy full SHA for 2642664 - Browse repository at this point
Copy the full SHA 2642664View commit details -
Rollup merge of rust-lang#74541 - shepmaster:aarch64-apple-darwin-tar…
…get, r=nagisa Add the aarch64-apple-darwin target This is a basic copy-paste-modify from the existing x86_64-apple-darwin target.
Configuration menu - View commit details
-
Copy full SHA for 6232dde - Browse repository at this point
Copy the full SHA 6232ddeView commit details -
Rollup merge of rust-lang#74600 - Mark-Simulacrum:try-perf, r=pietroa…
…lbini Enable perf try builder This adds a dedicated branch for perf to use for CI, intended to allow perf to enqueue builds without needing to use bors. bors is great, but bors requires an open PR to work, and we want to invoke perf on closed PRs sometimes (in particular, rollups).
Configuration menu - View commit details
-
Copy full SHA for 829d416 - Browse repository at this point
Copy the full SHA 829d416View commit details -
Rollup merge of rust-lang#74618 - JohnTitor:no-more-bad-placeholder, …
…r=estebank Do not ICE on assoc type with bad placeholder Fixes rust-lang#74612 r? @estebank
Configuration menu - View commit details
-
Copy full SHA for 679e1a6 - Browse repository at this point
Copy the full SHA 679e1a6View commit details -
Rollup merge of rust-lang#74631 - petrochenkov:ehdr2, r=jonas-schievink
rustc_target: Add a target spec option for disabling `--eh-frame-hdr` Disable `--eh-frame-hdr` for targets that use an `ld`-like linker, but don't support that option. Do it through a target spec option rather than through hard-coding in `linker.rs`. The option is still enabled by default though. cc rust-lang#73564 Fixes rust-lang#73564 (comment) Fixes rust-lang#74625 Fixes rust-embedded/msp430-rt#12
Configuration menu - View commit details
-
Copy full SHA for b9d7efe - Browse repository at this point
Copy the full SHA b9d7efeView commit details -
Rollup merge of rust-lang#74643 - petrochenkov:noenvrerun, r=Mark-Sim…
…ulacrum build: Remove unnecessary `cargo:rerun-if-env-changed` annotations ... and a couple of related cleanups. rustc and cargo now track the majority of env var dependencies automatically (rust-lang/cargo#8421), so the annotations are no longer necessary.
Configuration menu - View commit details
-
Copy full SHA for f77f73e - Browse repository at this point
Copy the full SHA f77f73eView commit details