feat(mir): Phase 63-6-1/2 MIR Phi type_hint field & JoinIR propagation
Phase 63-6-1: MirInstruction::Phi に type_hint フィールド追加 - Added `type_hint: Option<MirType>` field to Phi instruction - Updated 21 files with type_hint initialization (all set to None for legacy paths) - Pattern matching updated across codebase (11 files) - Test code updated (basic_block.rs) Phase 63-6-2: JoinIR→MIR Bridge で型ヒント伝播実装 - Modified convert.rs: Select → MIR now creates PHI with type_hint - Removed Copy instructions from then/else blocks - PHI instruction at merge block receives type_hint from JoinIR Select - Test verification: ✅ Type hint propagation successful (Some(Integer)) Modified files: - instruction.rs: Added type_hint field definition - join_ir_vm_bridge/convert.rs: Select lowering with PHI + type_hint - 19 other files: type_hint field initialization Test results: - ✅ test_type_hint_propagation_simple: Type hint = Some(Integer) confirmed - ✅ 7/8 if_select tests passing (1 race condition, passes individually) Next: Phase 63-6-3 (lifecycle.rs で型ヒント使用) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -129,9 +129,17 @@ pub enum MirInstruction {
|
||||
// === SSA Phi Function ===
|
||||
/// SSA phi function for merging values from different paths
|
||||
/// `%dst = phi [%val1 from %bb1, %val2 from %bb2, ...]`
|
||||
///
|
||||
/// # Phase 63-6: Type Hint Support
|
||||
///
|
||||
/// `type_hint` field stores type information from JoinIR (Select/IfMerge)
|
||||
/// to enable type inference without scanning PHI inputs.
|
||||
/// - `Some(MirType)`: Type is known from JoinIR (P1 cases: IfSelectTest.simple/local)
|
||||
/// - `None`: Type must be inferred from PHI inputs (legacy behavior)
|
||||
Phi {
|
||||
dst: ValueId,
|
||||
inputs: Vec<(super::BasicBlockId, ValueId)>,
|
||||
type_hint: Option<super::MirType>, // Phase 63-6: JoinIR type hint
|
||||
},
|
||||
|
||||
// === Box Operations ===
|
||||
|
||||
Reference in New Issue
Block a user