2012-02-17 16 views
6

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?

+0

Czy można sprawdzić w dokumentacji? Ponieważ po raz ostatni sprawdziłem, odpowiedź była: http://llvm.org/docs/WritingAnLLVMPass.html – Fanael

+0

Dodaj 'AU.addRequired ();' do twojego przebiegu 'getAnalysisUsage (AnalysisUsage & AU)' method. – osgx

+0

Dokumentacja jest naprawdę niejasna i miałem problemy z jej odczytaniem. Przykład pomógłby. – Sharad

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); 
+0

Dzięki. Spróbuję tego. – Sharad

+0

Dzięki. To działa. Wystarczy, aby zmienić typ iteratora. – Sharad

Powiązane problemy