rust/compiler
bors 4e0d0d757e Auto merge of #102750 - the8472:opt-field-order, r=wesleywiser
optimize field ordering by grouping m*2^n-sized fields with equivalently aligned ones

```rust
use std::ptr::addr_of;
use std::mem;

struct Foo {
    word: u32,
    byte: u8,
    ary: [u8; 4]
}

fn main() {
    let foo: Foo = unsafe { mem::zeroed() };

    println!("base: {:p}\nword: {:p}\nbyte: {:p}\nary:  {:p}", &foo, addr_of!(foo.word), addr_of!(foo.byte), addr_of!(foo.ary));
}
```

prints

```
base: 0x7fffc1a8a668
word: 0x7fffc1a8a668
byte: 0x7fffc1a8a66c
ary:  0x7fffc1a8a66d
```

I.e. the `u8` in the middle causes the array to sit at an odd offset, which might prevent optimizations, especially on architectures where unaligned loads are costly.

Note that this will make field ordering niche-dependent, i.e. a `Bar<T>` with `T=char` and `T=u32` may result in different field order, this may break some code that makes invalid assumptions about `repr(Rust)` types.
2022-11-23 10:01:48 +00:00
..
rustc rustc: Use unix_sigpipe instead of rustc_driver::set_sigpipe_handler 2022-10-02 17:49:36 +02:00
rustc_apfloat
rustc_arena
rustc_ast Auto merge of #103578 - petrochenkov:nofict, r=nagisa 2022-11-22 10:17:09 +00:00
rustc_ast_lowering Rollup merge of #104612 - Swatinem:async-ret-y, r=estebank 2022-11-22 22:54:39 -05:00
rustc_ast_passes Visit attributes of trait impl items during AST validation 2022-11-08 13:44:07 +01:00
rustc_ast_pretty Split MacArgs in two. 2022-11-22 09:04:15 +11:00
rustc_attr Migrate all diagnostics 2022-10-23 10:09:44 +02:00
rustc_baked_icu_data Update crate documentation of rustc_baked_icu_data crate 2022-11-18 14:46:36 -08:00
rustc_borrowck Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_builtin_macros Split MacArgs in two. 2022-11-22 09:04:15 +11:00
rustc_codegen_cranelift Rollup merge of #104605 - RalfJung:clf_consts, r=bjorn3 2022-11-21 14:11:12 +01:00
rustc_codegen_gcc Rollup merge of #104001 - Ayush1325:custom-entry, r=bjorn3 2022-11-19 11:54:43 +05:30
rustc_codegen_llvm Unreserve braced enum variants in value namespace 2022-11-21 22:40:06 +03:00
rustc_codegen_ssa Rollup merge of #104605 - RalfJung:clf_consts, r=bjorn3 2022-11-21 14:11:12 +01:00
rustc_const_eval Use tcx.require_lang_item instead of unwrapping 2022-11-22 17:19:19 +00:00
rustc_data_structures Auto merge of #97870 - eggyal:inplace_fold_spec, r=wesleywiser 2022-11-19 02:28:47 +00:00
rustc_driver Rollup merge of #103117 - joshtriplett:use-is-terminal, r=eholk 2022-11-19 15:35:18 +01:00
rustc_error_codes Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_error_messages Rollup merge of #104621 - YC:master, r=davidtwco 2022-11-22 22:54:40 -05:00
rustc_errors Rollup merge of #104504 - compiler-errors:fru-syntax-note, r=estebank 2022-11-20 23:50:27 +01:00
rustc_expand Rollup merge of #104638 - Nilstrieb:macro-diagnostics, r=compiler-errors 2022-11-22 01:26:08 -05:00
rustc_feature Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_fs_util
rustc_graphviz Add initial version of value analysis and dataflow constant propagation 2022-11-07 10:35:08 +01:00
rustc_hir fix tests, update size asserts 2022-11-22 23:12:26 +01:00
rustc_hir_analysis Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_hir_pretty Store a LocalDefId in hir::Variant & hir::Field. 2022-11-13 14:06:51 +00:00
rustc_hir_typeck Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_incremental Rename some OwnerId fields. 2022-10-29 20:28:38 +11:00
rustc_index Remove from compiler/ crates 2022-09-29 16:49:04 +09:00
rustc_infer Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_interface Enable icu sync feature for parallel compiler 2022-11-18 14:46:35 -08:00
rustc_lexer Use token::Lit in ast::ExprKind::Lit. 2022-11-16 09:41:28 +11:00
rustc_lint Rollup merge of #104359 - Nilstrieb:plus-one, r=fee1-dead 2022-11-22 22:54:39 -05:00
rustc_lint_defs Merge branch 'master' into patch-2 2022-11-15 21:16:11 +01:00
rustc_llvm Auto merge of #102717 - beetrees:repr128-c-style-debuginfo, r=nagisa 2022-11-21 01:44:12 +00:00
rustc_log Use IsTerminal in rustc_log 2022-10-16 15:10:40 +01:00
rustc_macros Improve slug name error 2022-11-21 15:24:51 +01:00
rustc_metadata Rollup merge of #104621 - YC:master, r=davidtwco 2022-11-22 22:54:40 -05:00
rustc_middle Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_mir_build Auto merge of #104711 - Dylan-DPC:rollup-gkw1qr8, r=Dylan-DPC 2022-11-22 13:18:45 +00:00
rustc_mir_dataflow Allow iterators instead of requiring slices that will get turned into iterators 2022-11-21 20:33:55 +00:00
rustc_mir_transform Allow iterators instead of requiring slices that will get turned into iterators 2022-11-21 20:33:55 +00:00
rustc_monomorphize Stop passing the self-type as a separate argument. 2022-11-21 20:39:46 +00:00
rustc_parse Rollup merge of #104559 - nnethercote:split-MacArgs, r=petrochenkov 2022-11-22 00:01:09 +01:00
rustc_parse_format shift no characters when using raw string literals 2022-11-15 14:28:20 +09:00
rustc_passes Change to Ty::is_inhabited_from 2022-11-20 19:04:11 -06:00
rustc_plugin_impl Migrate all diagnostics 2022-10-23 10:09:44 +02:00
rustc_privacy Store a LocalDefId in hir::Variant & hir::Field. 2022-11-13 14:06:51 +00:00
rustc_query_impl Make AbsoluteBytePos a u64. 2022-11-08 18:47:26 +00:00
rustc_query_system Hash spans when interning. 2022-11-11 13:02:37 +00:00
rustc_resolve Auto merge of #104711 - Dylan-DPC:rollup-gkw1qr8, r=Dylan-DPC 2022-11-22 13:18:45 +00:00
rustc_save_analysis Store a LocalDefId in hir::Variant & hir::Field. 2022-11-13 14:06:51 +00:00
rustc_serialize rustdoc: use ThinVec for cleaned generics 2022-11-02 16:17:22 -07:00
rustc_session Match crate and slug names 2022-11-21 15:24:50 +01:00
rustc_smir
rustc_span Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_symbol_mangling Unreserve braced enum variants in value namespace 2022-11-21 22:40:06 +03:00
rustc_target Rollup merge of #102293 - ecnelises:aix.initial, r=davidtwco 2022-11-23 06:40:22 +09:00
rustc_trait_selection Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_traits Rollup merge of #103488 - oli-obk:impl_trait_for_tait, r=lcnr 2022-11-22 22:54:38 -05:00
rustc_transmute Auto merge of #103831 - chenyukang:yukang/fix-103751-ice, r=nagisa 2022-11-05 13:48:30 +00:00
rustc_ty_utils also sort fields by niche sizes to retain optimizations 2022-11-22 23:12:26 +01:00
rustc_type_ir Remove some unnecessary slicing 2022-11-21 20:38:55 +00:00