rust/compiler/rustc_codegen_llvm/src
bors 47b41b7788 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))
2021-08-11 01:36:23 +00:00
..
back Add support for raw-dylib with stdcall, fastcall functions on i686-pc-windows-msvc. 2021-07-09 12:04:54 -07:00
coverageinfo Auto merge of #85178 - cjgillot:local-crate, r=oli-obk 2021-05-17 01:42:03 +00:00
debuginfo Prepare inbounds_gep for opaque pointers 2021-08-04 15:51:30 +02:00
llvm Prepare call/invoke for opaque pointers 2021-08-05 10:58:55 -07:00
abi.rs Remove the decl arg from FnAbi::llvm_type 2021-08-05 10:58:55 -07:00
allocator.rs Prepare call/invoke for opaque pointers 2021-08-05 10:58:55 -07:00
asm.rs Prepare call/invoke for opaque pointers 2021-08-05 10:58:55 -07:00
attributes.rs Add support for leaf fn frame pointer elimination 2021-06-30 19:45:17 +03:00
base.rs Drop metadata_encoding_version. 2021-06-01 21:12:27 +02:00
builder.rs Prepare call/invoke for opaque pointers 2021-08-05 10:58:55 -07:00
callee.rs Fix static relocation model for PowerPC64 2021-05-28 03:48:39 +02:00
common.rs Replace LLVMConstInBoundsGEP with LLVMConstInBoundsGEP2* 2021-08-04 15:51:30 +02:00
consts.rs consistently treat None-tagged pointers as ints; get rid of some deprecated Scalar methods 2021-07-14 18:17:49 +02:00
context.rs Auto merge of #87254 - rusticstuff:rustc_codegen_llvm_dont_emit_zero_sized_padding, r=eddyb 2021-08-11 01:36:23 +00:00
declare.rs Remove the decl arg from FnAbi::llvm_type 2021-08-05 10:58:55 -07:00
intrinsic.rs Remove the decl arg from FnAbi::llvm_type 2021-08-05 10:58:55 -07:00
lib.rs Consider all fields when comparing DllImports, to remove nondetermininsm in multiple-definitions test 2021-07-16 11:10:31 -07:00
llvm_util.rs clippy::single_char_pattern 2021-07-25 12:25:26 +02:00
mono_item.rs Fix static relocation model for PowerPC64 2021-05-28 03:48:39 +02:00
type_.rs Auto merge of #87254 - rusticstuff:rustc_codegen_llvm_dont_emit_zero_sized_padding, r=eddyb 2021-08-11 01:36:23 +00:00
type_of.rs Test: Use smallvec directly instead of boxed. 2021-08-09 15:42:37 +00:00
va_arg.rs Replace hard-coded field indexes with lookup on aarch64 non-macos. 2021-08-05 22:40:32 +00:00
value.rs mv compiler to compiler/ 2020-08-30 18:45:07 +03:00