如何在LLVM中实现向后数据流分析传递?我们是否需要自己实现工作清单算法



我想使用 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
        }
    }
}

我曾经用烟灰做过数据流分析。烟灰提供了一个接口 BackFlowAnalysis,我只需要在方法 doAnalysis(( 中实现传递函数。实现定点分析的工作清单算法由其接口提供。但是,在LLVM中,是否有类似的机制?这是否意味着我需要实现工作清单算法并自己以倒序浏览所有指令?

我鼓励你看看我们的LLVM扩展Phasar:https://phasar.org/

它提供的功能类似于Soot对Java所做的功能。

最新更新