Files
hakorune/docs/private/roadmap/phases/phase-20.12/SMOKES.md

3.9 KiB
Raw Blame History

Phase 20.12 — Smokes / Benches

代表スモーク

  • AOT: aot_cli_emit_exe.shPASS
  • AOT: dist/lib 既定探索FFIaot_c_api_ffi_dist_lib_default.sh環境次第でPASS/未整備はSKIP
  • VM : Runner 決定/採用(観測のみ)
  • AOT: emitexe の MIR 保存(前処理後)— emit_exe_mir_prep_fold_binop.sh
    • dev/quick 既定: HAKO_AOT_PREP=1, HAKO_AOT_PREP_LANG=1HAKO_SAVE_MIR=1 推奨)
  • STRICT: strict_print_const_exe.shprint(1000) → PASS
  • STRICT: strict_print_loop_exe.sh(ループ最終値 1000 → PASS、PHIローカライズ適用
  • STRICT: strict_print_if_merge_exe.shif-merge 後値 1000 → PASS、PHI正道
  • STRICT: strict_print_loop_small_exe.sh(ループ内の連続 print: 1,2,3
  • STRICT: strict_print_diamond_exe.sh(ダイアモンド合流後に 1000 を print
  • STRICT: strict_print_if_same_value_exe.shthen/else 同値→合流後 1000 を print
  • STRICT: strict_print_nested_if_exe.sh(ネスト if で 1000→ print
  • STRICT: strict_print_elseif_chain_exe.shelse-if チェーンで 1000 を print
  • STRICT: strict_print_three_way_exe.sh(三択分岐の合流で 1000 を print

Using ResolverRunner ゲート)

  • using_resolver_apply_gate_vm.shHAKO_USING_RESOLVER_APPLY=1 時に短文 [using-resolver] apply: を観測。ビルドによっては SKIP
  • using_resolver_missing_ok_vm.sh(存在しないモジュール名 → modules_error 短文を観測)
  • using_resolver_private_strict_fail_vm.shパスUsing×private strict。ビルドによっては pathusing が strict をバイパス → SKIP
  • using_resolver_ambiguous_vm.shusing_paths 上で同名モジュールが複数候補 → ambiguous 短文、実行は継続)

JSON v0 Unify観測・ゲートON

  • json_v0_unify_suite_vm.shSMOKES_ENABLE_JSON_V0_UNIFY=1 で代表群を実行。PASS/一部SKIP容認、bringup 状態を観測)

マイクロベンチ(計画)

  • EXEC 基準)
    • loop_sum: 1e7 加算ループ
    • call_chain: 小関数チェーンの反復
    • array_walk: 連続アクセスstride=1
  • VMPython 基準)
    • loop_sum_vm, call_chain_vm, array_walk_vm

観測・判定

  • EXE: C 比 ≥ 0.6×(ファイル出力/STDOUT一致の確認つき
  • VM : Python と ±20%JSON形式で中央値出力→比較

Loop parity (new)

  • tools/smokes/v2/profiles/integration/parity/loop_side_effect_vm_llvm.sh
    • Purpose: ensure VM/LLVM parity for a minimal side-effect loop (prints 0..2)
    • Gate: harness-first; NYASH_ENABLE_LOOPFORM=1 by default for this smoke (parity-safe)
  • tools/smokes/v2/profiles/integration/parity/loop_continue_vm_llvm.sh
    • Purpose: VM/LLVM parity for continue in small loop (prints 0,2)
    • Gate: harness-first; LoopForm gate optional
  • tools/smokes/v2/profiles/integration/parity/loop_break_vm_llvm.sh
    • Purpose: VM/LLVM parity for break in small loop (prints 0,1)
    • Gate: harness-first; LoopForm gate optional

IR-level checks (new)

  • tools/smokes/v2/profiles/quick/rust-aot/llvm_ir_bench_externs_void_i64.sh
    • Purpose: Ensure bench externs are declared/called as void(i64) (hako_console_log_i64, hako_bench_noop_i64, hako_bench_use_value_i64).
    • Method: grep optimized IR for declare/call signatures; harness-only.
  • tools/smokes/v2/profiles/quick/rust-aot/llvm_ir_tail_musttail_placement.sh
    • Purpose: Tail-call hint (tail call) is emitted when in true tail position and strict gate is ON.
    • Gate: NYASH_LLVM_TAILCALL=1 NYASH_LLVM_TAILCALL_STRICT=1 (harness-only)
  • tools/smokes/v2/profiles/quick/rust-aot/llvm_ir_no_unused_method_name_global.sh
    • Purpose: Unused method results prefer by-id path (no @unified_method_* globals materialized).
    • Gate: NYASH_LLVM_METHOD_BY_ID=1 (harness-only)
  • tools/smokes/v2/profiles/quick/rust-aot/llvm_ir_constructor_new_i64x_unknown_box.sh
    • Purpose: Unknown user box constructor lowers to nyash.env.box.new_i64x.