A Simple showcase for the Sea-of-Nodes compiler IR
This repo is intended to demonstrate the Sea-of-Nodes compiler IR.
The Sea-of-Nodes is the core IR inside of HotSpot's C2 compiler and Google's V8 compiler and Sun/Oracle's Graal compiler.
Since we are show casing the SoN IR, the language being implemented is less important. We're using a very simple language similar to C or Java, but with far fewer features. Simple is strongly typed, object-oriented, with first-class functions not closures. Object references are pointers, and null pointer exceptions are disallowed by the typing system. Arrays will probably be range-checked at some point, making Simple a fully safe language. Simple has a minimal syntax that can be parsed with a recursive descent parser.
The Sea-of-Nodes is used for machine code generation in these industrial strength systems - but for this demonstration the backend is both difficult and less important. This repo targets X86, RISC5 and ARM64 at least with ahead-of-time compilation - but with an eye towards JIT compilation.
This repo also is not intended to be a complete language in any sense, and so the backend starts with levering Java: the Evaluator (first appears in Chapter 10) directly slowly interprets the SoN IR. Code-gen first appears in Chapter 19.
The following is a rough plan, subject to change.
Each chapter will be self-sufficient and complete; in the sense that each chapter will fully implement a subset of the Simple language, and include everything that was created in the previous chapter. Each chapter will also include a detailed commentary on relevant aspects of the Sea Of Nodes intermediate representation.
The Simple language is styled after a subset of C or Java.
return statement.arg. Binary and Comparison operators involving constants and arg.
Non-zero values will be truthy. Peephole optimizations involving algebraic
simplifications.if statement. CFG construction.while statement; looping constructs - eager phi approach.break and continue statements.var, val, x+=y, for(init; test; next) body$ claude mcp add Simple \
-- python -m otcore.mcp_server <graph>