Commit Graph

3 Commits

Author SHA1 Message Date
f1fa182a4b AotPrep collections_hot matmul tuning and bench tweaks 2025-11-14 13:36:20 +09:00
376857a81f fix(perf): stabilize MIR emit for ny-llvmc/EXE benchmarks
Problem:
- Stage-B JSON extraction used fragile `awk '/^{/,/^}$/'`
- stdout noise caused empty JSON and bench failures
- arraymap/matmul/maplin --exe mode failed with "failed to emit MIR JSON"

Solution:
- Python3-based robust JSON extraction
  - Search for "kind":"Program" marker
  - Balance braces with quote/escape awareness
  - Resilient to stdout noise
- FORCE jsonfrag mode priority (HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1)
  - Bypasses Stage-B entirely when set
  - Generates minimal while-form MIR with PHI nodes
- Multi-level fallback strategy
  - L1: Stage-B + selfhost/provider builder
  - L2: --emit-mir-json CLI direct path
  - L3: Minimal jsonfrag MIR generation
- cd $ROOT for Stage-B (fixes using resolution context)

Results:
-  arraymap --exe: ratio=200.00% (was failing)
-  matmul --exe: ratio=200.00% (was failing)
-  maplin --exe: ratio=100.00% (was failing)
-  Existing canaries: aot_prep_e2e_normalize_canary_vm.sh PASS
-  New canary: emit_mir_canary.sh PASS

Known Issues (workarounds applied):
- Stage-B compiler broken (using resolution: StringHelpers.skip_ws/2)
- --emit-mir-json CLI broken (undefined variable: local)
- Current jsonfrag mode bypasses both issues

Documentation:
- benchmarks/README.md: Added MIR emit stabilization notes
- ENV_VARS.md: Already documents HAKO_SELFHOST_BUILDER_FIRST, etc.

Next: Fix Stage-B using resolution to re-enable full optimization path

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 17:23:48 +09:00
dda65b94b7 Phase 21.7 normalization: optimization pre-work + bench harness expansion
- Add opt-in optimizations (defaults OFF)
  - Ret purity verifier: NYASH_VERIFY_RET_PURITY=1
  - strlen FAST enhancement for const handles
  - FAST_INT gate for same-BB SSA optimization
  - length cache for string literals in llvmlite
- Expand bench harness (tools/perf/microbench.sh)
  - Add branch/call/stringchain/arraymap/chip8/kilo cases
  - Auto-calculate ratio vs C reference
  - Document in benchmarks/README.md
- Compiler health improvements
  - Unify PHI insertion to insert_phi_at_head()
  - Add NYASH_LLVM_SKIP_BUILD=1 for build reuse
- Runtime & safety enhancements
  - Clarify Rust/Hako ownership boundaries
  - Strengthen receiver localization (LocalSSA/pin/after-PHIs)
  - Stop excessive PluginInvoke→BoxCall rewrites
- Update CURRENT_TASK.md, docs, and canaries

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 16:40:58 +09:00