Как реализовать проход анализа обратного потока данных в LLVM? Нужно ли реализовывать алгоритм рабочего списка самостоятельно? - PullRequest
0 голосов
/ 10 июня 2019

Я хочу сделать обратный анализ потока данных, используя 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
        }
    }
}

Однажды я провел анализ потока данных с помощью сажи. Сажи предоставляют интерфейс BackwardFlowAnalysis, и мне нужно только реализовать функцию переноса в методе doAnalysis (). Алгоритм рабочего списка, который выполняет анализ с фиксированной точкой, обеспечивается его интерфейсом. Однако в LLVM есть ли подобный механизм? Означает ли это, что мне нужно самостоятельно реализовать алгоритм рабочего списка и выполнить все инструкции в обратном порядке?

1 Ответ

0 голосов
/ 11 июня 2019

Я рекомендую вам взглянуть на наше расширение LLVM Phasar: https://phasar.org/

. Оно обеспечивает функциональность, аналогичную функционированию Soot для Java.

...