Places
A place is a tuple of a local and a projection.
Place Expansion
This is missing some cases
A set of places is a place expansion iff there exists a base such that:
- is an
enum
type and and is a variant of - is a
struct
or tuple type and is the set of places obtained by projecting with each of the fields in the type of - is a reference-typed field and
- is an array or slice and (TODO: more cases)
If there is such a , then that is unique, and is an expansion of .
Owned Places
A place is owned iff it does not project from the dereference of a reference-typed place.
Place Liveness
A place is live at a location iff there exists a location and a control flow-path from to where a place conflicting with is used at and there are no assignments of any places conflicting with along c.
Place Prefix
A place is a prefix of a place iff:
- and have the same local, and
- The projection of is a prefix of the projection of
Note that is a prefix of itself.
A place is a strict prefix of iff is a prefix of and .