Struct Read

Struct Documentation

struct Read

One per leg of a consumer cell’s production tree — not one per distinct operand value: a consumer whose two legs read the same value carries two reads of it (the runtime accesses that cell’s home twice), which the de-duplicated operand lists of ordered_schedule_dep_graph / OrderedSchedule::operand_vids cannot express (see CellTableInputs::operands_of).

Note

The schedule seam’s facts are per leg: SlicedModeAssignment::occ_facts / occ_invariant carry the consumer’s leg as their last element, and the builder pairs each leg’s read with its own fact, so the two legs of one consumer reading one value can carry different slice and invariant_on. The residual gap is upstream: when CellTableInputs::operands_of is absent the builder falls back to the de-duplicated depends_on and a self-contracting consumer gets one read instead of two (as-built design section 12.2).

Public Members

CellId consumer = 0
std::size_t operand_value_id = 0
CellId source = 0
container::svector<std::pair<std::size_t, LoopKey>> slice

operand positions to slice to the current batch of that loop instance.

container::svector<LoopKey> invariant_on = {}

loop instances the consumer is sliced by on which the schedule seam (SlicedModeAssignment::occ_invariant) recorded an explicit fact: an explicit record that no slicing decision bound this read on that instance; the form rule accepts it as whole, so this table check is necessary, not sufficient &#8212; the dry-run range check remains the ground truth. Empty = no such record.