feat(joinir): Phase 228 - CarrierInit for ConditionOnly header PHI initialization

- Add CarrierInit enum (FromHost/BoolConst) for explicit initialization policy
- LoopHeaderPhiBuilder generates Const instruction for BoolConst carriers
- merge/mod.rs uses carrier_info to include ALL carriers in header PHI
- Pattern 2/4 pass carrier_info to boundary builder
- ConditionOnly carriers (is_digit_pos) now included in header PHI

Remaining: latch incoming for ConditionOnly carriers (Phase 228-8)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-10 21:10:28 +09:00
parent 478cc0012e
commit 192620f842
17 changed files with 174 additions and 15 deletions

View File

@ -183,12 +183,13 @@ impl DigitPosPromoter {
// For DigitPos pattern, we add a NEW carrier (not replace loop_var)
let carrier_name = format!("is_{}", var_in_cond);
use crate::mir::join_ir::lowering::carrier_info::{CarrierVar, CarrierRole};
use crate::mir::join_ir::lowering::carrier_info::{CarrierVar, CarrierRole, CarrierInit};
let promoted_carrier = CarrierVar {
name: carrier_name.clone(),
host_id: ValueId(0), // Placeholder (will be remapped)
join_id: None, // Will be allocated later
role: CarrierRole::ConditionOnly, // Phase 227: DigitPos is condition-only
init: CarrierInit::BoolConst(false), // Phase 228: Initialize with false
};
// Create CarrierInfo with a dummy loop_var_name (will be ignored during merge)