diff options
| author | bors <bors@rust-lang.org> | 2022-12-02 20:07:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-12-02 20:07:23 +0000 |
| commit | 32e613bbaafee1bcabba48a2257b838f8d1c03d3 (patch) | |
| tree | 1cf8666374708904dc78ba070bcea096a315b5d9 /compiler/rustc_codegen_llvm/src | |
| parent | e960b5e7749e95c6a6b2fdec7250a48105664efb (diff) | |
| parent | 906c3601fa2369cf519e063399070ecb245144e0 (diff) | |
| download | rust-32e613bbaafee1bcabba48a2257b838f8d1c03d3.tar.gz rust-32e613bbaafee1bcabba48a2257b838f8d1c03d3.zip | |
Auto merge of #104999 - saethlin:immediate-abort-inlining, r=thomcc
Adjust inlining attributes around panic_immediate_abort The goal of `panic_immediate_abort` is to permit the panic runtime and formatting code paths to be optimized away. But while poking through some disassembly of a small program compiled with that option, I found that was not the case. Enabling LTO did address that specific issue, but enabling LTO is a steep price to pay for this feature doing its job. This PR fixes that, by tweaking two things: * All the slice indexing functions that we `const_eval_select` on get `#[inline]`. `objdump -dC` told me that originally some `_ct` functions could end up in an executable. I won't pretend to understand what's going on there. * Normalize attributes across all `panic!` wrappers: use `inline(never) + cold` normally, and `inline` when `panic_immediate_abort` is enabled. But also, with LTO and `panic_immediate_abort` enabled, this patch knocks ~709 kB out of the `.text` segment of `librustc_driver.so`. That is slightly surprising to me, my best theory is that this shifts some inlining earlier in compilation, enabling some subsequent optimizations. The size improvement of `librustc_driver.so` with `panic_immediate_abort` due to this patch is greater with LTO than without LTO, which I suppose backs up this theory. I do not know how to test this. I would quite like to, because I think what this is solving was an accidental regression. This only works with `-Zbuild-std` which is a cargo flag, and thus can't be used in a rustc codegen test. r? `@thomcc` --- I do not seriously think anyone is going to use a compiler built with `panic_immediate_abort`, but I wanted a big complicated Rust program to try this out on, and the compiler is such.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions
