Я пытаюсь найти способ оптимизировать пустые глобальные конструкторы. Предыдущие оптимизации превратили конструкторы в функции, которые ничего не делают. Мне нужно добавить новый проход, чтобы удалить эти функции из llvm.global_ctors
.
Во-первых, я попробовал optimizeGlobalCtorsList
, но эта функция на самом деле не вызывает обратный вызов, который я ей даю, хотя llvm.global_ctors
заполнен.
Затем я попытался запустить GlobalOptPass
. Я пробовал это:
llvm::GlobalOptPass pass;
llvm::ModuleAnalysisManager MAM{true};
pass.run(module, MAM);
Это заканчивается разыменованием нулевого указателя в AnalysisManager::lookupPass
. Я думаю, мне нужно выполнить какую-то инициализацию или регистрацию, но я не знаю, как это сделать. Все ссылки на «регистрацию пропуска llvm» говорят о регистрации пропуска с помощью opt
. Я не хочу этого делать. Я просто хочу пройти мимо.