Comment utiliser un passage de fonction existant de mon LLVM – pass?

J’utilisais LLVM et je ne savais pas comment utiliser un autre laissez-passer déjà présent à partir de mon propre laissez-passer? Mon programme a précisément besoin de Dominance Frontier Calculation pour toute instruction donnée. LLVM a déjà la classe de fonction Dominance qui est implémentée en tant que passe de fonction. Comment puis-je l’invoquer / l’utiliser dans mon Pass Module?

AVERTISSEMENT: je n’ai aucune expérience réelle et la réponse peut être incorrecte ou obsolète. (il est basé en grande partie sur des sources LLVM obsolètes: version 1.3 .)

Ajouter un inclure:

 #include "llvm/Analysis/DominanceFrontier.h" 

Si votre passe si Fonction passe, ajoutez à votre classe la méthode (si elle n’est pas implémentée):

 virtual void getAnalysisUsage(AnalysisUsage &AU) const { } 

Et mettez ceci dedans:

  AU.addRequired(); 

Ensuite, dans la méthode runOnFunction votre classe:

  DominanceFrontier *DF = &getAnalysis(); 

Après cela, vous pouvez utiliser:

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