optimization - LLVM 不可变通行证
问题描述
我正在学习 LLVM Pass 类并且不太了解ImmutablePass。有人可以举一个例子说明它有什么帮助以及我们应该什么时候使用它?
解决方案
您可以查看 LLVM 本身中的示例:https ://github.com/llvm/llvm-project/search?q=%22public+ImmutablePass%22 。搜索中只有 2 页。
通过查看代码本身,您可以看到它并没有做太多大声笑:https ://github.com/llvm/llvm-project/blob/86341247c4a2ffa4328945b03e7a05b1c51c3889/llvm/include/llvm/Pass.h#L269 。
如我所见,如果您考虑不使用runOnModule
,runOnFunction
并以某种方式影响 LLVM 模块,则可以使用ImmutablePass
.
太棒了,这些通行证还具有:
initializePass()
可由用户设置bool runOnModule(Module &) override { return false; }
就个人而言,我记得 LLVM 在有意义的传递之前运行了一些不可变的传递,因为如果不这样做,这些其他传递将由于缺少一些信息而出现段错误......
推荐阅读
- intellij-idea - 如果intellij中的长参数如何更改换行
- c# - 为每个可能的排列填充 3x3 位立方体
- c - 如何区分 RTOS 和 Linux?
- r - 如何计算地铁站的乘客数量?
- reactjs - 无法显示 Jumbotron 和 Mobile Stepper UI 组件的图像(材料 UI)
- javascript - React.js 渲染函数和变量范围中的扩展符号
- javascript - 带有不区分大小写标志'i'和全局的正则表达式javascript不起作用
- css - 使用宽度与使用最小宽度和最大宽度
- python - 子模块上的 ModuleNotFoundError
- php - 身份验证与一些工匠命令冲突