Skip to main content
 首页 » 编程设计

llvm之指定我的 LLVM 传递对 mem2reg 传递的依赖

2024年10月25日18kevingrace

我正在写一个 ModulePass并使用 opt -load 调用它.我会要求 alloca已在我的通行证运行时升级为注册,使用 -mem2reg 开关进行选择。

有一个link这表明PromoteMemoryToRegsiter 传递是一个转换传递,因此我的传递不需要。这是 2010 年的声明。这仍然成立吗?

我发现的其中一篇帖子提出了类似的建议

AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID); 

但这与我上面链接的帖子相矛盾。

所以我的问题是,如果可能的话,我如何表达对我的通行证的这种依赖性?一般来说,我如何表达这种传递依赖关系?转换传递和另一个传递之间有什么区别?

请您参考如下方法:

What's the difference between a transform pass and another pass?



转换过程是可能使其他过程的结果无效的过程。

How to I express this dependency for my pass?



首先,我推荐阅读 the pass-dependency section of the official "how to write a pass" guide .在任何情况下,在转换传递之间添加依赖关系的正确方法是在传递管理器( see the guide section on the pass manager )中在另一个传递之前添加一个,或者,如果您只是调用 opt ,然后按照您希望它们发生的顺序添加您想要的所有通行证,例如:
opt -load mypass.so -mem2reg -mypass