如何使用LLVM中的现有函数传递 - 传递?

时间:2012-02-17 18:48:44

标签: c++ compiler-construction llvm clang

我一直在使用LLVM而且我很困惑如何在我自己的传球中使用不同的已经存在的传球?确切地说,我的程序需要针对任何给定指令的Dominance Frontier Calculation。 LLVM已经具有作为函数传递实现的Dominance函数类。如何在我的Module Pass中调用它/使用它?

1 个答案:

答案 0 :(得分:4)

警告:我没有真正的经验,答案可能不正确或过时。 (它主要基于过时的LLVM源:version 1.3。)

添加一个包含:

#include "llvm/Analysis/DominanceFrontier.h"

如果您通过了函数通行证,请向您的班级添加该方法(如果未实施):

virtual void getAnalysisUsage(AnalysisUsage &AU) const { }

并把它放进去:

 AU.addRequired<DominanceFrontier>();

然后,在您的班级runOnFunction方法中:

 DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();

在此之后你可以使用:

    BasicBlock *BB = /* some BB */;
    DominanceFrontier::iterator DFI = DF->find(BB);