首页 > 解决方案 > 如何回补 LLVM 中的基本块

问题描述

我正在编写 c 编译器,但不知道如何goto在我的一次性编译器中使用 llvm 实现语句,例如:

int main() {
  goto label;
label:
  return 0 
}

由于解析器是一次通过,当我分析时goto label;,我无法获得表示的 llvm::BasicBlock,label因为它还不存在,所以如果我创建一个br来实现这个 goto 语句,则 BasicBlock 的参数是未知的。

那么如何使用 llvm 来回补一个基本块呢?

标签: llvmllvm-ir

解决方案


您需要做的是保留从标签名称到基本块的映射,并在看到任何标签时创建条目,并且第一次提及是使用还是定义都没有关系。


推荐阅读