Skip to content

Commit

Permalink
Update on "[compiler] ReactiveIR break node and related block structu…
Browse files Browse the repository at this point in the history
…ring"


Extends the sea-of-nodes ReactiveIR exploration from previous PRs.

Adds a new BreakNode to represent breaks (and continues, though not handled yet). Along with this change, graph construction now guarantees that there is a control dependency from the terminal of a block on all not-yet-depended-upon nodes in that block. Since nodes in a block will themselves have a transitive control dependency on the block's entry node, this means that there is a transitive control or data dependency from the block terminal through to all the nodes in that block, up to the block entry.

BreakNode also has a target, the node that its control would jump to. This unblocks conversion back to HIR or ReactiveFunction, and also provides the necessary information to run (abstract) interpretation using ReactiveIR.

This guarantees that nodes remain ordered. It also means that all nodes will appear used, since they are guaranteed to have at least one node dependending on them, the final node of their block. Thus (despite my comments in chat), dead code elimination against ReactiveIR does actually require a bit more than just running RPO and pruning unused nodes — DCE would have to look for nodes that are only used as control nodes, ie whose actual value is unused, and remove those. But we're not planning to use this for DCE anyway so this is more of an observation about the implications for this change.

[ghstack-poisoned]
  • Loading branch information
josephsavona committed Jan 8, 2025
2 parents a6a36f1 + 47110cb commit d9441e4
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit d9441e4

Please sign in to comment.