Commit Graph

8 Commits

Author SHA1 Message Date
pjh123 9d619cd9bb feat: liveness 驱动的精确二轮 dce_precise + is_top_level 标志(D-17/D-19/D-20) 2026-08-06 16:55:26 +08:00
pjh123 54720a9bfc refactor: 拆分单文件为三 Pass 独立模块(可达性/迭代删除/重建) 2026-08-06 14:01:31 +08:00
pjh123 6c84ccca07 fix: STORE_VAR 一律判有副作用,修复顶层变量赋值被误删 2026-08-06 13:29:07 +08:00
pjh123 d210fb1610 fix: label 目标与 nested 逃逸变量槽保活,修复两处误删
1. label 目标指令强制保留:块头是控制流汇合点,删除使存活 JMP
   的 label 引用悬空(do-while 锚暴露 'Label not found')。
2. nested 树引用的变量槽顶层写者保活:STORE_VAR 写槽可被闭包
   跨函数读取(computed class field key 场景),D-03 不递归使
   顶层 use 计数看不到跨函数读,误删 k 赋值致 key 变 undefined。
2026-08-06 12:17:06 +08:00
pjh123 b7b6ffd7b1 test: 新增运行时等价对比集成测试(D-08 主验证)
- parse→emit→(dce 开/关)→lower→Vm::run 双管线对比
- 覆盖语句丢弃/重复赋值/if(false)/死闭包/try-catch/对象算术/顶层返回值/先调用后丢弃/const 重赋值
2026-08-06 11:43:39 +08:00
pjh123 2724592cbb test: 补全 Pass C 单测与不动域断言(D-13/D-14/D-04/D-03)
- pass_c_sweep 尾部加 debug_assert 越界防御(T-04-03,空尾块映射合法透传)
- 存活 label 新旧下标对应、死 label 置 None、原 None 保持
- 空函数退化、幂等性(dce 两次一致)
- label_count/n_registers/constants/nested 不动断言
2026-08-06 11:35:58 +08:00
pjh123 213a9820de feat: 实现 Pass A 可达性 + Pass B use 计数迭代删除
- Pass A 消费 build_cfg,entry 沿 succs DFS(含 Exception 边保守,Pitfall 4)展开指令粒度 keep
- Pass B 可达存活指令聚合 use 计数,def 无 use 且 is_pure 迭代删至不动点(D-02 连锁)
- Pass C 最小 mark-sweep 重建 insts + label_pos 重映射(死 label 置 None)
- 依赖 oxide_bytecode(测试需 OpCode 常量,Rust 无 crate 传递可见性,与 oxide_cfg 骨架一致)
- 单测 8 条:死链/负例/STORE_VAR 特判/if-else/死块/Exception 保守/死闭包/连锁
2026-08-06 11:33:27 +08:00
pjh123 b0ba874844 feat: 新建 oxide_dce crate 骨架并接入 workspace
- workspace.members 在 oxide_cfg 后追加 crates/oxide_dce
- Cargo.toml 骨架照抄 oxide_cfg(oxide_ir + oxide_cfg 依赖,dev-deps parser/emit/vm)
- lib.rs 中文文档头 + pub fn dce 入口(空函数退化先例,非空路径 Task 2/3 骨架)
2026-08-06 11:27:44 +08:00