llvm - 如何回补 LLVM 中的基本块
问题描述
我正在编写 c 编译器,但不知道如何goto
在我的一次性编译器中使用 llvm 实现语句,例如:
int main() {
goto label;
label:
return 0
}
由于解析器是一次通过,当我分析时goto label;
,我无法获得表示的 llvm::BasicBlock,label
因为它还不存在,所以如果我创建一个br
来实现这个 goto 语句,则 BasicBlock 的参数是未知的。
那么如何使用 llvm 来回补一个基本块呢?
解决方案
您需要做的是保留从标签名称到基本块的映射,并在看到任何标签时创建条目,并且第一次提及是使用还是定义都没有关系。
推荐阅读
- ubuntu-18.04 - 新的专用服务器:Ubuntu 18.0.4 上的 RAID 1 - 如何检查状态或配置
- java - 在 Netbeans 8.2 或更高版本中找不到 JDK
- excel - 在excel中重新格式化日期,删除方括号和时间戳
- python - 如何在 python 中将自定义内核应用于 cuda_GpuMat
- javascript - 仅基于非空数组的字段匹配
- node.js - MongooseError - 操作 `users.findOne()` 缓冲在 10000 毫秒后超时
- javascript - 由于奇怪的原因节点模块(mysql2)每次抛出的类型错误
- javascript - 按下汉堡时如何停止页面滚动?
- python - python神经网络解释
- image - 使用图片 HTML 元素更改为具有惰性大小的纵向或横向视图图像的右 src 低分辨率占位符