diff options
| author | bors <bors@rust-lang.org> | 2022-08-10 23:50:18 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-10 23:50:18 +0000 |
| commit | 908fc5b26d15fc96d630ab921e70b2db77a532c4 (patch) | |
| tree | e41b2f2e13cb2eaa1596013bcebdbb440f41c38c /compiler/rustc_codegen_llvm/src | |
| parent | 29e4a9ee0253cd39e552a77f51f11f9a5f1c41e6 (diff) | |
| parent | a32305a80fd1409b054e97836321bd0621b142fd (diff) | |
| download | rust-908fc5b26d15fc96d630ab921e70b2db77a532c4.tar.gz rust-908fc5b26d15fc96d630ab921e70b2db77a532c4.zip | |
Auto merge of #99174 - scottmcm:reoptimize-layout-array, r=joshtriplett
Reoptimize layout array
This way it's one check instead of two, so hopefully (cc #99117) it'll be simpler for rustc perf too 🤞
Quick demonstration:
```rust
pub fn demo(n: usize) -> Option<Layout> {
Layout::array::<i32>(n).ok()
}
```
Nightly: <https://play.rust-lang.org/?version=nightly&mode=release&edition=2021&gist=e97bf33508aa03f38968101cdeb5322d>
```nasm
mov rax, rdi
mov ecx, 4
mul rcx
seto cl
movabs rdx, 9223372036854775805
xor esi, esi
cmp rax, rdx
setb sil
shl rsi, 2
xor edx, edx
test cl, cl
cmove rdx, rsi
ret
```
This PR (note no `mul`, in addition to being much shorter):
```nasm
xor edx, edx
lea rax, [4*rcx]
shr rcx, 61
sete dl
shl rdx, 2
ret
```
This is built atop `@CAD97` 's #99136; the new changes are cb8aba66ef6a0e17f08a0574e4820653e31b45a0.
I added a bunch more tests for `Layout::from_size_align` and `Layout::array` too.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions
