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