Как требовать проход в исходном коде - PullRequest
1 голос
/ 05 июня 2019

Я работаю на этапе оптимизации, и мне нужно удалить несколько мертвых базовых блоков в цикле.Я знаю, что проход unreachableblockelim может выполнять эту работу, но как мне его выполнить в середине моего прохода?То есть без использования интерфейса командной строки opt:

opt -load myOptPass.dylib -unreachableblockelim ir.bc -o ir2.bc

Это вообще возможно?Я не смог найти ничего похожего на то, что я пытаюсь достичь в исходном коде llvm.

1 Ответ

3 голосов
/ 07 июня 2019

LLVM в настоящий момент содержит два менеджера проходов.Требуемый проход использует новый (характеризующийся проходом, наследующим PassInfoMixin), и для его использования в проходе new-PM необходимо включить файл заголовка в файл .cpp вашего прохода:

#include "llvm/CodeGen/UnreachableBlockElim.h"

Ваш проходбудет содержать функцию с именем run (), которая, возможно, выглядит следующим образом:

PreservedAnalyses MyPAss::run(Function &F, FunctionAnalysisManager &FAM) {
  // some of your code goes here

  UnreachableBlockElimPass ube;
  ube.run(F, FAM);

  // more of your code here
}

Если в вашем проходе используется старый менеджер проходов (для которого характерно наследование FunctionPass, ModulePass и т. д.), тогда он немного сложнее, потому что вынеобходимо предоставить этот FunctionAnalysisManager самостоятельно.В этом случае я бы начал с перехода на новый путь.

...