# Phase 40 — FAST v4: Remaining Gate Prune(DEPRECATED / Historical) この指示書は Phase 40 の初期案です。 - Phase 40 は **`tiny_header_mode()` の BENCH_MINIMAL 定数化が NO-GO** となり、revert 済みです。 - 正しい記録は `docs/analysis/PHASE40_GATE_CONSTANTIZATION_RESULTS.md` を参照してください。 - 次は Phase 41(asm-first 監査)へ進むのが正です。 目的: FAST build(`HAKMEM_BENCH_MINIMAL=1`)の hot path に残る **lazy-init / ENV gate** をさらに compile-time 定数化して固定税を削る。 前提(運用の正): - 性能比較は **FAST build**(`make perf_fast`)を正とする。 - 判定は build-level: **GO +0.5% / NEUTRAL ±0.5% / NO-GO -0.5%**(Mixed 10-run mean)。 - link-out / 物理削除はしない(layout/LTO で符号反転する)。 --- ## Step 0(必須): 実行確認 / 安全確認 1) `HAKMEM_MID_V3_ENABLED` が FAST/Mixed で **OFF 前提**であることを確認する(bench preset / cleanenv)。 - `scripts/run_mixed_10_cleanenv.sh` は export 汚染を防ぐが、MID v3 については明示していないため、必要なら OFF を追加。 2) `tiny_header_mode` の default が FULL であることを確認する(現状 `HAKMEM_TINY_HEADER_MODE` 未設定 → FULL)。 --- ## Step 1(優先A): tiny_header_mode() の FAST 定数化(FULL 固定) ターゲット: - `core/tiny_region_id.h` の `tiny_header_mode()`(alloc hot から呼ばれている) 実装方針: - `#if HAKMEM_BENCH_MINIMAL` のとき `tiny_header_mode()` を `TINY_HEADER_MODE_FULL` 固定にする。 - Standard/OBSERVE は現状維持(ENV で切替可能)。 推奨(追加で検討): - `tiny_region_id_write_header()` の “HOTFULL=1” 分岐内で `tiny_header_mode()` を呼んでいる箇所は、FAST では FULL 固定なので呼ばない形に寄せられる(I-cache/分岐削減)。 期待: +0.3〜0.8%(※ 実測では NO-GO になった) --- ## Step 2(優先B): mid_v3_enabled / mid_v3_debug_enabled の FAST 定数化(OFF 固定) ターゲット: - `core/box/mid_hotbox_v3_env_box.h` - `mid_v3_enabled()` - `mid_v3_debug_enabled()` 実装方針: - `#if HAKMEM_BENCH_MINIMAL` では両方 `0` 固定。 - Standard/OBSERVE は現状維持(研究箱として ENV opt-in)。 注意: - free 側の `hak_free_at()` や alloc 側の `hak_malloc()`(`core/box/hak_alloc_api.inc.h`)で `mid_v3_enabled()` が頻繁に呼ばれているため、定数化で呼び出し自体を消せる可能性がある。 期待: +0.2〜0.5%(enabled) +0.1〜0.3%(debug) --- ## Step 3: A/B(FAST 10-run) コマンド: - baseline(FAST v3): `make perf_fast` - optimized(FAST v4): `make perf_fast` 判定: - GO: +0.5% 以上 - NEUTRAL: ±0.5%(code cleanliness で採用可) - NO-GO: -0.5% 以下(revert) ログ更新: - `docs/analysis/PHASE40_FAST_V4_REMAINING_GATES_RESULTS.md` を新規作成して 10-run mean/median を記録。 - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の FAST build 履歴を更新。 --- ## Rollback(戻せる) - すべて `#if HAKMEM_BENCH_MINIMAL` の中だけを触る(Standard/OBSERVE は無傷)。 - revert は対象ファイルの `#if HAKMEM_BENCH_MINIMAL` ブロックを戻すだけ。