summaryrefslogtreecommitdiff
path: root/skills/chapter25-codex-notes.md
Commit message (Collapse)AuthorAgeFilesLines
* Check for cyclic class init before we emit codeclinitCliff Click3 days1-0/+2
|
* More test case vs RA cleanupCliff Click7 days1-0/+18
| | | | | Missing a few risc/arm encodings. Make private many tests, so they don't escape and the escaped fcn inflate x86 spill numbers
* Towrds getting RA spill counts comparableCliff Click8 days1-3/+44
| | | | Ignore JIGs. Get test suites more conical, so reg alloc spill counts are comparable
* Make RA deterministicCliff Click8 days1-0/+12
|
* Pick up japanese transaltionpr262-doc-followupsCliff Click8 days1-1/+2
| | | | A bunch of minor README fixes, missing TOC, grammer cleanup
* Skills updateCliff Click12 days1-26/+46
|
* Chapter renumber, and split ch 17Cliff Click12 days1-5/+23
| | | | | | Renumber chapters 10a, 10b, 11, 12, 13, 14 -> 10, 11, 13, 12, [11,14]. Split ch 17 into a 17a and 17b; shuffle around im/mutable syntax to be consistent, and present it more slowly. THe new immutable syntax is pushed through all later chapters
* Fix bug loop tree depth on inf loopsCliff Click13 days1-2/+19
|
* Restore missing anti-dependence walkCliff Click14 days1-1/+4
|
* Move much of the ISA support to shared codeCliff Click14 days1-0/+9
| | | | The ISA shared handlers here are required for a proper compiler, but contain only trivial bit-massaging operations.
* Move debug printing into shared spaceCliff Click14 days1-10/+19
| | | | Same as the graph viewer, moves a lot of code out of all Nodes
* Fix CICliff Click14 days1-0/+4
|
* Finish forward-port mem ops thru ch25Cliff Click2026-09-301-4/+26
|
* Forward port mem stuff to ch21Cliff Click2026-09-301-6/+49
| | | | Also a minor reg-alloc improvement for BrainFuck, ported up to ch25
* ch 20 forward port memoryCliff Click2026-09-301-5/+14
|
* Forward port mem changes to ch 19Cliff Click2026-09-301-5/+14
|
* Forward port lazy mem eval to ch18Cliff Click2026-09-291-6/+15
|
* Forward port mem to ch16Cliff Click2026-09-291-5/+15
|
* Bring forward the lazy mem aliasCliff Click2026-09-291-4/+36
| | | | Integrate with ch15 NewNode creating aliases
* forward port lazy memory to ch11Cliff Click2026-09-291-2/+11
|
* Squashed commit of the following:Cliff Click2026-09-291-1/+5
| | | | | | | | | | | | | | | | | | | | | | commit 3ba6686fc991998a0a420709dfb0012bbddf77ab Author: Cliff Click <cliffc@acm.org> Date: Tue Sep 29 12:21:46 2026 -0700 Backport lazy memory splits to ch10, split into ch10a and b commit fa7d56f72455828826d0ab7e1c142ca814e6e2aa Author: Cliff Click <cliffc@acm.org> Date: Tue Sep 29 10:10:53 2026 -0700 Reverse edges commit e1bba17ff54400a34ede0eaacad863420d021119 Author: Cliff Click <cliffc@acm.org> Date: Tue Sep 29 09:44:41 2026 -0700 Split ch10 Basic memory introduction in 10a, then precise aliases in 10b.
* Extend smaller-width C results to full widthCliff Click2026-09-281-0/+26
|
* Backport FunPtrCliff Click2026-09-281-10/+18
| | | | | Helps keep functions alive via ptr only (no calls). A few RISC 5 TFP encoding fixes.
* Check un-init not-null constructor fieldsCliff Click2026-09-281-0/+6
| | | | | | | | Propagate BOT inputs; Arith, Load. CallEnd inlining, the FUnPtr dies early. Load asserts when loading against uninit not-null field. Keep not-nill state for storage class. Clean up Node.peep as constant.
* Remove -disablePeepholeCliff Click2026-09-271-5/+13
|
* bug fix widenCliff Click2026-09-261-0/+12
| | | | Failed lattice law tests mixing constants and have wide type ints; or mixing wide ints and constant arrays.
* Skills updatesCliff Click2026-09-251-0/+8
|
* Final reg-alloc across chapters cleanupCliff Click2026-09-201-14/+37
|
* Split self-conflict phis once at a loop headCliff Click2026-09-201-2/+13
| | | | if this works, saves a copy-per-loop. If it fails, next round split as normal
* Popular use grouping for RegAllocCliff Click2026-09-201-2/+20
| | | | Fix arm BL encodings; ADD/SUB with reversed sign.
* Forward-port allocator bug fixes and test support through ch25Cliff Click2026-09-201-4/+48
| | | | Improved spilling
* Add back copy coaleascing in ch21Cliff Click2026-09-201-2/+23
| | | | Minor arm encoding fix.
* Ch 20 Reg AllocCliff Click2026-09-201-0/+35
| | | | | | | Includes all bug fixes from later chapters, so its at least correct. Skips a lot of improvement heuristics, these get added in later chapters. Includes spill-stats, to more easily track improvements. Includes targeted tests.
* Backport TypeFunPtr normalizationCliff Click2026-09-201-0/+6
|
* Unify GCM across chaptersCliff Click2026-09-201-0/+45
| | | | | | Remove the _anti field. Remove the isPinned() call. Add a copyEmpty call.
* Unify mixed-return checking and resultsCliff Click2026-09-191-0/+32
| | | | Unify dominator caching.
* Use isDead() instead of checking null inputsCliff Click2026-09-191-0/+4
|
* debug printers no longer call self-optimizing accessorsCliff Click2026-09-191-0/+30
|
* Handle r/w <clinit> sectionsCliff Click2026-09-191-0/+15
|
* AI skills updateCliff Click2026-09-191-3/+81
|
* A few missing addDepsCliff Click2026-09-131-0/+4
| | | | | | | IterPeeps cnt does not reset. Faster schedulableIses, reuses ID Map. Test in Iter work if not GVN table ScheduableUses peeks through folding/dead Call/Fun
* Chapter 25: add separate compilation and simplify SSA constructionCliff Click2026-08-101-0/+164
Introduce Chapter 25 with separately compiled Simple modules, serialized IR, cross-compilation-unit linking, and native system-library integration. This also completes a broad parser and type-system cleanup needed to make graph construction independent of incomplete parse-time type information. Separate compilation and linking - Add compilation-unit Start/Stop nodes and track functions, classes, aliases, and global indices across compilation-unit boundaries. - Serialize canonical types and ideal graph nodes into ELF objects, including dependency metadata, relocations, global/local bitset remapping, and dense memory-alias information. - Load dependent objects on demand, recursively resolve source and object paths, relink calls and function pointers, and preserve external C symbols. - Distinguish the post-optimization ownership hook from unknown callers so private call graphs can remain precise while public functions remain externally callable. - Add command-line and build support for compiling modules and the reusable `sys` object library. Parser, constructors, and SSA - Replace inline constructor expansion with a hidden default `<init>` followed by an explicit user constructor declared as `new Type = { ... }`. - Keep the default constructor private, pass private object memory through constructor calls, and require user constructors to initialize non-default fields before the object escapes. - Track possibly-uninitialized fields in parser `Var` state and diagnose early reads without encoding parser-only constraints in Load and Store nodes. - Make ordinary parser memory bulk and recover precise alias slices in the optimizer using `MemMerge`, `MemPhi`, and `BulkMemPhi` nodes. - Remove parser-supplied type constraints from Loads and ordinary Phis, defer integer/float arithmetic selection, and keep call shape driven by syntax instead of provisional inferred types. - Preserve chained field declarations as static parser information when flow types are not yet available, including postfix field updates through calls. Types, functions, and escape analysis - Add `TypeScalar` as the common lattice family for integer, float, memory pointer, and function-pointer values, with scalar TOP/BOT values for generic Loads, Stores, parameters, and invalid intermediate expressions. - Represent unresolved struct definitions directly with the `TypeStruct` forward-reference flag while retaining the separate open-structure concept; close and canonicalize recursive structures without side maps. - Add explicit `FunPtrNode` references so constant function pointers retain a graph edge to their Return, and keep referenced functions alive until Opto proves the pointer dead. - Refine public-function and class-initializer escape handling, including public-only fallback escape sets and monotone compilation-unit summaries. - Add guards, proof casts, read-only propagation, pointer-to-integer conversion for non-null FFI arguments, and consistent deep mutability checks at calls. Optimization and code generation - Make weak and unresolved graph inputs compute conservatively and monotonically throughout iterative peepholes and SCCP. - Preserve independent memory slices when sharpening Stores, retain control on conditional Stores, and freeze Store widths from their target field types. - Extend serialization for new node kinds, scalar types, Store modes, function pointers, and memory partitions, preserving serialize/deserialize bijection. - Complete native selection and encoding support across x86-64, RISC-V, and ARM, including FFI pointer conversion and missing integer operations. - Fix x86 immediate multiply REX encoding and assorted scheduling, register allocation, spilling, relocation, and constant-pool issues exposed by the larger linked graphs. System library, tests, and documentation - Compile and link the Simple `sys` library, including libc bindings, I/O, scanners, strings, vectors, array helpers, and executable entry points. - Add Chapter 25 module, serialization, constructor, forward-reference, postfix-update, system, Hello World, and Bubble Sort coverage; update golden graphs and spill expectations for the new IR shape. - Add module and type-system documentation, parser-simplification design notes, grammar updates, examples, diagrams, and graph visualization assets. The resulting compiler passes the raw Chapter 1-24 suite and the Chapter 25 system and separate-compilation tests, including a freshly rebuilt `sys.o` and the native Bubble Sort example.