diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 00000000..66579375 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# Simple +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. +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 also is not intended to be a complete language in any sense, +and so the backend will probably start with levering C or Java. + +## Chapters + +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 will be styled after a subset of C or Java + +* [Chapter 1](docs/chapter01/README.md): Script that returns an integer literal, i.e., an empty function that takes no arguments and returns a single integer value. The `return` statement. +* Chapter 2: Simple binary arithmetic such as addition, subtraction, multiplication, division + with constants. Peephole optimization / simple constant folding. +* Chapter 3: Local variables, and assignment statements. Read on RHS, SSA, more peephole optimization if local is a + constant. +* Chapter 4: A non-constant external variable input named `arg`. Binary and Comparison operators involving constants and `arg`. Non-zero values will be truthy. Peephole optimizations involving algebraic simplifications. +* Chapter 5: `if` statement. CFG construction. +* Chapter 6: Peephole optimization around dead control flow. +* Chapter 7: `while` statement. Looping construct - eager phi approach. +* Chapter 8: Looping construct continued, lazy phi creation, `break` and `continue` statements. +* Chapter 9: Global Value Numbering. Iterative peepholes to fixpoint. Worklists. +* Chapter 10: User defined Struct types. Memory effects: general memory edges in SSA. Equivalence class aliasing. Null pointer analysis. Peephole optimization around load-after-store/store-after-store. +* Chapter 11: Global Code Motion - Scheduling. +* Chapter 12: Float type. +* Chapter 13: Nested references in Structs. +* Chapter 14: Narrow primitive types (e.g. bytes) +* Chapter 15: One dimensional static length array type, with array loads and stores. +* Chapter 16: Constructors +* Chapter 17: Functions and calls. +* Chapter 18: Exception control flow. +* Chapter 19: Garbage Collection. +* Chapter 20: Code gen to X86-64. |
