-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Save 2 pointers in TerminatorKind
(96 → 80 bytes)
#126784
Conversation
@bors try @rust-timer queue |
This comment has been minimized.
This comment has been minimized.
Save 2 pointers in `TerminatorKind` (96 → 80 bytes) These things don't need to be `Vec`s; boxed slices are enough. The frequent one here is call arguments, but MIR building knows the number of arguments from the THIR, so the collect is always getting the allocation right in the first place, and thus this shouldn't ever add the shrink-in-place overhead. r? ghost
This comment has been minimized.
This comment has been minimized.
☀️ Try build successful - checks-actions |
This comment has been minimized.
This comment has been minimized.
Finished benchmarking commit (3f294f8): comparison URL. Overall result: ✅ improvements - no action neededBenchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf. @bors rollup=never Instruction countThis is a highly reliable metric that was used to determine the overall result at the top of this comment.
Max RSS (memory usage)Results (primary -0.5%, secondary -3.0%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResults (secondary 6.8%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Binary sizeResults (secondary 0.3%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Bootstrap: 696.377s -> 695.582s (-0.11%) |
42bc2d5
to
8d1cda2
Compare
@@ -768,7 +767,7 @@ impl<'tcx> Inliner<'tcx> { | |||
// | |||
// and the vector is `[closure_ref, tmp0, tmp1, tmp2]`. | |||
if callsite.fn_sig.abi() == Abi::RustCall && callee_body.spread_arg.is_none() { | |||
let mut args = args.into_iter(); | |||
let mut args = Vec::from(args).into_iter(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Box<[T]>
implements IntoIterator
since #124097 -- why can't you just use that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, might not be on beta yet. Pls leave a fixme on this callsite and others.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I was surprised it didn't just work. I can leave FIXMEs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh wait, it's because we literally just don't select the Box<[]>::into_iter
method when doing .
dispatch in edition 2021. Yeah, could be // FIXME(edition_2024):
or something, unless you want to rewrite these to use UFCS.
@@ -134,7 +134,7 @@ impl<'tcx> MockBlocks<'tcx> { | |||
some_from_block, | |||
TerminatorKind::Call { | |||
func: Operand::Copy(self.dummy_place.clone()), | |||
args: vec![], | |||
args: [].into(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Box<[T]>
implements Default
, might be easier to use that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
or Box::new([])
and let CoerceUnsized
do the work
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you don't mind, I'd like to just leave it .into()
because that's what I'm using elsewhere in the places where it's not empty.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well I'd rather you just use Box::new([x, y, z])
everywhere -- I think trailing .into()
is just ugly to read and not as analogous to vec![x, y, z]
😆
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I liked it when it was
args: [
Spanned { node: Operand::Move(size), span: DUMMY_SP },
Spanned { node: Operand::Move(size), span: DUMMY_SP },
Spanned { node: Operand::Move(align), span: DUMMY_SP },
Spanned { node: Operand::Move(align), span: DUMMY_SP },
].into(),
But of course rustfmt won't let us have nice things.
I'm inclined to leave it the one that doesn't say "vec" nor "box" and works with both, but I can change them all to Box::new
if you feel strongly 🙃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also note that this particular code is just building fake MIR for unit tests, so it's relatively unimportant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well this is one of many examples -- I wasn't going to leave a comment on all of them, so the fact it's building fake MIR or processing real MIR isn't really relevant
but ill give this a more in depth review later |
8d1cda2
to
310cf52
Compare
This PR changes MIR cc @oli-obk, @RalfJung, @JakobDegen, @davidtwco, @celinval, @vakaras Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt Some changes occurred in coverage instrumentation. cc @Zalathar Some changes occurred in match lowering cc @Nadrieril |
These things don't need to be `Vec`s; boxed slices are enough. The frequent one here is call arguments, but MIR building knows the number of arguments from the THIR, so the collect is always getting the allocation right in the first place, and thus this shouldn't ever add the shrink-in-place overhead.
310cf52
to
b28efb1
Compare
@bors r+ |
☀️ Test successful - checks-actions |
Finished benchmarking commit (d8d5732): comparison URL. Overall result: ✅ improvements - no action needed@rustbot label: -perf-regression Instruction countThis is a highly reliable metric that was used to determine the overall result at the top of this comment.
Max RSS (memory usage)This benchmark run did not return any relevant results for this metric. CyclesThis benchmark run did not return any relevant results for this metric. Binary sizeThis benchmark run did not return any relevant results for this metric. Bootstrap: 692.589s -> 691.83s (-0.11%) |
Update Rust toolchain from nightly-2024-06-24 to nightly-2024-06-25 without any other source changes. This is an automatically generated pull request. If any of the CI checks fail, manual intervention is required. In such a case, review the changes at https://github.com/rust-lang/rust from rust-lang@bcf94de up to rust-lang@6b0f4b5. The log for this commit range is: rust-lang@6b0f4b5ec3 Auto merge of rust-lang#126914 - compiler-errors:rollup-zx0hchm, r=compiler-errors rust-lang@16bd6e25e1 Rollup merge of rust-lang#126911 - oli-obk:do_not_count_errors, r=compiler-errors rust-lang@59c258f51f Rollup merge of rust-lang#126909 - onur-ozkan:add-kobzol, r=matthiaskrgr rust-lang@85eb835a14 Rollup merge of rust-lang#126904 - GrigorenkoPV:nonzero-fixme, r=joboet rust-lang@a7721a0373 Rollup merge of rust-lang#126899 - GrigorenkoPV:suggest-const-block, r=davidtwco rust-lang@9ce2a070b3 Rollup merge of rust-lang#126682 - Zalathar:coverage-attr, r=lcnr rust-lang@49bdf460a2 Rollup merge of rust-lang#126673 - oli-obk:dont_rely_on_err_reporting, r=compiler-errors rust-lang@46e43984d1 Rollup merge of rust-lang#126413 - matthiaskrgr:crshmsg, r=oli-obk rust-lang@ed460d2eaa Rollup merge of rust-lang#125575 - dingxiangfei2009:derive-smart-ptr, r=davidtwco rust-lang@c77dc28f87 Rollup merge of rust-lang#125082 - kpreid:const-uninit, r=dtolnay rust-lang@faa28be2f1 Rollup merge of rust-lang#124712 - Enselic:deprecate-inline-threshold, r=pnkfelix rust-lang@00e5f5886a Rollup merge of rust-lang#124460 - long-long-float:show-notice-about-enum-with-debug, r=pnkfelix rust-lang@d8d5732456 Auto merge of rust-lang#126784 - scottmcm:smaller-terminator, r=compiler-errors rust-lang@13fca73f49 Replace `MaybeUninit::uninit_array()` with array repeat expression. rust-lang@5a3e2a4e92 Auto merge of rust-lang#126523 - joboet:the_great_big_tls_refactor, r=Mark-Simulacrum rust-lang@45261ff2ec add @Kobzol to bootstrap team for triagebot rust-lang@84474a25a4 Small fixme in core now that NonZero is generic rust-lang@50a02ed789 std: fix wasm builds rust-lang@8fc6b3de19 Separate the mir body lifetime from the other lifetimes rust-lang@1c4d0ced58 Separate the lifetimes of the `BorrowckInferCtxt` from the other borrowed items rust-lang@d371d17496 Auto merge of rust-lang#126900 - matthiaskrgr:rollup-24ah97b, r=matthiaskrgr rust-lang@8ffb5f936a compiletest: make the crash test error message abit more informative rust-lang@a80ee9159b Rollup merge of rust-lang#126882 - estebank:multiline-order, r=WaffleLapkin rust-lang@8bfde609e2 Rollup merge of rust-lang#126414 - ChrisDenton:target-known, r=Nilstrieb rust-lang@94b9ea417d Rollup merge of rust-lang#126213 - zachs18:atomicbool-u8-i8-from-ptr-alignment, r=Nilstrieb rust-lang@9d24ecc37b Rollup merge of rust-lang#125241 - Veykril:tool-rust-analyzer, r=davidtwco rust-lang@ba5ec1fc5c Suggest inline const blocks for array initialization rust-lang@06c072f158 Auto merge of rust-lang#126788 - GuillaumeGomez:migrate-rustdoc-tests-syntax, r=fmease,oli-obk rust-lang@1852141219 coverage: Bless coverage attribute tests rust-lang@b7c057c9b2 coverage: Always error on `#[coverage(..)]` in unexpected places rust-lang@a000fa8b54 coverage: Tighten validation of `#[coverage(off)]` and `#[coverage(on)]` rust-lang@b5dfeba0e1 coverage: Forbid multiple `#[coverage(..)]` attributes rust-lang@6909feab8e Allow numbers in rustdoc tests commands rust-lang@4e258bb4c3 Fix tidy issue for rustdoc tests commands rust-lang@51fedf65ff Remove commands duplication between `compiletest` and `tests/rustdoc` rust-lang@1b67035579 Update `tests/rustdoc` to new test syntax rust-lang@d3ec92e16e Move `tests/rustdoc` testsuite to `//@` syntax rust-lang@2c243d9570 Auto merge of rust-lang#126891 - matthiaskrgr:rollup-p6dl1gk, r=matthiaskrgr rust-lang@b94d2754b5 Rollup merge of rust-lang#126888 - compiler-errors:oops-debug-printing, r=dtolnay rust-lang@9892b3e9fe Rollup merge of rust-lang#126854 - devnexen:std_unix_os_fallback_upd, r=Mark-Simulacrum rust-lang@3108dfaced Rollup merge of rust-lang#126849 - workingjubilee:correctly-classify-arm-low-dregs, r=Amanieu rust-lang@dcace866f0 Rollup merge of rust-lang#126845 - rust-lang:cargo_update, r=Mark-Simulacrum rust-lang@21850f5bd8 Rollup merge of rust-lang#126807 - devnexen:copy_file_macos_simpl, r=Mark-Simulacrum rust-lang@b24e3df0df Rollup merge of rust-lang#126754 - compiler-errors:use-rustfmt, r=calebcartwright rust-lang@ad0531ae0d Rollup merge of rust-lang#126455 - surechen:fix_126222, r=estebank rust-lang@7babf99ea9 Rollup merge of rust-lang#126298 - heiher:loongarch64-musl-ci, r=Mark-Simulacrum rust-lang@9a591ea1ce Rollup merge of rust-lang#126177 - carbotaniuman:unsafe_attr_errors, r=jieyouxu rust-lang@25446c25fc Remove stray println from rustfmt rust-lang@d49994b060 Auto merge of rust-lang#126023 - amandasystems:you-dropped-this-again, r=nikomatsakis rust-lang@a23917cfd0 Add hard error and migration lint for unsafe attrs rust-lang@284437d434 Special case when a code line only has multiline span starts rust-lang@f1be59fa72 SmartPointer derive-macro rust-lang@a426d6fdf0 Implement use<> formatting in rustfmt rust-lang@16fef40896 Promote loongarch64-unknown-linux-musl to Tier 2 with host tools rust-lang@03d73fa6ba ci: Add support for dist-loongarch64-musl rust-lang@fc50acae90 fix build rust-lang@bd9ce3e074 std::unix::os::home_dir: fallback's optimisation. rust-lang@0d8f734172 compiler: Fix arm32 asm issues by hierarchically sorting reg classes rust-lang@e8b5ba1111 For [E0308]: mismatched types, when expr is in an arm's body, not add semicolon ';' at the end of it. rust-lang@990535723d cargo update rust-lang@b28efb11af Save 2 pointers in `TerminatorKind` (96 → 80 bytes) rust-lang@65530ba100 std::unix::fs: copy simplification for apple. rust-lang@339015920d Add `rust_analyzer` as a predefined tool rust-lang@3f2f8438b4 Ensure we don't accidentally succeed when we want to report an error rust-lang@32f9b8bf76 std: rename module for clarity rust-lang@35f050b8da std: update TLS module documentation rust-lang@b2f29edc81 std: use the `c_int` from `core::ffi` instead of `libc` rust-lang@d70f071392 std: simplify `#[cfg]`s for TLS rust-lang@d630f5da7a Show notice about "never used" for enum rust-lang@f3facf1175 std: refactor the TLS implementation rust-lang@f5f067bf9d Deprecate no-op codegen option `-Cinline-threshold=...` rust-lang@651ff643ae Fix typo in `-Cno-stack-check` deprecation warning rust-lang@3af624272a rustc_codegen_ssa: Remove unused ModuleConfig::inline_threshold rust-lang@34e6ea1446 Tier 2 std support must always be known rust-lang@2d4cb7aa5a Update docs for AtomicU8/I8. rust-lang@7885c7b7b2 Update safety docs for AtomicBool::from_ptr. rust-lang@7b5b7a7010 Remove confusing `use_polonius` flag and do less cloning Co-authored-by: tautschnig <1144736+tautschnig@users.noreply.github.com>
These things don't need to be
Vec
s; boxed slices are enough.The frequent one here is call arguments, but MIR building knows the number of arguments from the THIR, so the collect is always getting the allocation right in the first place, and thus this shouldn't ever add the shrink-in-place overhead.