rust/compiler/rustc_const_eval/src
bors 83c9732e0c Auto merge of #116270 - cjgillot:gvn-aggregate, r=oli-obk,RalfJung
See through aggregates in GVN

This PR is extracted from https://github.com/rust-lang/rust/pull/111344

The first 2 commit are cleanups to avoid repeated work. I propose to stop removing useless assignments as part of this pass, and let a later `SimplifyLocals` do it. This makes tests easier to read (among others).

The next 3 commits add a constant folding mechanism to the GVN pass, presented in https://github.com/rust-lang/rust/pull/116012. ~This pass is designed to only use global allocations, to avoid any risk of accidental modification of the stored state.~

The following commits implement opportunistic simplifications, in particular:
- projections of aggregates: `MyStruct { x: a }.x` gets replaced by `a`, works with enums too;
- projections of arrays: `[a, b][0]` becomes `a`;
- projections of repeat expressions: `[a; N][x]` becomes `a`;
- transform arrays of equal operands into a repeat rvalue.

Fixes https://github.com/rust-lang/miri/issues/3090

r? `@oli-obk`
2023-10-29 14:50:53 +00:00
..
const_eval Split eval_to_allocation_raw_provider 2023-10-23 08:35:26 +00:00
interpret Rename has_provance and tweaks comments. 2023-10-25 17:59:30 +00:00
transform Refactor away the need for some descr methods. 2023-10-25 16:40:32 +00:00
util Make ty::print::Printer take &mut self instead of self 2023-10-21 11:33:05 +02:00
errors.rs more precise error for 'based on misaligned pointer' case 2023-10-15 18:13:33 +02:00
lib.rs docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00