Place 2.0
all hands discussions: +Topic: MIR 2.0 and MIR Optimizations
- Make places not recursive, but just a slice of projections and a base
- current status:
- https://github.com/rust-lang/rust/issues/52708
- +Place 2.0 current PR status
- https://github.com/spastorino/rust/commits/place2
- idea from all-hands: write an iterator for the current recursive structure and then convert current algorithms to use that, then switch it over to new representation and remove the old representation
- partially exists via unroll_place
- this can be done one Place use site at a time (easier to review)
- this would probably cover many (most) but not all of the sites (this might not work for writes to Place but maybe a mutable iterator would be possible?) but it would make it easier to make incremental progress
- Remove Deref from the list of projections
- create a “pseudo-reborrow” Rvalue (or maybe an Operand?) which just takes a place
- this means what was (*foo.bar).boo now becomes let tmp = &*foo.bar; tmp.boo
- Remove Index from the list of projections
- The Local field for the actual index is slightly inconvenient
- Add an Option<Local> field to Rvalue::Ref
- Later refactor the Local to Operand