Stabilize #[optimize] attribute#2278
Draft
veluca93 wants to merge 1 commit into
Draft
Conversation
6b8de48 to
0765805
Compare
veluca93
added a commit
to veluca93/rust
that referenced
this pull request
Jun 1, 2026
This commit stabilizes the `#[optimize]` attribute, which allows for more fine-grained control of optimization levels. Tracking issue: rust-lang#54882 Reference PRs: rust-lang/reference#2278 cc @rust-lang/lang @rust-lang/lang-advisors @rust-lang/t-compiler > Describe each behavior being stabilized and give a short example of code that will now be accepted. ```rust // Instructs the optimization pipeline to prioritize smaller code size over speed. pub fn binary_size_sensitive() { // ... } // Instructs the optimization pipeline to prioritize execution speed over code size. pub fn performance_critical() { // ... } // Disables optimizations entirely for this item. pub fn debug_only() { // ... } ``` We might want to allow specifying a per-function optimization level (i.e. `#[optimize(level = 3)]`). To my understanding, backend support for this is not quite there yet (and this - or other - extensions have consequently not been implemented yet). Applying the attribute on a module level is also not implemented yet. - Description of the new attribute: rust-lang/reference#2278 - https://rust-lang.github.io/rfcs/2412-optimize-attr.html - Should we also implement optimize(always)? optimize(level=x)? Not yet. - Should there be any way to specify what global optimization for speed level is used in conjunction with the optimization for speed option (e.g. -Copt-level=s3 could be equivalent to -Copt-level=3 and #[optimize(size)] on the crate item). Not yet. The `optimize(none)` variant was added. The variants above were discussed here: rust-lang#54882 (comment) - `#[optimize(none)]` implies `#[inline(never)]` to be effective (rust-lang#136329) - As with all optimization-controlling flags, the effects on speed and binary size can be hard to predict: rust-lang#54882 (comment) - Applying the attribute to incompatible items emits an error: rust-lang#128458 The standard library itself uses this attribute in a few places - Wiring it up to the llvm codegen backend: https://github.com/rust-lang/rust/blob/c0bb140a37c81cf59a0b40c21c9413059644e294/compiler/rustc_codegen_llvm/src/attributes.rs#L416 - Catching usage on incompatible items: rust-lang#128458 - Basic tests: https://github.com/rust-lang/rust/blob/c0bb140a37c81cf59a0b40c21c9413059644e294/tests/ui/attributes/optimize.rs - Testing the effect on compilation: https://github.com/rust-lang/rust/blob/c0bb140a37c81cf59a0b40c21c9413059644e294/tests/codegen-llvm/optimize-attr-1.rs Trivial changes to rust-analyzer to support the new attribute as an inert attribute (part of this PR). As far as the AM is concerned, this attribute doesn't exist. Most of the work was not done by me, I'm just writing the stabilization report :-) @nagisa did the initial implementation, @clubby789 implemented optimize(none) and fixed the attribute being allowed in too many places.
0765805 to
59b5d8d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.