feat(dce): 新建 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 骨架)
This commit is contained in:
爱特每羊队
2026-08-06 11:27:44 +08:00
parent d33ec31532
commit c2a64a2df8
3 changed files with 37 additions and 0 deletions
+1
View File
@@ -9,6 +9,7 @@ members = [
"crates/oxide_emit", "crates/oxide_emit",
"crates/oxide_ir", "crates/oxide_ir",
"crates/oxide_cfg", "crates/oxide_cfg",
"crates/oxide_dce",
"crates/oxide_types", "crates/oxide_types",
"crates/oxide_vm", "crates/oxide_vm",
"crates/oxide_kernel", "crates/oxide_kernel",
+16
View File
@@ -0,0 +1,16 @@
[package]
name = "oxide_dce"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
description = "OxideJS - dead code elimination pass over IR (reachability + use-count iteration + mark-sweep)"
[dependencies]
oxide_ir = { path = "../oxide_ir" }
oxide_cfg = { path = "../oxide_cfg" }
[dev-dependencies]
oxide_parser = { path = "../oxide_parser" }
oxide_emit = { path = "../oxide_emit" }
oxide_vm = { path = "../oxide_vm" }
+20
View File
@@ -0,0 +1,20 @@
//! DCE 改写 pass:IRFunction → 死代码消除后 compact 重建。
//!
//! 改写 pass(D-09):`&mut IRFunction` 就地 compact(D-06 方案 A 索引关联保证无借用冲突),
//! 三 Pass——Pass A 块级可达性(消费 `oxide_cfg::build_cfg`,Exception 边保守,D-07/Pitfall 4)、
//! Pass B 全函数 use 计数迭代删除死指令到不动点(D-01/D-02 连锁语义)、
//! Pass C mark-sweep 一次性重建 insts + label_pos 重映射(D-13,不用就地逐删平移)。
//! 本 pass 不碰 nested(D-03 不递归)、常量池(D-14 不清理)、n_registers(D-04 不收缩)、
//! label_count(D-13 不读不改)。中间产物(keep/use_count)用局部 Vec 显式传参,
//! 不做 struct 状态持有(无共享可变状态约定)。零 unsafe。
use oxide_ir::IRFunction;
/// 死代码消除:块级不可达删除 + 全函数 use 计数迭代删除到不动点 + mark-sweep 重建。
pub fn dce(f: &mut IRFunction) {
// 空 IRFunction 退化形态:无指令可删(照 oxide_cfg empty_function 先例)。
// 非空路径为 Task 2/3 骨架占位:Pass A 可达性 + Pass B use 计数迭代 + Pass C mark-sweep。
if !f.insts.is_empty() {
// TODO(Task 2/3):Pass A/B/C 实现(当前骨架 no-op,等价于不改写)。
}
}