Советы по переходу с устаревшего FunctionPassManager LLVM на новый PassManagerC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Советы по переходу с устаревшего FunctionPassManager LLVM на новый PassManager

Сообщение Anonymous »

В настоящее время у меня есть компилятор, в котором я использую устаревшую версию FunctionPassManager. Мой код для этого по существу идентичен реализации Калейдоскопа здесь: https://llvm.org/docs/tutorial/BuildingAJIT2.html.
Вот соответствующий фрагмент из руководства:< /p>

Код: Выделить всё

class KaleidoscopeJIT {
private:
ExecutionSession ES;
RTDyldObjectLinkingLayer ObjectLayer;
IRCompileLayer CompileLayer;
IRTransformLayer TransformLayer;

DataLayout DL;
MangleAndInterner Mangle;
ThreadSafeContext Ctx;

public:

KaleidoscopeJIT(JITTargetMachineBuilder JTMB, DataLayout DL)
: ObjectLayer(ES,
[]() { return std::make_unique(); }),
CompileLayer(ES, ObjectLayer, ConcurrentIRCompiler(std::move(JTMB))),
TransformLayer(ES, CompileLayer, optimizeModule),
DL(std::move(DL)), Mangle(ES, this->DL),
Ctx(std::make_unique()) {
ES.getMainJITDylib().addGenerator(
cantFail(DynamicLibrarySearchGenerator::GetForCurrentProcess(DL.getGlobalPrefix())));
}

static Expected
optimizeModule(ThreadSafeModule M, const MaterializationResponsibility &R) {
// Create a function pass manager.
auto FPM = std::make_unique(M.get());

// Add some optimizations.
FPM->add(createInstructionCombiningPass());
FPM->add(createReassociatePass());
FPM->add(createGVNPass());
FPM->add(createCFGSimplificationPass());
FPM->doInitialization();

// Run the optimizations over all functions in the module being added to
// the JIT.
for (auto &F : *M)
FPM->run(F);

return M;
}
Я изо всех сил пытаюсь понять, как адаптировать это для использования нового PassManager, поскольку мне также придется изменить способ использования TransformLayer TransformLayer(ES, CompileLayer, оптимизированныймодуль) >, поскольку оптимизация должна возвращать ThreadSafeModule, и я не уверен, как это сделать с новым PassManager.
Я прочитал документацию по использованию нового менеджера проходов и искал как другие люди выполнили миграцию на своих сайтах Github, но я не могу найти пример, похожий на мой.
Я был бы очень признателен за любые подсказки или если у кого-то есть ресурсы, которыми можно поделиться. Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/792 ... assmanager
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»