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

Sha*_*rad 7 c++ compiler-construction llvm clang

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

osg*_*sgx 4

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

添加包含:

#include "llvm/Analysis/DominanceFrontier.h"
Run Code Online (Sandbox Code Playgroud)

如果您通过 Function Pass,请将方法添加到您的类中(如果未实现):

virtual void getAnalysisUsage(AnalysisUsage &AU) const { }
Run Code Online (Sandbox Code Playgroud)

并将其放入其中:

 AU.addRequired<DominanceFrontier>();
Run Code Online (Sandbox Code Playgroud)

然后,在您的类runOnFunction方法中:

 DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();
Run Code Online (Sandbox Code Playgroud)

之后您可以使用:

    BasicBlock *BB = /* some BB */;
    DominanceFrontier::iterator DFI = DF->find(BB);
Run Code Online (Sandbox Code Playgroud)