Sea of nodes
A sea of nodes is a graph representation of single-static assignment representation of a program that combines data flow and control flow, and relaxes the control flow from a total order to a partial order, keeping only the orderings required by data flow. It is similar to a value dependency graph.
It makes it easier for an optimizer to reorder instructions, but requires a global code motion algorithm to convert it back into a control flow graph. It allows dead code elimination and constant propagation to be done together, which allows both optimizations to apply more often.
It is used as an intermediate representation in the HotSpot JVM, LibFirm, and GraalVM. It was also used by V8's TurboFan JIT compiler, but in 2022 they decided that it was poorly suited for JavaScript's dynamicity, thereby making development and debugging too difficult, and so they decided to develop Turboshaft as a replacement, going back to using a CFG IR.