I have been using LLVM and I was confused how to use a different already present pass from my own pass ? Precisely my program needs Dominance Frontier Calculation for any given instruction. LLVM already has the Dominance function Class that is implemented as a function pass. How can i invoke it/make use of it in my Module Pass ?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
WARNING: I have no real experience and answer may be incorrect or outdated. (it is based largely on outdated LLVM sources: version 1.3.)
Add an include:
#include "llvm/Analysis/DominanceFrontier.h"
If your pass if Function Pass, add to your class the method (if it is not implemented):
virtual void getAnalysisUsage(AnalysisUsage &AU) const { }
And put this into it:
AU.addRequired<DominanceFrontier>();
Then, in your class runOnFunction
method:
DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();
After this you can use:
BasicBlock *BB = /* some BB */;
DominanceFrontier::iterator DFI = DF->find(BB);