kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

commit 3ebd1a10457514d71a637b181416abd8e998a936
parent 1c79c987fcc7f947130adf86d32566849657ae54
Author: Ryan Sepassi <rsepassi@gmail.com>
Date:   Wed, 27 May 2026 05:56:53 -0700

doc: aggregate/sret ABI complete on optimizer path (7 asm cases remain)

Diffstat:
Mdoc/OPT_O1_PASSES.md | 15+++++----------
1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/doc/OPT_O1_PASSES.md b/doc/OPT_O1_PASSES.md @@ -515,16 +515,11 @@ Completeness — route all ops through the optimizer: in regs across the asm). Refactor aa64 asm clobber-mask / callee-save / restore helpers off `NativeDirectTarget` (same wrapper pattern as va). Toy cases: 102,104,105,108,110,19,20. -- [~] **Aggregates / sret / byval** — mostly landed. DONE: aggregate locals - forced to frame; per-part ABI typing in plan_call/plan_ret; aggregate - results via copy_bytes; aggregate-typed IR_COPY/IR_LOAD/IR_STORE via - copy_bytes. 130 (record sret) and 124 (slices) now pass. REMAINING: - **tail call + sret** (36 musttail, 37 tail). Bug: in the tail+sret arg - shuffle, the first argument is loaded into x8, then x8 is overwritten with - the forwarded sret pointer before being moved to x0 — so x0 gets the sret - pointer instead of arg0 (see `aa_plan_call` tail/sret path + the tail-call - argument staging). Order the sret-x8 setup after the argument moves, or - stage args through temps that don't alias x8. +- [x] **Aggregates / sret / byval** — DONE. Aggregate locals forced to frame; + per-part ABI typing in plan_call/plan_ret; aggregate results via + copy_bytes; aggregate-typed IR_COPY/IR_LOAD/IR_STORE via copy_bytes; sret + x8 set after argument loads (was clobbering an arg allocated to x8). + 124/130/36/37 all pass. - [ ] **BREAK_TO / CONTINUE_TO + SCOPE cond** — currently unused by frontends (toy/c lower break/continue to `BR`+labels), but unwired in emit. Either lower them to CFG edges in cg_ir_lower or wire emit, for true