Skip to content
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 10 pull requests #74647

Closed
wants to merge 36 commits into from

Commits on Jul 15, 2020

  1. 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 
    ```
    Neutron3529 committed Jul 15, 2020
    Configuration menu
    Copy the full SHA
    9dee590 View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2020

  1. delete an unnecessary semicolon...

    Sorry for the typo.
    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    ebafab9 View commit details
    Browse the repository at this point in the history
  2. delete trailing whitespace

    Sorry, too..
    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    020c0b5 View commit details
    Browse the repository at this point in the history
  3. Sorry for the missing...

    I checked all the implementations, and finally found that there is one function that does not check whether `exp == 0`
    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    8f58ce4 View commit details
    Browse the repository at this point in the history
  4. add extra tests

    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    f3d476b View commit details
    Browse the repository at this point in the history
  5. add extra tests.

    finished adding the extra tests to prevent further typo
    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    8795845 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    319db30 View commit details
    Browse the repository at this point in the history
  7. add whitespace.

    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    e2f3e3c View commit details
    Browse the repository at this point in the history
  8. add whitespace

    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    d5d7ca2 View commit details
    Browse the repository at this point in the history
  9. add whitespace

    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    7599e01 View commit details
    Browse the repository at this point in the history
  10. delete extra line

    Neutron3529 committed Jul 16, 2020
    Configuration menu
    Copy the full SHA
    364cacb View commit details
    Browse the repository at this point in the history

Commits on Jul 19, 2020

  1. Configuration menu
    Copy the full SHA
    6100b74 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    4fb260b View commit details
    Browse the repository at this point in the history

Commits on Jul 21, 2020

  1. Add the aarch64-apple-darwin target

    This is a basic copy-paste-modify from the existing
    x86_64-apple-darwin target.
    shepmaster committed Jul 21, 2020
    Configuration menu
    Copy the full SHA
    4c69d4b View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    804241e View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b3340b5 View commit details
    Browse the repository at this point in the history
  4. Prefer constant over function

    tesuji committed Jul 21, 2020
    Configuration menu
    Copy the full SHA
    e96230d View commit details
    Browse the repository at this point in the history

Commits on Jul 22, 2020

  1. Configuration menu
    Copy the full SHA
    430bd39 View commit details
    Browse the repository at this point in the history
  2. const prop into operands

    lcnr committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    c74c648 View commit details
    Browse the repository at this point in the history
  3. note LLVM in fixme

    lcnr committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    d257bac View commit details
    Browse the repository at this point in the history
  4. 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).
    Mark-Simulacrum committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    747bc8e View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    49b9a64 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    4b05202 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    0b662c2 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    461c576 View commit details
    Browse the repository at this point in the history
  9. build: Avoid unnecessary build script reruns in libstd

    Add a FIXME to build scripts in profiler_builtins
    petrochenkov committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    7be36a8 View commit details
    Browse the repository at this point in the history
  10. 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.
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    a99da6a View commit details
    Browse the repository at this point in the history
  11. 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
    ```
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    45bd8c0 View commit details
    Browse the repository at this point in the history
  12. Rollup merge of rust-lang#74507 - lcnr:const-prop-into-op, r=oli-obk

    add `visit_operand` to const prop
    
    r? @oli-obk
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    894a76c View commit details
    Browse the repository at this point in the history
  13. 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
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    6b829d9 View commit details
    Browse the repository at this point in the history
  14. 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.
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    c434448 View commit details
    Browse the repository at this point in the history
  15. Rollup merge of rust-lang#74587 - lzutao:consts, r=dtolnay

    Prefer constant over function
    
    Just that I prefer constants over functions that can be made const.
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    389f2b6 View commit details
    Browse the repository at this point in the history
  16. 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).
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    c97ba6e View commit details
    Browse the repository at this point in the history
  17. 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
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    461e743 View commit details
    Browse the repository at this point in the history
  18. 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
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    b9c6a74 View commit details
    Browse the repository at this point in the history
  19. 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.
    Manishearth committed Jul 22, 2020
    Configuration menu
    Copy the full SHA
    1e05007 View commit details
    Browse the repository at this point in the history