[llvm-dev] How to get the full alias analysis results of LLVM Alias analysis passes?
Ren Kunpeng via llvm-dev
llvm-dev at lists.llvm.org
Tue Jan 26 00:27:17 PST 2021
Hi all,
I am working on a project about pointer analysis based on LLVM IR, and I not very familar with LLVM Development.
Now, I want to compare the original LLVM alias analysis pass with my tool. I use AAResultsWrapperPass to do this thing, just as below:
virtual bool runOnFunction(Function &F)
{
AliasAnalysis *AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
for (auto &B : F)
{
for (auto &I : B)
{
if (auto *call = dyn_cast<CallInst>(&I))
{
if (call->getCalledFunction()!= NULL)
{
if(call->getNumArgOperands() !=2)
continue;
Value *V1 = call->getArgOperand(0);
Value *V2 = call->getArgOperand(1);
//Get LLVM alias analysi result
AliasResult aares = AA->alias(V1, V2);
.......................
I have doubt that wether the AliasResults are analysied by all LLVM alias pass<https://llvm.org/docs/AliasAnalysis.html#available-aliasanalysis-implementations>, such as -basic-aa, -globalsmodref-aa, -stens-aa. I find the implement of AAResultsWrapperPass contains some code like below:
void AAResultsWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequiredTransitive<BasicAAWrapperPass>();
AU.addRequiredTransitive<TargetLibraryInfoWrapperPass>();
// We also need to mark all the alias analysis passes we will potentially
// probe in runOnFunction as used here to ensure the legacy pass manager
// preserves them. This hard coding of lists of alias analyses is specific to
// the legacy pass manager.
AU.addUsedIfAvailable<ScopedNoAliasAAWrapperPass>();
AU.addUsedIfAvailable<TypeBasedAAWrapperPass>();
AU.addUsedIfAvailable<objcarc::ObjCARCAAWrapperPass>();
AU.addUsedIfAvailable<GlobalsAAWrapperPass>();
AU.addUsedIfAvailable<SCEVAAWrapperPass>();
AU.addUsedIfAvailable<CFLAndersAAWrapperPass>();
AU.addUsedIfAvailable<CFLSteensAAWrapperPass>();
AU.addUsedIfAvailable<ExternalAAWrapperPass>();
}
Does it mean the AAResultsWrapperPass contains all the alias analysis pass result?
By the way, is there a better implement to get the LLVM alias analysis result. Thank you for telling me about that.
Thanks for you reading. Wishing you have a good day.
Regards,
Kunpeng
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210126/6d31d711/attachment-0001.html>
More information about the llvm-dev
mailing list