Sea of nodes

Source: Wikipedia, the free encyclopedia.

A sea of nodes is a graph representation of single-static assignment (SSA) 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.[1]: 86,113 [2]: 248 [3]: 11 [4][5]: 163 [6]: 25 [7][8]: 2  It is similar to a value dependency graph (VDG).[9]: 1 

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 (CFG).[1]: 86,113 [2]: 248 [3]: 14 [10] It allows dead code elimination and constant propagation to be done together, which allows both optimizations to apply more often.[9]: 4 

It is used as an intermediate representation (IR) in HotSpot,[5]: 163  LibFirm,[5]: 163  GraalVM,[5]: 163 [8]: 2 [11] and V8's TurboFan JIT compiler.[10]

References

  1. ^ . UMI Microform 9610626 – via Rice Research Repository, Rice Fondren Library.
  2. ^ .
  3. ^ a b Weaver, Glen (November 1995). "Compiler Representations for Heterogeneous Processing". Amherst, MA: Department of Computer Science, University of Massachusetts. CMPSCI Techincal [sic] Report 95-102 – via CiteSeerX.
  4. ^ Indutny, Fedor (8 October 2015). "Sea of Nodes". Compilers. Fedor Indutny's Blog. Archived from the original on 20 October 2023. Retrieved 7 December 2023. d.sea-of-nodes.md in indutny/blog.ng on GitHub. {{cite web}}: External link in |postscript= (help)CS1 maint: postscript (link)
  5. ^
    S2CID 3390229
    .
  6. – via BINSEC development team via GitHub.
  7. .
  8. ^ .
  9. ^ a b "Combining Analyses, Combining Optimizations - Summary". 3 August 2010. Archived from the original on 23 May 2023. Retrieved 7 December 2023.
  10. ^ a b "Digging into the TurboFan JIT: More sophisticated optimizations". Internals. V8 JavaScript engine blog. 13 July 2015. Archived from the original on 24 May 2023. Retrieved 7 December 2023.
  11. S2CID 227154653
    .