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:
  • 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
  • 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