首页 > 解决方案 > LLVM 不可变通行证

问题描述

我正在学习 LLVM Pass 类并且不太了解ImmutablePass。有人可以举一个例子说明它有什么帮助以及我们应该什么时候使用它?

标签: optimizationllvm

解决方案


您可以查看 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 。

如我所见,如果您考虑不使用runOnModulerunOnFunction并以某种方式影响 LLVM 模块,则可以使用ImmutablePass.

太棒了,这些通行证还具有:

  • initializePass()可由用户设置
  • bool runOnModule(Module &) override { return false; }

就个人而言,我记得 LLVM 在有意义的传递之前运行了一些不可变的传递,因为如果不这样做,这些其他传递将由于缺少一些信息而出现段错误......


推荐阅读