From 5f965f9f802fcbb72260d0363b17e627f3435610 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 04:17:01 +0900 Subject: [PATCH] docs(phase29ao): add p2 composer normalizer bridge instructions --- CURRENT_TASK.md | 4 +- ...AN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md | 88 +++++++++++++++++++ .../current/main/phases/phase-29ao/README.md | 10 ++- 3 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 73af35b3..817232e0 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -21,8 +21,8 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu **Next implementation (CorePlan composition, P2 planned)** `docs/development/current/main/phases/phase-29ao/README.md` -**Next implementation (Phase 29ao P1)** -`docs/development/current/main/phases/phase-29ao/P1-COREPLAN-COMPOSER-API-BRIDGE-INSTRUCTIONS.md` +**Next implementation (Phase 29ao P2)** +`docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md` **2025-12-29: Phase 29am P0 COMPLETE (CorePlan If/Exit lowerer/verifier)** CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan 移行の土台を作った。 diff --git a/docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md new file mode 100644 index 00000000..284dd52f --- /dev/null +++ b/docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md @@ -0,0 +1,88 @@ +--- +Status: Ready +Scope: code(未接続・仕様不変) +Related: + - docs/development/current/main/phases/phase-29ao/README.md + - docs/development/current/main/design/coreplan-migration-roadmap-ssot.md + - docs/development/current/main/design/coreplan-skeleton-feature-model.md + - docs/development/current/main/phases/phase-29ae/README.md +--- + +# Phase 29ao P2: Composer → Normalizer bridge(CanonicalLoopFacts→DomainPlan→CorePlan、未接続) + +Date: 2025-12-30 +Status: Ready for execution +Scope: “CoreLoop skeleton を CorePlan で得る” 導線を **未接続のまま** 固定(既定挙動/ログ/エラー文字列は不変) + +## 目的 + +- composer が `CanonicalLoopFacts` から `DomainPlan` を作れるようになった(P1)ので、次は + `PlanNormalizer::normalize()` を通して **`CorePlan` を得る** bridge を用意する。 +- “allocation は Normalizer が持つ” を現行構造のまま維持しつつ、composer 側に **CorePlan 合成の受け口**を作る。 + +## 非目的 + +- router / single_planner / joinir 経路の変更(P2 は未接続) +- Skeleton+Feature から直接 CorePlan を組む本実装(P3+) +- 新 env var 追加 + +## 実装方針(P2で固定する境界) + +- **Facts/Planner/Composer は再解析しない**(facts の Option をそのまま使う) +- **allocation は Normalizer**(`BasicBlockId/ValueId/Frag` を composer は生成しない) +- `Ok(None)` は “対象外/未対応” として維持し、`Freeze` は P2 では増やさない + +## 手順 + +### Step 1: composer に CorePlan bridge API を追加 + +対象: +- `src/mir/builder/control_flow/plan/composer/mod.rs` + +追加する関数(案): + +- `pub(in crate::mir::builder) fn try_compose_core_plan_via_normalizer(builder: &mut MirBuilder, facts: &CanonicalLoopFacts, ctx: &LoopPatternContext) -> Result, String>` + +処理: +1) `try_compose_domain_plan_from_canonical_facts(facts)` を呼ぶ +2) `None` なら `Ok(None)` +3) `Some(domain)` なら `PlanNormalizer::normalize(builder, domain, ctx)` を呼び `Ok(Some(core))` + +注意: +- `Freeze` を `String` に変換する必要がある場合、**P2 では bridge 未接続**なので簡単に `freeze.to_string()` で良い + (観測/エラー文字列の互換性要求は “接続時” に扱う) + +### Step 2: unit test(Some/None 境界 + 最小 successful path) + +対象: +- `src/mir/builder/control_flow/plan/composer/mod.rs`(既存 tests へ追加) + +最小成功条件(Pattern1 のみでOK): +- builder に `loop_var` の初期値が入っている状態を作る(`builder.variable_ctx.variable_map.insert("i", )`) +- `LoopPatternContext::new(...)` を最小 AST で作る(debug=false でOK) +- `try_compose_core_plan_via_normalizer(...)` が `Ok(Some(CorePlan::Loop(_)))` を返すことを固定 + +境界テスト: +- Pattern1 facts が無いと `Ok(None)`(bridge は勝手に推論しない) + +### Step 3: docs 更新 + +更新: +- `docs/development/current/main/phases/phase-29ao/README.md`(P2 指示書リンク、Next を P3 へ) +- `CURRENT_TASK.md`(P2 指示書パスへ) + +## 検証(必須) + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + +## コミット + +- `git add -A` +- `git commit -m "phase29ao(p2): composer coreplan via normalizer (unconnected)"` + +## 次(P3 の入口) + +P3 で “Skeleton+Feature から直接 CorePlan を合成する” に踏み込む。P2 の bridge は +「allocation 境界が崩れていない」ことを保証する保険として残してよい。 diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 9ca673a1..39a208c4 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -30,7 +30,9 @@ Gate(SSOT): ## Next(planned) -- P2: CoreLoop skeleton(preheader/header/body/exit)を `CorePlan` 語彙で生成(effects/phis/frag は “最小で正しい”) -- P3: ExitMap presence を `Frag/ExitMap` と結ぶ(break/continue/return を feature 合成へ寄せる) -- P4: Cleanup presence を ExitKind 単位で wire(effect/cleanup SSOT に従う、観測差分なし) -- P5: ValueJoin presence を post-phi SSOT に沿って wire(局所 verify から) +- P2: Composer→Normalizer bridge(未接続のまま `CanonicalLoopFacts→DomainPlan→CorePlan` を固定) + - 指示書: `docs/development/current/main/phases/phase-29ao/P2-COREPLAN-COMPOSER-VIA-NORMALIZER-INSTRUCTIONS.md` +- P3: CoreLoop skeleton(preheader/header/body/exit)を `CorePlan` 語彙で直接生成(effects/phis/frag は “最小で正しい”) +- P4: ExitMap presence を `Frag/ExitMap` と結ぶ(break/continue/return を feature 合成へ寄せる) +- P5: Cleanup presence を ExitKind 単位で wire(effect/cleanup SSOT に従う、観測差分なし) +- P6: ValueJoin presence を post-phi SSOT に沿って wire(局所 verify から)