我一直在使用LLVM,我很困惑如何在我自己的传球中使用不同的已经存在的传球?确切地说,我的程序需要针对任何给定指令的Dominance Frontier Calculation. LLVM已经具有作为函数传递实现的Dominance函数类.我怎样才能在我的Module Pass中调用它/使用它?
解决方法
警告:我没有真正的经验,答案可能不正确或过时. (它主要基于过时的LLVM源:
version 1.3.)
添加包含:
#include "llvm/Analysis/DominanceFrontier.h"
如果您传递了函数Pass,请将该方法添加到您的类中(如果未实现):
virtual void getAnalysisUsage(AnalysisUsage &AU) const { }
把它放进去吧:
AU.addrequired<DominanceFrontier>();
然后,在你的类runOnFunction方法中:
DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();
在此之后你可以使用:
BasicBlock *BB = /* some BB */; DominanceFrontier::iterator DFI = DF->find(BB);