2017-05-21 2 views
0

J'essaie d'utiliser AliasSetTracker pour collecter le jeu d'alias. Cependant, la nouvelle version me rend confus. Pour initialiser un AliasSetTracker, j'ai besoin d'une instance de AliasAnalysis. Mais l'ancien:llvm 4.0.0 Initialiser une classe AliasSetTracker

AliasAnalysis &AA = getAnalysis<AliasAnalysis>(); 
AliasSetTracker tr(AA); 

ne fonctionne pas et les erreurs:

In file included from /Users/.../LLVM/llvm/include/llvm/Pass.h:388: 
/Users/.../llvm/include/llvm/PassAnalysisSupport.h:223:53: error: no member 
named 'ID' in 'llvm::AAResults' 
return getAnalysisID<AnalysisType>(&AnalysisType::ID); 

/Users.../program/Analysis.cpp:215:25: note: in 
instantiation of function template specialization 
'llvm::Pass::getAnalysis<llvm::AAResults>' requested here 
AliasAnalysis &AA = getAnalysis<AliasAnalysis>(); 

Répondre

0

dans cette nouvelle version de LLVM vous devez utiliser la fonction getAnalysisUsage et modifier la façon dont vous avez utilisé la fonction getAnalysis:
1- Ajoutez la fonction suivante dans votre struct passe:
virtual void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<AAResultsWrapperPass>(); }
2- Modifier votre appel à la fonction getAnalysis:
AliasAnalysis &AA = getAnalysis<AAResultsWrapperPass>().getAAResults();

Cela fonctionnera maintenant :)

+0

Merci, celui-ci fonctionne. – Crystal

+0

Vous êtes les bienvenus :) – Sahar