Sea of nodes
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
- ^ OCLC 1031097124. UMI Microform 9610626 – via Rice Research Repository, Rice Fondren Library.
- ^ S2CID 14257734.
- ^ 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.
- ^ 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
(help)CS1 maint: postscript (link)|postscript=
- ^ S2CID 3390229.
- S2CID 254566327– via BINSEC development team via GitHub.
- ISBN 978-981-99-7584-6.
- ^ S2CID 235732254.
- ^ a b "Combining Analyses, Combining Optimizations - Summary". 3 August 2010. Archived from the original on 23 May 2023. Retrieved 7 December 2023.
- ^ 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.
- S2CID 227154653.