2012-02-17 9 views
6

LLVM'yi kullanıyorum ve kendi geçişimden farklı bir mevcut geçişin nasıl kullanılacağı konusunda kafam karışmıştı? Kesinlikle benim programım herhangi bir talimat için Dominance Frontier Calculation'a ihtiyaç duyuyor. LLVM zaten bir fonksiyon geçişi olarak uygulanan Dominance fonksiyonu Sınıfına sahiptir. Modül Geçişimde bunu nasıl kullanabilirim/kullanabilirim?LLVM - geçişimden bir exisiting işlev geçişini nasıl kullanırım?

+0

Dokümanları kontrol ettiniz mi? En son kontrol ettiğimden beri cevap geldi: http://llvm.org/docs/WritingAnLLVMPass.html – Fanael

+0

"AU.addRequired ();' pass'ınızı getAnalysisUsage (AnalysisUsage & AU) yöntemine ekleyin. – osgx

+0

Belgeler gerçekten belirsiz ve çözülmesinde gerçek problemlerim vardı. Bir örnek yardımcı olabilirdi. – Sharad

cevap

3

UYARI: Hiçbir gerçek deneyimim ve yanıtım yanlış veya güncel olmayabilir. (Büyük ölçüde eskimiş LLVM kaynaklarına dayanmaktadır: version 1.3.)

bir içerme ekleyin:

#include "llvm/Analysis/DominanceFrontier.h" 

olursa (uygulanmadığı taktirde) Fonksiyonu Geçiş, sınıfınıza yöntemi eklerseniz geçiş:

virtual void getAnalysisUsage(AnalysisUsage &AU) const { } 

Ve bunun içine koymak:

AU.addRequired<DominanceFrontier>(); 

Ardından, sınıftakiiçindeyöntemi: Bundan sonra

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

kullanabilirsiniz:

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

Teşekkürler. Bunu deneyeceğim. – Sharad

+0

Teşekkürler. İşe yarıyor. Sadece yineleyici tipini değiştirmek için gerekli. – Sharad