后端Pass简介——GCRootLowering
GCRootLowering
这个代码实现的是 LLVM 中的垃圾回收 (GC) 支持的一部分,主要围绕 gc.root 机制的 lowering(降层转换) 和 元数据分析,它分为两个核心 Pass。
涉及的概念有:
- GC Root:程序运行中存活对象的可达起点(如局部变量、参数、静态字段)。
Intrinsic | 含义 |
---|---|
llvm.gcroot | 声明某个 alloca 是 GC 根(root) |
llvm.gcread | 从 GC 管理对象中读取字段 |
llvm.gcwrite | 向 GC 管理对象中写入字段 |
GCMachineCodeAnalysis |
✅ 功能:
- 分析目标指令级别的函数,插入 safe point(用于 GC 暂停和扫描的安全位置);
- 确定所有 GC roots 的 栈上偏移量(stack offset),供后续生成精确 GC map;
- 设置整个函数的 frame size 元信息。
在 LLVM 的 GC 策略(GCStrategy)中,有些语言或运行时系统(如 Java、.NET)依赖于精确 GC 信息,这些 Pass 就是将抽象 IR 里的 GC 概念变为后端可处理的数据结构和插桩。
评论