Używam LLVM i byłem zdezorientowany, jak użyć innej, już obecnej przepustki z mojego własnego biletu? Właśnie mój program potrzebuje kalkulacji Dominance Frontier dla dowolnej instrukcji. LLVM ma już klasę funkcji Dominance, która jest realizowana jako funkcja pass. Jak mogę go przywołać/użyć w mojej Karcie Modułu?Jak używać funkcji exisiting z mojego LLVM-pass?
6
A
Odpowiedz
3
OSTRZEŻENIE: Nie mam prawdziwego doświadczenia, a odpowiedź może być niepoprawna lub nieaktualna. (To jest w dużej mierze opiera się na przestarzałych źródeł LLVM: version 1.3.)
dodać obejmują:
#include "llvm/Analysis/DominanceFrontier.h"
Jeśli wprost jeśli Funkcja Pass dodać do klasy metodę (jeśli nie jest realizowany):
virtual void getAnalysisUsage(AnalysisUsage &AU) const { }
i umieścić ten do niego:
AU.addRequired<DominanceFrontier>();
Następnie w swojej klasie runOnFunction
metoda:
DominanceFrontier *DF = &getAnalysis<DominanceFrontier>();
Po tym można użyć:
BasicBlock *BB = /* some BB */;
DominanceFrontier::iterator DFI = DF->find(BB);
Czy można sprawdzić w dokumentacji? Ponieważ po raz ostatni sprawdziłem, odpowiedź była: http://llvm.org/docs/WritingAnLLVMPass.html – Fanael
Dodaj 'AU.addRequired();' do twojego przebiegu 'getAnalysisUsage (AnalysisUsage & AU)' method. –
osgx
Dokumentacja jest naprawdę niejasna i miałem problemy z jej odczytaniem. Przykład pomógłby. – Sharad