我正在编写ModulePass
并使用opt -load
调用它。我要求在我的传递运行时alloca
被提升为寄存器,使用-mem2reg开关进行选择。
有一个link表示PromoteMemoryToRegsiter传递是一个转换传递,因此我的传递不需要它。这是2010年的一份声明。这还有吗?
我发现的其中一个帖子提示类似
AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID);
但这与我上面链接的帖子相矛盾。
所以我的问题是,如果可能的话,如何为我的传递表达这种依赖?一般来说,我如何表达这种传递依赖?变换传递和另一次传递之间有什么区别?
答案 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