我正在写一个 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