我想使用LLVM进行向后数据流分析。目前,我只是创建一个新的Pass类:
class BwdfPass: public llvm::ModulePass{}
然后,实现runOnModule方法和runOnFunction方法。但是,我只看到了一些示例,例如:
void BwdfPass::runOnFunction(Function &function){
for(BasicBlock & bb: function){
for(Instruction &inst:bb){
//do some action
}
}
}
我曾经用烟灰进行数据流分析。 Soot提供了一个BackwardFlowAnalysis接口,我只需要在doAnalysis()方法中实现传递函数。其界面提供了实现定点分析的工作清单算法。 但是,在LLVM中,是否有任何类似的机制?这是否意味着我需要自己实现工作列表算法,并按相反的顺序遍历所有指令?