指定我的LLVM传递对mem2reg传递的依赖性

时间:2013-03-21 07:04:00

标签: llvm llvm-3.0

我正在编写ModulePass并使用opt -load调用它。我要求在我的传递运行时alloca被提升为寄存器,使用-mem2reg开关进行选择。

有一个link表示PromoteMemoryToRegsiter传递是一个转换传递,因此我的传递不需要它。这是2010年的一份声明。这还有吗?

我发现的其中一个帖子提示类似

AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID);

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

所以我的问题是,如果可能的话,如何为我的传递表达这种依赖?一般来说,我如何表达这种传递依赖?变换传递和另一次传递之间有什么区别?

1 个答案:

答案 0 :(得分: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