pass-unusedglob
Pass:Unusedglob
1. 目标与位置
- 位置:
backend/Unusedglob.v - 输入/输出:
RTL.program→RTL.program - 目标:删除未被引用的静态全局定义,减少代码/数据体积。
2. 核心思想
- 构建全局引用图:
- 从函数体与全局初始化数据中收集引用的符号。
- 以公开定义为初始工作集,迭代传播引用。
- 删除最终不可达的静态定义。
3. 关键数据结构与函数
workset:待处理符号集合。add_ref_*:从指令/函数/初始化数据提取引用。used_globals:构建可达全局集合。transform_program:程序级入口。
4. 具体变换要点
- 公共定义保留:所有对外可见定义必须保留。
- 多重定义处理:对同名全局只保留一个(保证链接一致性)。
5. 与前后 pass 的接口
- 前:
Deadcode - 后:
Allocation
6. 常见边界与约束
- 需要保守对待外部可见符号。
- 对初始化数据中的符号引用必须准确抽取。