如何在 LLVM 中回溯基本块
how to backpatch basic blocks in LLVM
我正在编写 c 编译器,不知道如何在我的 llvm 一次性编译器中实现 goto
语句,例如:
int main() {
goto label;
label:
return 0
}
因为解析器是一次通过,当我分析goto label;
时,我无法得到代表label
的llvm::BasicBlock,因为它还不存在,所以我如果创建一个br
执行此goto语句,BasicBlock参数未知
那么我如何使用 llvm 回溯一个基本块呢?
您需要做的是保留一个从标签名称到基本块的映射,并在您看到任何一个标签时创建条目,而不管第一个提到的是使用还是定义。
我正在编写 c 编译器,不知道如何在我的 llvm 一次性编译器中实现 goto
语句,例如:
int main() {
goto label;
label:
return 0
}
因为解析器是一次通过,当我分析goto label;
时,我无法得到代表label
的llvm::BasicBlock,因为它还不存在,所以我如果创建一个br
执行此goto语句,BasicBlock参数未知
那么我如何使用 llvm 回溯一个基本块呢?
您需要做的是保留一个从标签名称到基本块的映射,并在您看到任何一个标签时创建条目,而不管第一个提到的是使用还是定义。