Skip to content

compute: Re-encode LetRec read-edges to the columnar edge#37794

Draft
antiguru wants to merge 2 commits into
columnar-tc-retire-fueled-flagfrom
columnar-tp-letrec-reencode
Draft

compute: Re-encode LetRec read-edges to the columnar edge#37794
antiguru wants to merge 2 commits into
columnar-tc-retire-fueled-flagfrom
columnar-tp-letrec-reencode

Conversation

@antiguru

@antiguru antiguru commented Jul 21, 2026

Copy link
Copy Markdown
Member

Re-encode LetRec recursive-binding read-edges to the columnar edge; the feedback Variable stays Vec. Removes the second mixed-variant edge source feeding concat_many.

Columnar dataflow-edge migration. Design doc: doc/developer/design/20260720_columnar_dataflow_edges.md (#37744).

Part of CPU-51.

@antiguru
antiguru force-pushed the columnar-tp-letrec-reencode branch from b045d8b to 53a7cb3 Compare July 22, 2026 08:41
@antiguru
antiguru force-pushed the columnar-tc-retire-fueled-flag branch from ffb77b9 to 336d138 Compare July 22, 2026 08:41
@linear-code

linear-code Bot commented Jul 22, 2026

Copy link
Copy Markdown

CPU-51

@antiguru
antiguru force-pushed the columnar-tc-retire-fueled-flag branch from 336d138 to 9a5a05a Compare July 22, 2026 16:24
@antiguru
antiguru force-pushed the columnar-tp-letrec-reencode branch from 53a7cb3 to 46a3139 Compare July 22, 2026 16:25
antiguru and others added 2 commits July 22, 2026 19:44
A rec binding's collection edge was `Vec`: the in-loop feedback bundle
and the outer-scope extraction both built the bundle from a
`VecCollection`. Union reads its inputs' `.collection` edges directly, so
an identity `Get` on a rec binding fed a `Vec` input into `concat_many`,
the last source of a `Vec` edge into a Union.

Re-encode the read-edge to columnar via `vec_to_columnar` at both sites
so `Get`s on a rec binding see a columnar edge. The feedback `Variable`
stays `Vec` (the recursive value still flows `Vec` through the loop); only
the externally-visible collection is re-containered. `vec_to_columnar` is
a stateless, timestamp-agnostic, non-consolidating pass-through, so in the
iterative scope it behaves like any loop-body operator and does not alter
the feedback frontier or fixed-point behavior. The value is already
consolidated (`LetRecConsolidation`) before the read, so the re-encode
just re-containers it.

With this, a Union over a rec binding receives all-columnar inputs, and
`from_collections` (the last `CollectionEdge::Vec` producer constructor
for real data) has no callers, so remove it.

Adds a `with_mutually_recursive` case whose recursive term is a bare
identity `Get` placed directly as a `Union` input.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment-only, no behavior change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@antiguru
antiguru force-pushed the columnar-tc-retire-fueled-flag branch from 9a5a05a to ea705b5 Compare July 22, 2026 17:50
@antiguru
antiguru force-pushed the columnar-tp-letrec-reencode branch from 46a3139 to e507d11 Compare July 22, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant