2013-03-21 84 views
4

我正在编写ModulePass并使用opt -load调用它。我会要求alloca已被提升为注册时,我的通行证运行,使用-mem2reg开关选择。指定我的LLVM传递对mem2reg传递的依赖关系

有一个link它指示PromoteMemoryToRegsiter通道是一个转换通行证,因此我的通行证不应该这样做。这是2010年的一项声明。这仍然有效吗?

一个我找到了帖子的建议类似

AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID); 

但反驳我上面链接的帖子。

所以我的问题是,如果可能,我如何表达这种依赖关系?一般来说,我如何表达这种传递依赖关系?转换传球和另一传球有什么区别?

回答

5

转换通过和另一个通过有什么区别?

转换通行证是可能使其他通行证的结果无效的通行证。

如何为我的通行证表达这种依赖关系?

首先,我推荐阅读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 
+0

我们使用'opt'和编写我们自己的实例,它采用的是'PassManager',目前还不能确定会之间来回。如果顺序很容易实现,那么现在就足够了:) – Jens 2013-03-21 08:27:45