Let codegen decide when to mem::swap with immediates#122582
Let codegen decide when to mem::swap with immediates#122582bors merged 5 commits intorust-lang:masterfrom
mem::swap with immediates#122582Conversation
This comment has been minimized.
This comment has been minimized.
725417f to
9f992da
Compare
src/tools/miri/tests/fail/intrinsics/typed-swap-invalid-array.rs
Outdated
Show resolved
Hide resolved
|
Some changes occurred to the CTFE / Miri engine cc @rust-lang/miri The Miri subtree was changed cc @rust-lang/miri |
|
@bors try @rust-timer queue |
This comment has been minimized.
This comment has been minimized.
Let codegen decide when to `mem::swap` with immediates Making `libcore` decide this is silly; the backend has so much better information about when it's a good idea. Thus this PR introduces a new `typed_swap` intrinsic with a fallback body, and replaces that fallback implementation when swapping immediates or scalar pairs. r? oli-obk Replaces rust-lang#111744, and means we'll never need more libs PRs like rust-lang#111803 or rust-lang#107140
|
☀️ Try build successful - checks-actions |
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
library/core/src/ptr/mod.rs
Outdated
| } | ||
| } | ||
|
|
||
| /// Non-overlapping *typed* swap of a single value. |
There was a problem hiding this comment.
Should it be called typed_swap_nonoverlapping?
There was a problem hiding this comment.
I went back and forth multiple times on this. typed_swap_nonoverlapping sounds to me like ptr::swap_nonoverlapping, just typed. So that would make this typed_swap_nonoverlapping_one or something, and now that's just seeming really long.
So since it's internal, I think I'm inclined to leave it as-is for now unless someone feels particularly strongly about it.
There was a problem hiding this comment.
I feel like the "nonoverlapping" distinction is way more fundamental than the "one" distinction. And since it is internal, consistency with ptr::swap_nonoverlapping isn't very important IMO.
src/tools/miri/tests/fail/intrinsics/typed-swap-invalid-array.rs
Outdated
Show resolved
Hide resolved
|
💔 Test failed - checks-actions |
|
@bors r=oli-obk |
Let codegen decide when to `mem::swap` with immediates Making `libcore` decide this is silly; the backend has so much better information about when it's a good idea. Thus this PR introduces a new `typed_swap` intrinsic with a fallback body, and replaces that fallback implementation when swapping immediates or scalar pairs. r? oli-obk Replaces rust-lang#111744, and means we'll never need more libs PRs like rust-lang#111803 or rust-lang#107140
|
💥 Test timed out |
|
@bors retry |
|
☀️ Test successful - checks-actions |
|
Finished benchmarking commit (d6eb0f5): 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)ResultsThis 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.
CyclesResultsThis 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 sizeResultsThis 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: 669.588s -> 671.198s (0.24%) |
Let codegen decide when to `mem::swap` with immediates Making `libcore` decide this is silly; the backend has so much better information about when it's a good idea. Thus this PR introduces a new `typed_swap` intrinsic with a fallback body, and replaces that fallback implementation when swapping immediates or scalar pairs. r? oli-obk Replaces rust-lang#111744, and means we'll never need more libs PRs like rust-lang#111803 or rust-lang#107140
Making
libcoredecide this is silly; the backend has so much better information about when it's a good idea.Thus this PR introduces a new
typed_swapintrinsic with a fallback body, and replaces that fallback implementation when swapping immediates or scalar pairs.r? oli-obk
Replaces #111744, and means we'll never need more libs PRs like #111803 or #107140