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?
6
A
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);
Dokümanları kontrol ettiniz mi? En son kontrol ettiğimden beri cevap geldi: http://llvm.org/docs/WritingAnLLVMPass.html – Fanael
"AU.addRequired();' pass'ınızı getAnalysisUsage (AnalysisUsage & AU) yöntemine ekleyin. –
osgx
Belgeler gerçekten belirsiz ve çözülmesinde gerçek problemlerim vardı. Bir örnek yardımcı olabilirdi. – Sharad