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

Compiler slowdown on lage module in nightly #48153

Closed
crawford opened this issue Feb 12, 2018 · 9 comments · Fixed by #48167
Closed

Compiler slowdown on lage module in nightly #48153

crawford opened this issue Feb 12, 2018 · 9 comments · Fixed by #48167
Labels
C-enhancement Category: An issue proposing an enhancement or a PR with one. I-compiletime Issue: Problems and improvements with respect to compile times. regression-from-stable-to-nightly Performance or correctness regression from stable to nightly.
Milestone

Comments

@crawford
Copy link

I've noticed that the nightly compilers lately have taken quite a long time to compile efm32gg11b82. The crate is a large amount of code generated by svd2rust. I've narrowed down the difference in build time to a nightly release. The results below are from debug builds, but I've seen similar numbers for release builds.

rustc 1.25.0-nightly (bacb5c5 2018-01-26):

$ CARGO_INCREMENTAL=0 cargo build
   Compiling aligned v0.1.1
   Compiling bare-metal v0.1.1
   Compiling cortex-m v0.4.3
   Compiling vcell v0.1.0
   Compiling untagged-option v0.1.1
   Compiling volatile-register v0.2.0
   Compiling efm32gg11b820 v0.2.0 (file:///home/alex/efm32gg11b820)
    Finished dev [unoptimized + debuginfo] target(s) in 233.85 secs

rustc 1.25.0-nightly (7d6e5b9 2018-01-27):

$ CARGO_INCREMENTAL=0 cargo build
   Compiling cortex-m v0.4.3
   Compiling aligned v0.1.1
   Compiling bare-metal v0.1.1
   Compiling vcell v0.1.0
   Compiling untagged-option v0.1.1
   Compiling volatile-register v0.2.0
   Compiling efm32gg11b820 v0.2.0 (file:///home/alex/efm32gg11b820)
    Finished dev [unoptimized + debuginfo] target(s) in 2358.13 secs

I'm not really sure how to profile this further, so I'll take any suggestion you have.

@sfackler sfackler added I-compiletime Issue: Problems and improvements with respect to compile times. regression-from-stable-to-nightly Performance or correctness regression from stable to nightly. labels Feb 12, 2018
@Mark-Simulacrum
Copy link
Member

Looks like the only PRs in that range are #47571, #47690, #46450, and #47420. None of which seem immediately relevant. I also can't reproduce locally... https://gist.github.com/Mark-Simulacrum/dd7f4c6b0649fabbf598642ddf7c91a2. Are you sure these results are caused by some external process? What platform are you running on?

@crawford
Copy link
Author

crawford commented Feb 12, 2018

I've been able to reliably reproduce this behavior on my desktop. I tried re-running the test on my laptop and saw similar results. Both my laptop and desktop are using NixOS 17.09.2964.3e349a2b98b (Hummingbird) with Mozilla's nixpkgs overlay. The test results with the full invocations are below.

The borrow checking stands out though...

  time: 15.996; rss: 3936MB     borrow checking

vs.

  time: 1733.265; rss: 3936MB   borrow checking

I'm going to go ahead and test this again inside of a fedora container to try to narrow down if this is specific to NixOS.

$ nix-shell --packages '(rustChannelOf{ date = "2018-01-27"; channel = "nightly"; }).rust' --run 'rustc --version; cargo clean; export CARGO_INCREMENTAL=0; cargo rustc -- -Ztime-passes'
rustc 1.25.0-nightly (bacb5c58d 2018-01-26)   
   Compiling bare-metal v0.1.1                             
   Compiling vcell v0.1.0                                
   Compiling cortex-m v0.4.3                                          
   Compiling aligned v0.1.1                                         
   Compiling untagged-option v0.1.1                                  
   Compiling volatile-register v0.2.0                              
   Compiling efm32gg11b820 v0.2.0 (file:///home/alex/code/crawford/efm32gg11b820)
  time: 5.444; rss: 1183MB      parsing                            
  time: 0.000; rss: 1183MB      recursion limit                 
  time: 0.000; rss: 1183MB      crate injection                      
  time: 0.000; rss: 1183MB      plugin loading
  time: 0.000; rss: 1183MB      plugin registration
  time: 2.094; rss: 1403MB      expansion
  time: 0.000; rss: 1403MB      maybe building test harness
  time: 0.103; rss: 1403MB      maybe creating a macro crate
  time: 0.329; rss: 1403MB      creating allocators
  time: 0.114; rss: 1403MB      AST validation
  time: 1.686; rss: 1639MB      name resolution
  time: 0.794; rss: 1639MB      complete gated feature checking
  time: 1.511; rss: 2054MB      lowering ast -> hir
  time: 0.437; rss: 2060MB      early lint checks
  time: 1.624; rss: 2145MB      indexing hir
  time: 0.000; rss: 1342MB      load query result cache
  time: 0.000; rss: 1342MB      looking for entry point
  time: 0.005; rss: 1342MB      looking for plugin registrar
  time: 0.097; rss: 1342MB      loop checking
  time: 0.056; rss: 1342MB      static item recursion checking
  time: 0.121; rss: 1422MB      attribute checking
  time: 0.283; rss: 1438MB      stability checking
  time: 2.357; rss: 1858MB      type collecting
  time: 0.034; rss: 1858MB      outlives testing
  time: 0.148; rss: 1859MB      impl wf inference
  time: 8.209; rss: 1869MB      coherence checking
  time: 0.035; rss: 1869MB      variance testing
  time: 4.094; rss: 2237MB      wf checking
  time: 0.725; rss: 2265MB      item-types checking
  time: 20.513; rss: 3064MB     item-bodies checking
  time: 3.108; rss: 3234MB      const checking
  time: 1.842; rss: 3252MB      privacy checking
  time: 0.161; rss: 3252MB      intrinsic checking
  time: 0.656; rss: 3258MB      match checking
  time: 0.280; rss: 3258MB      liveness checking
  time: 15.996; rss: 3936MB     borrow checking
  time: 0.154; rss: 3965MB      MIR borrow checking
  time: 0.075; rss: 3965MB      MIR effect checking
  time: 0.950; rss: 3979MB      death checking
  time: 0.000; rss: 3979MB      unused lib feature checking
  time: 3.065; rss: 3979MB      lint checking
  time: 0.000; rss: 3979MB      resolving dependency formats
    time: 33.326; rss: 4240MB   write metadata
    time: 1.189; rss: 4247MB    translation item collection
    time: 0.158; rss: 4263MB    codegen unit partitioning
    time: 0.039; rss: 4269MB    llvm function passes [efm32gg11b82015]
    time: 0.016; rss: 4269MB    llvm module passes [efm32gg11b82015]
    time: 0.050; rss: 4276MB    llvm function passes [efm32gg11b8200]
    time: 0.016; rss: 4278MB    llvm module passes [efm32gg11b8200]
    time: 0.047; rss: 4286MB    llvm function passes [efm32gg11b8201]
    time: 0.015; rss: 4287MB    llvm module passes [efm32gg11b8201]
    time: 0.989; rss: 4289MB    codegen passes [efm32gg11b82015]
    time: 0.052; rss: 4291MB    llvm function passes [efm32gg11b8202]
    time: 0.012; rss: 4291MB    llvm module passes [efm32gg11b8202]
    time: 0.965; rss: 4286MB    codegen passes [efm32gg11b8200]
    time: 0.043; rss: 4287MB    llvm function passes [efm32gg11b8203]
    time: 0.014; rss: 4287MB    llvm module passes [efm32gg11b8203]
    time: 0.984; rss: 4285MB    codegen passes [efm32gg11b8201]
    time: 0.044; rss: 4287MB    llvm function passes [efm32gg11b8204]
    time: 0.014; rss: 4288MB    llvm module passes [efm32gg11b8204]
    time: 0.756; rss: 4285MB    codegen passes [efm32gg11b8202]
    time: 0.034; rss: 4293MB    llvm function passes [efm32gg11b8205]
    time: 0.011; rss: 4293MB    llvm module passes [efm32gg11b8205]
    time: 0.745; rss: 4292MB    codegen passes [efm32gg11b8203]
    time: 0.068; rss: 4295MB    llvm function passes [efm32gg11b8206]
    time: 0.025; rss: 4296MB    llvm module passes [efm32gg11b8206]
    time: 0.750; rss: 4294MB    codegen passes [efm32gg11b8204]
    time: 0.033; rss: 4295MB    llvm function passes [efm32gg11b8207]
    time: 0.009; rss: 4296MB    llvm module passes [efm32gg11b8207]
    time: 0.614; rss: 4291MB    codegen passes [efm32gg11b8205]
    time: 0.038; rss: 4298MB    llvm function passes [efm32gg11b8208]
    time: 0.009; rss: 4299MB    llvm module passes [efm32gg11b8208]
    time: 0.550; rss: 4296MB    codegen passes [efm32gg11b8206]
    time: 0.466; rss: 4288MB    codegen passes [efm32gg11b8207]
    time: 0.036; rss: 4288MB    llvm function passes [efm32gg11b8209]
    time: 0.013; rss: 4288MB    llvm module passes [efm32gg11b8209]
    time: 0.031; rss: 4295MB    llvm function passes [efm32gg11b82010]
    time: 0.010; rss: 4297MB    llvm module passes [efm32gg11b82010]
    time: 0.489; rss: 4291MB    codegen passes [efm32gg11b8208]
    time: 0.027; rss: 4290MB    llvm function passes [efm32gg11b82011]
    time: 0.007; rss: 4290MB    llvm module passes [efm32gg11b82011]
    time: 0.586; rss: 4294MB    codegen passes [efm32gg11b8209]
    time: 0.035; rss: 4294MB    llvm function passes [efm32gg11b82012]
    time: 0.009; rss: 4295MB    llvm module passes [efm32gg11b82012]
    time: 0.541; rss: 4293MB    codegen passes [efm32gg11b82010]
    time: 0.405; rss: 4285MB    codegen passes [efm32gg11b82011]
    time: 0.031; rss: 4286MB    llvm function passes [efm32gg11b82013]
    time: 0.008; rss: 4286MB    llvm module passes [efm32gg11b82013]
    time: 5.038; rss: 4289MB    translate to LLVM IR
    time: 0.002; rss: 4289MB    assert dep graph
    time: 0.004; rss: 4289MB    serialize dep graph
  time: 41.187; rss: 4289MB     translation
    time: 0.027; rss: 4292MB    llvm function passes [efm32gg11b82014]
    time: 0.013; rss: 4292MB    llvm module passes [efm32gg11b82014]
    time: 0.454; rss: 4287MB    codegen passes [efm32gg11b82012]
    time: 0.446; rss: 3742MB    codegen passes [efm32gg11b82013]
    time: 0.413; rss: 3439MB    codegen passes [efm32gg11b82014]
  time: 5.297; rss: 3423MB      LLVM passes
  time: 0.000; rss: 619MB       serialize work products
  time: 0.120; rss: 551MB       linking
    Finished dev [unoptimized + debuginfo] target(s) in 121.48 secs
nix-shell --packages '(rustChannelOf{ date = "2018-01-28"; channel = "nightly"; }).rust' --run 'rustc --version; cargo clean; export CARGO_INCREMENTAL=0; cargo rustc -
- -Ztime-passes'
rustc 1.25.0-nightly (7d6e5b9da 2018-01-27)
   Compiling cortex-m v0.4.3
   Compiling bare-metal v0.1.1
   Compiling untagged-option v0.1.1
   Compiling vcell v0.1.0
   Compiling aligned v0.1.1
   Compiling volatile-register v0.2.0
   Compiling efm32gg11b820 v0.2.0 (file:///home/alex/code/crawford/efm32gg11b820)
  time: 5.846; rss: 1183MB      parsing
  time: 0.000; rss: 1183MB      recursion limit
  time: 0.000; rss: 1183MB      crate injection
  time: 0.000; rss: 1183MB      plugin loading
  time: 0.000; rss: 1183MB      plugin registration
  time: 2.104; rss: 1404MB      expansion
  time: 0.000; rss: 1404MB      maybe building test harness
  time: 0.097; rss: 1404MB      maybe creating a macro crate
  time: 0.332; rss: 1404MB      creating allocators
  time: 0.121; rss: 1404MB      AST validation
  time: 1.712; rss: 1639MB      name resolution
  time: 0.725; rss: 1639MB      complete gated feature checking
  time: 1.519; rss: 2054MB      lowering ast -> hir
  time: 0.459; rss: 2061MB      early lint checks
  time: 1.674; rss: 2145MB      indexing hir
  time: 0.000; rss: 1342MB      load query result cache
  time: 0.000; rss: 1342MB      looking for entry point
  time: 0.008; rss: 1342MB      looking for plugin registrar
  time: 0.137; rss: 1342MB      loop checking
  time: 0.078; rss: 1342MB      static item recursion checking
  time: 0.151; rss: 1422MB      attribute checking
  time: 0.407; rss: 1439MB      stability checking
  time: 2.691; rss: 1858MB      type collecting
  time: 0.054; rss: 1858MB      outlives testing
  time: 0.190; rss: 1859MB      impl wf inference
  time: 11.854; rss: 1869MB     coherence checking
  time: 0.033; rss: 1869MB      variance testing
  time: 4.392; rss: 2237MB      wf checking
  time: 0.716; rss: 2265MB      item-types checking
  time: 20.862; rss: 3065MB     item-bodies checking
  time: 3.113; rss: 3234MB      const checking
  time: 1.862; rss: 3252MB      privacy checking
  time: 0.159; rss: 3252MB      intrinsic checking
  time: 0.672; rss: 3258MB      match checking
  time: 0.274; rss: 3258MB      liveness checking
  time: 1733.265; rss: 3936MB   borrow checking
  time: 0.150; rss: 3965MB      MIR borrow checking
  time: 0.072; rss: 3965MB      MIR effect checking
  time: 0.943; rss: 3979MB      death checking
  time: 0.000; rss: 3979MB      unused lib feature checking
  time: 3.108; rss: 3979MB      lint checking
  time: 0.000; rss: 3979MB      resolving dependency formats
    time: 36.893; rss: 4239MB   write metadata
    time: 1.178; rss: 4246MB    translation item collection
    time: 0.165; rss: 4262MB    codegen unit partitioning
    time: 0.032; rss: 4268MB    llvm function passes [efm32gg11b82015]
    time: 0.010; rss: 4269MB    llvm module passes [efm32gg11b82015]
    time: 0.049; rss: 4276MB    llvm function passes [efm32gg11b8200]
    time: 0.016; rss: 4277MB    llvm module passes [efm32gg11b8200]
    time: 0.046; rss: 4286MB    llvm function passes [efm32gg11b8201]
    time: 0.016; rss: 4287MB    llvm module passes [efm32gg11b8201]
    time: 0.833; rss: 4291MB    codegen passes [efm32gg11b82015]
    time: 0.043; rss: 4293MB    llvm function passes [efm32gg11b8202]
    time: 0.013; rss: 4293MB    llvm module passes [efm32gg11b8202]
    time: 0.943; rss: 4295MB    codegen passes [efm32gg11b8200]
    time: 0.041; rss: 4298MB    llvm function passes [efm32gg11b8203]
    time: 0.014; rss: 4300MB    llvm module passes [efm32gg11b8203]
    time: 0.850; rss: 4294MB    codegen passes [efm32gg11b8201]
    time: 0.046; rss: 4297MB    llvm function passes [efm32gg11b8204]
    time: 0.014; rss: 4298MB    llvm module passes [efm32gg11b8204]
    time: 0.707; rss: 4288MB    codegen passes [efm32gg11b8202]
    time: 0.034; rss: 4300MB    llvm function passes [efm32gg11b8205]
    time: 0.012; rss: 4301MB    llvm module passes [efm32gg11b8205]
    time: 0.709; rss: 4299MB    codegen passes [efm32gg11b8203]
    time: 0.033; rss: 4301MB    llvm function passes [efm32gg11b8206]
    time: 0.009; rss: 4302MB    llvm module passes [efm32gg11b8206]
    time: 0.669; rss: 4297MB    codegen passes [efm32gg11b8204]
    time: 0.031; rss: 4300MB    llvm function passes [efm32gg11b8207]
    time: 0.009; rss: 4300MB    llvm module passes [efm32gg11b8207]
    time: 0.581; rss: 4299MB    codegen passes [efm32gg11b8205]
    time: 0.039; rss: 4299MB    llvm function passes [efm32gg11b8208]
    time: 0.009; rss: 4300MB    llvm module passes [efm32gg11b8208]
    time: 0.546; rss: 4297MB    codegen passes [efm32gg11b8206]
    time: 0.037; rss: 4306MB    llvm function passes [efm32gg11b8209]
    time: 0.481; rss: 4297MB    codegen passes [efm32gg11b8207]
    time: 0.011; rss: 4295MB    llvm module passes [efm32gg11b8209]
    time: 0.030; rss: 4303MB    llvm function passes [efm32gg11b82010]
    time: 0.010; rss: 4304MB    llvm module passes [efm32gg11b82010]
    time: 0.499; rss: 4296MB    codegen passes [efm32gg11b8208]
    time: 0.026; rss: 4295MB    llvm function passes [efm32gg11b82011]
    time: 0.007; rss: 4296MB    llvm module passes [efm32gg11b82011]
    time: 0.611; rss: 4303MB    codegen passes [efm32gg11b8209]
    time: 0.033; rss: 4302MB    llvm function passes [efm32gg11b82012]
    time: 0.008; rss: 4303MB    llvm module passes [efm32gg11b82012]
    time: 0.549; rss: 4302MB    codegen passes [efm32gg11b82010]
    time: 0.425; rss: 4294MB    codegen passes [efm32gg11b82011]
    time: 0.034; rss: 4294MB    llvm function passes [efm32gg11b82013]
    time: 0.009; rss: 4294MB    llvm module passes [efm32gg11b82013]
    time: 4.866; rss: 4297MB    translate to LLVM IR
    time: 0.002; rss: 4297MB    assert dep graph
    time: 0.000; rss: 4297MB    serialize dep graph
  time: 44.560; rss: 4297MB     translation
    time: 0.043; rss: 4298MB    llvm function passes [efm32gg11b82014]
    time: 0.011; rss: 4299MB    llvm module passes [efm32gg11b82014]
    time: 0.448; rss: 4257MB    codegen passes [efm32gg11b82012]
    time: 0.444; rss: 3870MB    codegen passes [efm32gg11b82013]
    time: 0.406; rss: 3449MB    codegen passes [efm32gg11b82014]
  time: 5.143; rss: 3434MB      LLVM passes
  time: 0.000; rss: 629MB       serialize work products
  time: 0.110; rss: 560MB       linking
    Finished dev [unoptimized + debuginfo] target(s) in 1847.66 secs

@Mark-Simulacrum
Copy link
Member

I think I've heard reports elsewhere of similar slowdowns, but I can't seem to find anything right now. I tested on a Ubuntu 17.10 machine, so it's possible nix is somehow at fault here...

@crawford
Copy link
Author

@Mark-Simulacrum Can you try testing with nightly-2018-01-28 (actually rustc 1.25.0-nightly (7d6e5b9da 2018-01-27))? That's the version where I start to see the failure.

@Mark-Simulacrum
Copy link
Member

Yes, I can now reproduce. Based on a quick inspection with gdp, I suspect #47420 is at fault -- I'm seeing CPU time mostly spent in memmove... called from syntax::codemap::CodeMap::find_width_of_character_at_span. I suspect the problem is the String allocations here: https://github.com/rust-lang/rust/pull/47420/files#diff-c5bde8c46eebaa8f5890c6f3700793b3R675.

@Mark-Simulacrum
Copy link
Member

cc @estebank @davidtwco

@crawford
Copy link
Author

crawford commented Feb 12, 2018

After testing in the Fedora container, I'm seeing similar performance so I think it's safe to rule out NixOS's packaging as a factor. Since the time to borrow check seems to be the issue, #47420 is the only change that seems relevant.

export CARGO_INCREMENTAL=0; cargo clean && cargo +nightly-2018-01-27 rustc -- -Ztime-passes
   Compiling cortex-m v0.4.3
   Compiling bare-metal v0.1.1
   Compiling untagged-option v0.1.1
   Compiling aligned v0.1.1
   Compiling vcell v0.1.0
   Compiling volatile-register v0.2.0
   Compiling efm32gg11b820 v0.2.0 (file:///root/efm32gg11b820)
  time: 5.729; rss: 1183MB      parsing
  time: 0.000; rss: 1183MB      recursion limit
  time: 0.000; rss: 1183MB      crate injection
  time: 0.000; rss: 1183MB      plugin loading
  time: 0.000; rss: 1183MB      plugin registration
  time: 2.070; rss: 1404MB      expansion
  time: 0.000; rss: 1404MB      maybe building test harness
  time: 0.110; rss: 1404MB      maybe creating a macro crate
  time: 0.328; rss: 1404MB      creating allocators
  time: 0.109; rss: 1404MB      AST validation
  time: 1.656; rss: 1639MB      name resolution
  time: 0.758; rss: 1639MB      complete gated feature checking
  time: 1.495; rss: 2055MB      lowering ast -> hir
  time: 0.435; rss: 2061MB      early lint checks
  time: 1.623; rss: 2145MB      indexing hir
  time: 0.000; rss: 1344MB      load query result cache
  time: 0.000; rss: 1344MB      looking for entry point
  time: 0.008; rss: 1344MB      looking for plugin registrar
  time: 0.087; rss: 1344MB      loop checking
  time: 0.051; rss: 1343MB      static item recursion checking
  time: 0.125; rss: 1422MB      attribute checking
  time: 0.282; rss: 1438MB      stability checking
  time: 2.361; rss: 1858MB      type collecting
  time: 0.032; rss: 1858MB      outlives testing
  time: 0.143; rss: 1858MB      impl wf inference
  time: 7.993; rss: 1869MB      coherence checking
  time: 0.033; rss: 1869MB      variance testing
  time: 3.987; rss: 2232MB      wf checking
  time: 0.707; rss: 2259MB      item-types checking
  time: 20.370; rss: 3061MB     item-bodies checking
  time: 3.053; rss: 3231MB      const checking
  time: 1.815; rss: 3249MB      privacy checking
  time: 0.156; rss: 3249MB      intrinsic checking
  time: 0.668; rss: 3255MB      match checking
  time: 0.280; rss: 3255MB      liveness checking
  time: 16.005; rss: 3932MB     borrow checking
  time: 0.156; rss: 3961MB      MIR borrow checking
  time: 0.082; rss: 3961MB      MIR effect checking
  time: 0.934; rss: 3975MB      death checking
  time: 0.000; rss: 3975MB      unused lib feature checking
  time: 2.998; rss: 3976MB      lint checking
  time: 0.000; rss: 3976MB      resolving dependency formats
    time: 33.222; rss: 4244MB   write metadata
    time: 1.152; rss: 4251MB    translation item collection
    time: 0.158; rss: 4268MB    codegen unit partitioning
    time: 0.051; rss: 4273MB    llvm function passes [efm32gg11b82015]
    time: 0.026; rss: 4273MB    llvm module passes [efm32gg11b82015]
    time: 0.036; rss: 4280MB    llvm function passes [efm32gg11b8200]
    time: 0.019; rss: 4281MB    llvm module passes [efm32gg11b8200]
    time: 0.048; rss: 4295MB    llvm function passes [efm32gg11b8201]
    time: 0.020; rss: 4296MB    llvm module passes [efm32gg11b8201]
    time: 0.882; rss: 4294MB    codegen passes [efm32gg11b82015]
    time: 0.046; rss: 4299MB    llvm function passes [efm32gg11b8202]
    time: 0.016; rss: 4300MB    llvm module passes [efm32gg11b8202]
    time: 0.893; rss: 4292MB    codegen passes [efm32gg11b8200]
    time: 0.042; rss: 4297MB    llvm function passes [efm32gg11b8203]
    time: 0.025; rss: 4299MB    llvm module passes [efm32gg11b8203]
    time: 0.814; rss: 4291MB    codegen passes [efm32gg11b8201]
    time: 0.040; rss: 4298MB    llvm function passes [efm32gg11b8204]
    time: 0.015; rss: 4299MB    llvm module passes [efm32gg11b8204]
    time: 0.748; rss: 4294MB    codegen passes [efm32gg11b8202]
    time: 0.037; rss: 4308MB    llvm function passes [efm32gg11b8205]
    time: 0.020; rss: 4309MB    llvm module passes [efm32gg11b8205]
    time: 0.745; rss: 4305MB    codegen passes [efm32gg11b8203]
    time: 0.037; rss: 4302MB    llvm function passes [efm32gg11b8206]
    time: 0.010; rss: 4303MB    llvm module passes [efm32gg11b8206]
    time: 0.751; rss: 4300MB    codegen passes [efm32gg11b8204]
    time: 0.038; rss: 4300MB    llvm function passes [efm32gg11b8207]
    time: 0.009; rss: 4301MB    llvm module passes [efm32gg11b8207]
    time: 0.619; rss: 4301MB    codegen passes [efm32gg11b8205]
    time: 0.035; rss: 4303MB    llvm function passes [efm32gg11b8208]
    time: 0.019; rss: 4304MB    llvm module passes [efm32gg11b8208]
    time: 0.611; rss: 4302MB    codegen passes [efm32gg11b8206]
    time: 0.034; rss: 4303MB    llvm function passes [efm32gg11b8209]
    time: 0.013; rss: 4304MB    llvm module passes [efm32gg11b8209]
    time: 0.593; rss: 4304MB    codegen passes [efm32gg11b8207]
    time: 0.032; rss: 4304MB    llvm function passes [efm32gg11b82010]
    time: 0.014; rss: 4304MB    llvm module passes [efm32gg11b82010]
    time: 0.580; rss: 4303MB    codegen passes [efm32gg11b8208]
    time: 0.028; rss: 4301MB    llvm function passes [efm32gg11b82011]
    time: 0.010; rss: 4301MB    llvm module passes [efm32gg11b82011]
    time: 0.591; rss: 4301MB    codegen passes [efm32gg11b8209]
    time: 0.030; rss: 4305MB    llvm function passes [efm32gg11b82012]
    time: 0.011; rss: 4306MB    llvm module passes [efm32gg11b82012]
    time: 0.367; rss: 4307MB    codegen passes [efm32gg11b82011]
    time: 0.578; rss: 4297MB    codegen passes [efm32gg11b82010]
    time: 0.032; rss: 4300MB    llvm function passes [efm32gg11b82013]
    time: 0.012; rss: 4300MB    llvm module passes [efm32gg11b82013]
    time: 5.371; rss: 4305MB    translate to LLVM IR
    time: 0.000; rss: 4305MB    assert dep graph
    time: 0.000; rss: 4305MB    serialize dep graph
  time: 41.314; rss: 4305MB     translation
    time: 0.418; rss: 4297MB    codegen passes [efm32gg11b82012]
    time: 0.034; rss: 4296MB    llvm function passes [efm32gg11b82014]
    time: 0.016; rss: 4296MB    llvm module passes [efm32gg11b82014]
    time: 0.421; rss: 4141MB    codegen passes [efm32gg11b82013]
    time: 0.373; rss: 3692MB    codegen passes [efm32gg11b82014]
  time: 5.537; rss: 3617MB      LLVM passes
  time: 0.000; rss: 636MB       serialize work products
  time: 0.119; rss: 568MB       linking
    Finished dev [unoptimized + debuginfo] target(s) in 121.25 secs
export CARGO_INCREMENTAL=0; cargo clean && cargo +nightly-2018-01-28 rustc -- -Ztime-passes
   Compiling untagged-option v0.1.1
   Compiling vcell v0.1.0
   Compiling aligned v0.1.1
   Compiling bare-metal v0.1.1
   Compiling cortex-m v0.4.3
   Compiling volatile-register v0.2.0
   Compiling efm32gg11b820 v0.2.0 (file:///root/efm32gg11b820)
  time: 5.959; rss: 1183MB      parsing
  time: 0.000; rss: 1183MB      recursion limit
  time: 0.000; rss: 1183MB      crate injection
  time: 0.000; rss: 1183MB      plugin loading
  time: 0.000; rss: 1183MB      plugin registration
  time: 2.029; rss: 1404MB      expansion
  time: 0.000; rss: 1404MB      maybe building test harness
  time: 0.098; rss: 1404MB      maybe creating a macro crate
  time: 0.314; rss: 1404MB      creating allocators
  time: 0.104; rss: 1404MB      AST validation
  time: 1.622; rss: 1639MB      name resolution
  time: 0.704; rss: 1639MB      complete gated feature checking
  time: 1.456; rss: 2055MB      lowering ast -> hir
  time: 0.421; rss: 2061MB      early lint checks
  time: 1.578; rss: 2146MB      indexing hir
  time: 0.000; rss: 1344MB      load query result cache
  time: 0.000; rss: 1344MB      looking for entry point
  time: 0.007; rss: 1344MB      looking for plugin registrar
  time: 0.085; rss: 1344MB      loop checking
  time: 0.048; rss: 1343MB      static item recursion checking
  time: 0.119; rss: 1422MB      attribute checking
  time: 0.275; rss: 1439MB      stability checking
  time: 2.313; rss: 1858MB      type collecting
  time: 0.030; rss: 1858MB      outlives testing
  time: 0.137; rss: 1858MB      impl wf inference
  time: 8.591; rss: 1869MB      coherence checking
  time: 0.031; rss: 1869MB      variance testing
  time: 4.028; rss: 2232MB      wf checking
  time: 0.715; rss: 2259MB      item-types checking
  time: 20.167; rss: 3061MB     item-bodies checking
  time: 3.028; rss: 3230MB      const checking
  time: 1.775; rss: 3248MB      privacy checking
  time: 0.152; rss: 3248MB      intrinsic checking
  time: 0.641; rss: 3255MB      match checking
  time: 0.264; rss: 3255MB      liveness checking
  time: 1795.120; rss: 3921MB   borrow checking
  time: 0.169; rss: 3950MB      MIR borrow checking
  time: 0.084; rss: 3948MB      MIR effect checking
  time: 1.005; rss: 3962MB      death checking
  time: 0.000; rss: 3962MB      unused lib feature checking
  time: 3.779; rss: 3962MB      lint checking
  time: 0.000; rss: 3962MB      resolving dependency formats
    time: 41.354; rss: 4213MB   write metadata
    time: 1.431; rss: 4200MB    translation item collection
    time: 0.169; rss: 4219MB    codegen unit partitioning
    time: 0.033; rss: 4235MB    llvm function passes [efm32gg11b82015]
    time: 0.019; rss: 4235MB    llvm module passes [efm32gg11b82015]
    time: 0.035; rss: 4245MB    llvm function passes [efm32gg11b8200]
    time: 0.019; rss: 4246MB    llvm module passes [efm32gg11b8200]
    time: 0.052; rss: 4264MB    llvm function passes [efm32gg11b8201]
    time: 0.016; rss: 4266MB    llvm module passes [efm32gg11b8201]
    time: 0.908; rss: 4254MB    codegen passes [efm32gg11b82015]
    time: 0.044; rss: 4257MB    llvm function passes [efm32gg11b8202]
    time: 0.013; rss: 4258MB    llvm module passes [efm32gg11b8202]
    time: 0.918; rss: 4252MB    codegen passes [efm32gg11b8200]
    time: 0.079; rss: 4257MB    llvm function passes [efm32gg11b8203]
    time: 0.055; rss: 4258MB    llvm module passes [efm32gg11b8203]
    time: 1.252; rss: 4257MB    codegen passes [efm32gg11b8201]
    time: 0.040; rss: 4259MB    llvm function passes [efm32gg11b8204]
    time: 0.013; rss: 4260MB    llvm module passes [efm32gg11b8204]
    time: 1.128; rss: 4255MB    codegen passes [efm32gg11b8202]
    time: 0.042; rss: 4265MB    llvm function passes [efm32gg11b8205]
    time: 0.013; rss: 4265MB    llvm module passes [efm32gg11b8205]
    time: 0.895; rss: 4266MB    codegen passes [efm32gg11b8203]
    time: 0.034; rss: 4264MB    llvm function passes [efm32gg11b8206]
    time: 0.011; rss: 4265MB    llvm module passes [efm32gg11b8206]
    time: 0.728; rss: 4262MB    codegen passes [efm32gg11b8204]
    time: 0.033; rss: 4263MB    llvm function passes [efm32gg11b8207]
    time: 0.011; rss: 4263MB    llvm module passes [efm32gg11b8207]
    time: 0.729; rss: 4265MB    codegen passes [efm32gg11b8205]
    time: 0.057; rss: 4269MB    llvm function passes [efm32gg11b8208]
    time: 0.029; rss: 4271MB    llvm module passes [efm32gg11b8208]
    time: 0.747; rss: 4262MB    codegen passes [efm32gg11b8206]
    time: 0.708; rss: 4261MB    codegen passes [efm32gg11b8207]
    time: 0.034; rss: 4257MB    llvm function passes [efm32gg11b8209]
    time: 0.009; rss: 4257MB    llvm module passes [efm32gg11b8209]
    time: 0.644; rss: 4258MB    codegen passes [efm32gg11b8208]
    time: 0.036; rss: 4256MB    llvm function passes [efm32gg11b82010]
    time: 0.010; rss: 4257MB    llvm module passes [efm32gg11b82010]
    time: 0.063; rss: 4261MB    llvm function passes [efm32gg11b82011]
    time: 0.021; rss: 4261MB    llvm module passes [efm32gg11b82011]
    time: 1.096; rss: 4261MB    codegen passes [efm32gg11b8209]
    time: 0.055; rss: 4262MB    llvm function passes [efm32gg11b82012]
    time: 0.017; rss: 4262MB    llvm module passes [efm32gg11b82012]
    time: 1.037; rss: 4264MB    codegen passes [efm32gg11b82010]
    time: 0.754; rss: 4257MB    codegen passes [efm32gg11b82011]
    time: 0.047; rss: 4258MB    llvm function passes [efm32gg11b82013]
    time: 0.011; rss: 4259MB    llvm module passes [efm32gg11b82013]
    time: 6.638; rss: 4262MB    translate to LLVM IR
    time: 0.572; rss: 4257MB    codegen passes [efm32gg11b82012]
    time: 0.005; rss: 4256MB    assert dep graph
    time: 0.000; rss: 4256MB    serialize dep graph
  time: 51.306; rss: 4255MB     translation
    time: 0.031; rss: 4255MB    llvm function passes [efm32gg11b82014]
    time: 0.010; rss: 4256MB    llvm module passes [efm32gg11b82014]
    time: 0.468; rss: 3666MB    codegen passes [efm32gg11b82013]
    time: 0.412; rss: 3411MB    codegen passes [efm32gg11b82014]
  time: 6.860; rss: 3395MB      LLVM passes
  time: 0.000; rss: 594MB       serialize work products
  time: 0.125; rss: 526MB       linking
    Finished dev [unoptimized + debuginfo] target(s) in 1911.58 secs

@Mark-Simulacrum Mark-Simulacrum added this to the 1.25 milestone Feb 12, 2018
@estebank
Copy link
Contributor

I suspect the problem is the String allocations

@Mark-Simulacrum it seems to me like those could be &str instead...

@Mark-Simulacrum
Copy link
Member

Yep, I have a patch locally that seems to solve the problem by removing the allocation.

kennytm added a commit to kennytm/rust that referenced this issue Feb 13, 2018
…odemap, r=estebank

Remove allocation from width of character function.

Locally this seems to eliminate the problem or at least resolve most of the
issue.

Fixes rust-lang#48153.

r? @estebank
@TimNN TimNN added the C-enhancement Category: An issue proposing an enhancement or a PR with one. label Feb 13, 2018
kennytm added a commit to kennytm/rust that referenced this issue Feb 14, 2018
…odemap, r=estebank

Remove allocation from width of character function.

Locally this seems to eliminate the problem or at least resolve most of the
issue.

Fixes rust-lang#48153.

r? @estebank
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-enhancement Category: An issue proposing an enhancement or a PR with one. I-compiletime Issue: Problems and improvements with respect to compile times. regression-from-stable-to-nightly Performance or correctness regression from stable to nightly.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants