]> git.lizzy.rs Git - rust.git/commit - src/tools/miri
Auto merge of #87254 - rusticstuff:rustc_codegen_llvm_dont_emit_zero_sized_padding...
authorbors <bors@rust-lang.org>
Wed, 11 Aug 2021 01:36:23 +0000 (01:36 +0000)
committerbors <bors@rust-lang.org>
Wed, 11 Aug 2021 01:36:23 +0000 (01:36 +0000)
commit47b41b7788a6f85c749049062f1e4eed497cd894
treef68a519116440d8e4194981cdbacdaab12f9abf1
parente8e1b32a7840c07f30c04b252c379a044a73902d
parent02295f464aaf78ece81a80e5b99a034119e74748
Auto merge of #87254 - rusticstuff:rustc_codegen_llvm_dont_emit_zero_sized_padding, r=eddyb

LLVM codegen: Don't emit zero-sized padding for fields

Currently padding is emitted before fields of a struct and at the end of the struct regardless of the ABI. Even if no padding is required zero-sized padding fields are emitted. This is not useful and - more importantly - it make it impossible to generate the exact vector types that LLVM expects for certain ARM SIMD intrinsics. This change should unblock the implementation of many ARM intrinsics using the `unadjusted` ABI, see https://github.com/rust-lang/stdarch/issues/1143#issuecomment-827404092.

This is a proof of concept only because the field lookup now takes O(number of fields) time compared to O(1) before since it recalculates the mapping at every lookup. I would like to find out how big the performance impact actually is before implementing caching or restricting this behavior to the `unadjusted` ABI.

cc `@SparrowLii` `@bjorn3`

([Discussion on internals](https://internals.rust-lang.org/t/feature-request-add-a-way-in-rustc-for-generating-struct-type-llvm-ir-without-paddings/15007))
compiler/rustc_codegen_llvm/src/context.rs
compiler/rustc_codegen_llvm/src/type_.rs