Я, вероятно, неправильно понимаю основную c концепцию, как работает LLVM & pass, во всяком случае, вот мой вопрос:
В настоящее время я работаю над проходом, где я расширяю runOnModule (https://llvm.org/doxygen/classllvm_1_1ModulePass.html ) функция. Я хотел бы сначала запустить LoopSimplify на ИК, но, похоже, я не понимаю, как это сделать. Существует функция запуска (Function & F, FunctionAnalysisManager & AM), описанная в https://llvm.org/doxygen/classllvm_1_1LoopSimplifyPass.html, и, насколько я понимаю, я могу вызывать ее для каждой функции в моем модуле. Но для этого мне нужен член этого класса (LoopSimplify), чтобы вызвать его, о котором я не знаю, где взять, а также некоторый FunctionAnalysisManager. Для чего они и как они должны выглядеть? Не похоже, что я могу просто передать ему несколько пустых конструкций, верно?
Я хочу сделать это для следующей гарантии: "L oop вставка перед заголовком гарантирует, что существует одна некритическая запись край от внешней стороны l oop до заголовка l oop. Это упрощает ряд анализов и преобразований, таких как LICM. " как описано в https://llvm.org/doxygen/LoopSimplify_8h_source.html.