-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Allow inline(always)
with a target feature behind a unstable feature target_feature_inline_always
.
#145932
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
Conversation
Co-authored-by: Jamie Cunliffe <[email protected]>
r? @davidtwco rustbot has assigned @davidtwco. Use |
Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt Some changes occurred in compiler/rustc_codegen_ssa |
r? compiler I reviewed this internally prior to it going upstream so shouldn't review it again. #145574 has all the context that a reviewer should need. t-lang have already approved this for experimental implementation. |
hiya, I had a look through this and it looks very reasonable. However, I don't have time right now to properly dive into this and it's not a thing I'd often interact with so I'm going to reroll once more. My apologies :3 r? compiler |
r? compiler |
@bors r+ |
…ing, r=jackh726 Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`. Rather than adding the inline always attribute to the function definition, we add it to the callsite. We can then check that the target features match and that the call would be safe to inline. If the function isn't inlined due to a mismatch, we emit a warning informing the user that the function can't be inlined due to the target feature mismatch. See tracking issue rust-lang#145574
Rollup of 24 pull requests Successful merges: - #140459 (Add `read_buf` equivalents for positioned reads) - #143725 (core: add Peekable::next_if_map) - #145209 (Stabilize `path_add_extension`) - #145342 (fix drop scope for `super let` bindings within `if let`) - #145750 (raw_vec.rs: Remove superfluous fn alloc_guard) - #145827 (On unused binding or binding not present in all patterns, suggest potential typo of unit struct/variant or const) - #145932 (Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`.) - #145962 (Ensure we emit an allocator shim when only some crate types need one) - #145963 (Add LSX accelerated implementation for source file analysis) - #146054 (add `#[must_use]` to `array::repeat`) - #146090 (Derive `PartialEq` for `InvisibleOrigin`) - #146112 (don't uppercase error messages) - #146120 (Correct typo in `rustc_errors` comment) - #146124 (Test `rustc-dev` in `distcheck`) - #146127 (Rename `ToolRustc` to `ToolRustcPrivate`) - #146131 (rustdoc-search: add test case for indexing every item type) - #146134 (llvm: nvptx: Layout update to match LLVM) - #146136 (docs(std): add missing closing code block fences in doc comments) - #146137 (Disallow frontmatter in `--cfg` and `--check-cfg` arguments) - #146140 (compiletest: cygwin follows windows in using PATH for dynamic libraries) - #146150 (fix(rustdoc): match rustc `--emit` precedence ) - #146155 (Make bootstrap self test parallel) - #146161 ([rustdoc] Uncomment code to add scraped rustdoc examples in loaded paths) - #146172 (triagebot: configure some pings when certain attributes are used) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of #145932 - JamieCunliffe:target-feature-inlining, r=jackh726 Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`. Rather than adding the inline always attribute to the function definition, we add it to the callsite. We can then check that the target features match and that the call would be safe to inline. If the function isn't inlined due to a mismatch, we emit a warning informing the user that the function can't be inlined due to the target feature mismatch. See tracking issue #145574
Perf results from rollup (regressions): |
Rollup of 24 pull requests Successful merges: - rust-lang/rust#140459 (Add `read_buf` equivalents for positioned reads) - rust-lang/rust#143725 (core: add Peekable::next_if_map) - rust-lang/rust#145209 (Stabilize `path_add_extension`) - rust-lang/rust#145342 (fix drop scope for `super let` bindings within `if let`) - rust-lang/rust#145750 (raw_vec.rs: Remove superfluous fn alloc_guard) - rust-lang/rust#145827 (On unused binding or binding not present in all patterns, suggest potential typo of unit struct/variant or const) - rust-lang/rust#145932 (Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`.) - rust-lang/rust#145962 (Ensure we emit an allocator shim when only some crate types need one) - rust-lang/rust#145963 (Add LSX accelerated implementation for source file analysis) - rust-lang/rust#146054 (add `#[must_use]` to `array::repeat`) - rust-lang/rust#146090 (Derive `PartialEq` for `InvisibleOrigin`) - rust-lang/rust#146112 (don't uppercase error messages) - rust-lang/rust#146120 (Correct typo in `rustc_errors` comment) - rust-lang/rust#146124 (Test `rustc-dev` in `distcheck`) - rust-lang/rust#146127 (Rename `ToolRustc` to `ToolRustcPrivate`) - rust-lang/rust#146131 (rustdoc-search: add test case for indexing every item type) - rust-lang/rust#146134 (llvm: nvptx: Layout update to match LLVM) - rust-lang/rust#146136 (docs(std): add missing closing code block fences in doc comments) - rust-lang/rust#146137 (Disallow frontmatter in `--cfg` and `--check-cfg` arguments) - rust-lang/rust#146140 (compiletest: cygwin follows windows in using PATH for dynamic libraries) - rust-lang/rust#146150 (fix(rustdoc): match rustc `--emit` precedence ) - rust-lang/rust#146155 (Make bootstrap self test parallel) - rust-lang/rust#146161 ([rustdoc] Uncomment code to add scraped rustdoc examples in loaded paths) - rust-lang/rust#146172 (triagebot: configure some pings when certain attributes are used) r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 24 pull requests Successful merges: - rust-lang/rust#140459 (Add `read_buf` equivalents for positioned reads) - rust-lang/rust#143725 (core: add Peekable::next_if_map) - rust-lang/rust#145209 (Stabilize `path_add_extension`) - rust-lang/rust#145342 (fix drop scope for `super let` bindings within `if let`) - rust-lang/rust#145750 (raw_vec.rs: Remove superfluous fn alloc_guard) - rust-lang/rust#145827 (On unused binding or binding not present in all patterns, suggest potential typo of unit struct/variant or const) - rust-lang/rust#145932 (Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`.) - rust-lang/rust#145962 (Ensure we emit an allocator shim when only some crate types need one) - rust-lang/rust#145963 (Add LSX accelerated implementation for source file analysis) - rust-lang/rust#146054 (add `#[must_use]` to `array::repeat`) - rust-lang/rust#146090 (Derive `PartialEq` for `InvisibleOrigin`) - rust-lang/rust#146112 (don't uppercase error messages) - rust-lang/rust#146120 (Correct typo in `rustc_errors` comment) - rust-lang/rust#146124 (Test `rustc-dev` in `distcheck`) - rust-lang/rust#146127 (Rename `ToolRustc` to `ToolRustcPrivate`) - rust-lang/rust#146131 (rustdoc-search: add test case for indexing every item type) - rust-lang/rust#146134 (llvm: nvptx: Layout update to match LLVM) - rust-lang/rust#146136 (docs(std): add missing closing code block fences in doc comments) - rust-lang/rust#146137 (Disallow frontmatter in `--cfg` and `--check-cfg` arguments) - rust-lang/rust#146140 (compiletest: cygwin follows windows in using PATH for dynamic libraries) - rust-lang/rust#146150 (fix(rustdoc): match rustc `--emit` precedence ) - rust-lang/rust#146155 (Make bootstrap self test parallel) - rust-lang/rust#146161 ([rustdoc] Uncomment code to add scraped rustdoc examples in loaded paths) - rust-lang/rust#146172 (triagebot: configure some pings when certain attributes are used) r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 24 pull requests Successful merges: - rust-lang#140459 (Add `read_buf` equivalents for positioned reads) - rust-lang#143725 (core: add Peekable::next_if_map) - rust-lang#145209 (Stabilize `path_add_extension`) - rust-lang#145342 (fix drop scope for `super let` bindings within `if let`) - rust-lang#145750 (raw_vec.rs: Remove superfluous fn alloc_guard) - rust-lang#145827 (On unused binding or binding not present in all patterns, suggest potential typo of unit struct/variant or const) - rust-lang#145932 (Allow `inline(always)` with a target feature behind a unstable feature `target_feature_inline_always`.) - rust-lang#145962 (Ensure we emit an allocator shim when only some crate types need one) - rust-lang#145963 (Add LSX accelerated implementation for source file analysis) - rust-lang#146054 (add `#[must_use]` to `array::repeat`) - rust-lang#146090 (Derive `PartialEq` for `InvisibleOrigin`) - rust-lang#146112 (don't uppercase error messages) - rust-lang#146120 (Correct typo in `rustc_errors` comment) - rust-lang#146124 (Test `rustc-dev` in `distcheck`) - rust-lang#146127 (Rename `ToolRustc` to `ToolRustcPrivate`) - rust-lang#146131 (rustdoc-search: add test case for indexing every item type) - rust-lang#146134 (llvm: nvptx: Layout update to match LLVM) - rust-lang#146136 (docs(std): add missing closing code block fences in doc comments) - rust-lang#146137 (Disallow frontmatter in `--cfg` and `--check-cfg` arguments) - rust-lang#146140 (compiletest: cygwin follows windows in using PATH for dynamic libraries) - rust-lang#146150 (fix(rustdoc): match rustc `--emit` precedence ) - rust-lang#146155 (Make bootstrap self test parallel) - rust-lang#146161 ([rustdoc] Uncomment code to add scraped rustdoc examples in loaded paths) - rust-lang#146172 (triagebot: configure some pings when certain attributes are used) r? `@ghost` `@rustbot` modify labels: rollup
Rather than adding the inline always attribute to the function definition, we add it to the callsite. We can then check that the target features match and that the call would be safe to inline. If the function isn't inlined due to a mismatch, we emit a warning informing the user that the function can't be inlined due to the target feature mismatch.
See tracking issue #145574