Как я могу использовать существующую функцию pass от моего LLVM - pass? - PullRequest
7 голосов
/ 17 февраля 2012

Я использую LLVM, и меня смущает, как использовать другой уже существующий проход из моего собственного прохода? Именно моя программа нуждается в расчете границы доминирования для любой данной инструкции. У LLVM уже есть класс функции доминирования, который реализован как проход функции. Как я могу вызвать его / использовать в модуле Pass?

1 Ответ

4 голосов
/ 17 февраля 2012

ВНИМАНИЕ: У меня нет реального опыта, и ответ может быть неправильным или устаревшим.(в основном это основано на устаревших источниках LLVM: версия 1.3 .)

Добавить включение:

#include "llvm/Analysis/DominanceFrontier.h"

Если ваш проход, если Function Pass, добавьте в свой классметод (если он не реализован):

virtual void getAnalysisUsage(AnalysisUsage &AU) const { }

И поместите это в него:

 AU.addRequired<DominanceFrontier>();

Затем в вашем классе runOnFunction Метод:

 DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();

После этого вы можете использовать:

    BasicBlock *BB = /* some BB */;
    DominanceFrontier::iterator DFI = DF->find(BB);
...