如何在 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 回溯一个基本块呢?

您需要做的是保留一个从标签名称到基本块的映射,并在您看到任何一个标签时创建条目,而不管第一个提到的是使用还是定义。