diff options
| author | bors <bors@rust-lang.org> | 2023-08-01 23:15:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-08-01 23:15:20 +0000 |
| commit | f77c624c03065298ac76051a4c1c5c2cfeafc0e0 (patch) | |
| tree | c2c153dbb5252907bb430ba29e44746d91a847d0 /compiler/rustc_resolve/src/rustdoc.rs | |
| parent | d12c6e947ceacf3b22c154caf9532b390d8dc88a (diff) | |
| parent | ca5a383fb6b16679b31029ab5da8438b5ef03e1e (diff) | |
| download | rust-f77c624c03065298ac76051a4c1c5c2cfeafc0e0.tar.gz rust-f77c624c03065298ac76051a4c1c5c2cfeafc0e0.zip | |
Auto merge of #113339 - lqd:respect-filters, r=tmiasko
Filter out short-lived LLVM diagnostics before they reach the rustc handler During profiling I saw remark passes being unconditionally enabled: for example `Machine Optimization Remark Emitter`. The diagnostic remarks enabled by default are [from missed optimizations and opt analyses](https://github.com/rust-lang/rust/pull/113339#discussion_r1259480303). They are created by LLVM, passed to the diagnostic handler on the C++ side, emitted to rust, where they are unpacked, C++ strings are converted to rust, etc. Then they are discarded in the vast majority of the time (i.e. unless some kind of `-Cremark` has enabled some of these passes' output to be printed). These unneeded allocations are very short-lived, basically only lasting between the LLVM pass emitting them and the rust handler where they are discarded. So it doesn't hugely impact max-rss, and is only a slight reduction in instruction count (cachegrind reports a reduction between 0.3% and 0.5%) _on linux_. It's possible that targets without `jemalloc` or with a worse allocator, may optimize these less. It is however significant in the aggregate, looking at the total number of allocated bytes: - it's the biggest source of allocations according to dhat, on the benchmarks I've tried e.g. `syn` or `cargo` - allocations on `syn` are reduced by 440MB, 17% (from 2440722647 bytes total, to 2030461328 bytes) - allocations on `cargo` are reduced by 6.6GB, 19% (from 35371886402 bytes total, to 28723987743 bytes) Some of these diagnostics objects [are allocated in LLVM](https://github.com/rust-lang/rust/pull/113339#discussion_r1252387484) *before* they're emitted to our diagnostic handler, where they'll be filtered out. So we could remove those in the future, but that will require changing a few LLVM call-sites upstream, so I left a FIXME.
Diffstat (limited to 'compiler/rustc_resolve/src/rustdoc.rs')
0 files changed, 0 insertions, 0 deletions
