]> git.lizzy.rs Git - rust.git/commit - compiler/rustc_codegen_cranelift/build_system/utils.rs
Auto merge of #104999 - saethlin:immediate-abort-inlining, r=thomcc
authorbors <bors@rust-lang.org>
Fri, 2 Dec 2022 20:07:23 +0000 (20:07 +0000)
committerbors <bors@rust-lang.org>
Fri, 2 Dec 2022 20:07:23 +0000 (20:07 +0000)
commit32e613bbaafee1bcabba48a2257b838f8d1c03d3
tree1cf8666374708904dc78ba070bcea096a315b5d9
parente960b5e7749e95c6a6b2fdec7250a48105664efb
parent906c3601fa2369cf519e063399070ecb245144e0
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.