| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
add deps on dominance crawls
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Lest an int-only op, having lifted result types to int, get a zero-fold (e.g. X^0) to their mode-not-set input and have types fall.
Handle idepth-cache overflow
|
| |
|
|
|
| |
Fix keep/unkeep balance.
Always fuzz small.
|
| | |
|
| |
|
|
|
|
| |
Missing Arith mode picks high or low according to pre/post Opto
FunPtr improves sig return based on Opto return type.
Minus with missing mode is optimistic, same as Arith
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
| |
Robust assert about all data ops are schedulable.
Utiltiies for several places domionator-like stuff is used.
Removing a Phi with matching null/not-null values is now more robust; removes a major source if scheduling misalignment.
Big comments about what gets covered by a null check, or not.
Permanent list of fuzzer seeds that used to fail
|
| | |
|
| |
|
|
| |
Allowed only if the replacement does not fall, will be lifted by OR to an TypeInteger
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
FunNodes never GVN.
|
| | |
|
| |
|
|
| |
A lot of tests become asserts; general cleanup in MemOps and PhiOps
|
| |\ |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The three comment lines above `AddNode.phiCon(this, ...)` in BoolNode were
copy-pasted from MulNode and never adapted: they use `*` as the operator and
describe the rotated shape `(x * (phi cons)) * con`.
For BoolNode neither is right. The operator is a compare, and in chapters
6-9 `rotate` is hard-coded `false`, so the rotated shape is never matched;
the shapes actually handled are `(phi cons) cmp con` and
`(phi cons) cmp (phi cons)`.
Reword the comment accordingly, and in chapters 6-9 add a line noting why
rotate is off. Chapters 10-25 pass `this instanceof EQ`, so no such claim is
made there.
Comment-only change; no code is touched.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
|
| |/ |
|
| | |
|
| | |
|
| |
|
|
| |
Clarify several TODO's as "Should not reach here"
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
commit a00bfc643e834498b020eb47ee37da4a17cf6e39
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 20 12:27:52 2026 -0700
Add a emacs Simple.el mode
commit b5b399e16038d20ba6928aa329268b229b90e2f7
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 20 11:37:17 2026 -0700
Tone down expensive asserts
Put the expensive asserts on a log-scale flag, run them only once every 2^N attempts
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
commit c05d7df4f9c90984d2c04126772be3fee1d81fd1
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 20 10:52:58 2026 -0700
Fix local frefs, deferred inlining, and sys FileIO support
- Defer non-trivial inlining out of CallEnd idealization and run it from IterPeeps after normal peepholes reach a fixed point.
- Keep forward refs local to their lexical scope, promote them outward on scope pop, and track created FRefNodes directly for dependency discovery.
- Preserve loop scope shape when frefs are first seen inside loop bodies.
- Treat frefs as final constants from creation and force lazy self lookups before implicit calls.
- Reset imported pointer/struct types conservatively for post-parse Iter.
- Pin Start-owned global machine value chains and clone global constants per function during GCM.
- Improve late ASM printing before encoding and namespace constant-pool symbols.
- Add optional regalloc function-local edge verifier and improve empty-mask splitting for multi-def/fixed-register LRGs.
- Add sys array compare, safer array copy bounds, libc open/creat/close/unlink bindings, aryu8.str0, and higher-level sys.io file operations.
- Add docs/examples/FileIO.smp and a Chapter25 FileIO test.
- Update spill/code-size goldens after the allocator and scheduling changes.
commit ef5316979732ac118612d310b75923c8f59ecdc1
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 16:29:56 2026 -0700
Dijkstra uses bitset.
TestC.exec for repeated test runs with different stdins.
Support &= and |= op-update forms.
commit 728a527587f19bb49860f02ae5ac5968ab01ae33
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 12:13:28 2026 -0700
Fix live demo
commit e4c069b9ef2cbfafe28d8edfcbff55396cde085e
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 09:52:24 2026 -0700
Update Dijkstra.smp
commit b8015739b4056e3f7a715a030e846a441021a9f1
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 09:41:17 2026 -0700
Better looking Dijkstra
commit 7cce587804c6169b24829e0b5bdc10be94357a31
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 09:33:33 2026 -0700
Fix CmpMemX86 encoding
Use sys.aryu8 for number printing
commit 310b5d8c9978a3b09622a4b89dac97f0e5e6f3fb
Author: Cliff Click <cliffc@acm.org>
Date: Fri Aug 14 09:04:58 2026 -0700
Progress dijlstra
Fix NotX86 encoding. Allow Not-sinking through Phis; the Nots both take Scalar and might take different types (ptr vs int). Better guard installing during && || opers.
Drop the csv parse flavor in sys lib.
commit 5917d5322521dd5e762c4698d34e5d7ac9b3a37f
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 13 14:44:12 2026 -0700
missed
commit da35ad4d8a330559a21c04ae6326536e0fd62c48
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 13 14:43:42 2026 -0700
Major cleanup of allocation
All the graph-gen is moved to the <ctor> declaration and not at the alloc site.
commit c4223216099ccbc526d282bb263972532d48c5b2
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 13 13:26:01 2026 -0700
Some work from Dykstra (more coming)
commit a03bc567f61dc7e4355e453ee4be16ac2528d1ab
Author: Cliff Click <cliffc@acm.org>
Date: Thu Aug 13 09:32:55 2026 -0700
Spill correctness and improvements
Had the callee-save pick-risky backwards vs cloneables.
commit 2d306e4430225f916cb7fb999f4926e52f6fb70a
Author: Cliff Click <cliffc@acm.org>
Date: Wed Aug 12 19:40:04 2026 -0700
Tighter parser handling of missing fields
Bug fix add libc.errno, read can return -1, sys.ary exists
commit b7eeefda4cafa1e86153170dca6f13d45ef63f69
Author: Cliff Click <cliffc@acm.org>
Date: Wed Aug 12 16:22:48 2026 -0700
Printer improvements
commit 8b9112226f1d2d1c843b080eecefe0d5ddc1f8cf
Author: Cliff Click <cliffc@acm.org>
Date: Wed Aug 12 15:30:46 2026 -0700
Remove GLB
commit ae566f5c610b9c30831906d3f024901d8930a227
Author: Cliff Click <cliffc@acm.org>
Date: Wed Aug 12 14:38:51 2026 -0700
Add Capitalize example
Rename Ary to ary.
Fix bug || carrying state along.
Fix bug load-array removing control.
Add sys.char tolower/upper
|
| |
|
|
| |
Beef up BubbleSort error handling
|
| |
|
|
|
| |
Allow setting random seeds to not fail tests due to e.g. spill-counts or exact graph shapes.
A few missing addDeps or stalling-for-constants fixed.
|
| | |
|
| |
|
|
|
| |
Add a explicit "emit_main" flag in case you use no_run.
Fix a make parallel bug
|
| |
|
|
| |
A little less aggressive FunPtr trimming before Opto
|
|
|
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.
|