forked from OSchip/llvm-project
59 lines
2.2 KiB
C++
59 lines
2.2 KiB
C++
![]() |
//- CFLAndersAliasAnalysis.cpp - Unification-based Alias Analysis ---*- C++-*-//
|
||
|
//
|
||
|
// The LLVM Compiler Infrastructure
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
//
|
||
|
// This file implements a CFL-based, summary-based alias analysis algorithm. It
|
||
|
// differs from CFLSteensAliasAnalysis in its inclusion-based nature while
|
||
|
// CFLSteensAliasAnalysis is unification-based. This pass has worse performance
|
||
|
// than CFLSteensAliasAnalysis (the worst case complexity of
|
||
|
// CFLAndersAliasAnalysis is cubic, while the worst case complexity of
|
||
|
// CFLSteensAliasAnalysis is almost linear), but it is able to yield more
|
||
|
// precise analysis result. The precision of this analysis is roughly the same
|
||
|
// as that of an one level context-sensitive Andersen's algorithm.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
// N.B. AliasAnalysis as a whole is phrased as a FunctionPass at the moment, and
|
||
|
// CFLAndersAA is interprocedural. This is *technically* A Bad Thing, because
|
||
|
// FunctionPasses are only allowed to inspect the Function that they're being
|
||
|
// run on. Realistically, this likely isn't a problem until we allow
|
||
|
// FunctionPasses to run concurrently.
|
||
|
|
||
|
#include "llvm/Analysis/CFLAndersAliasAnalysis.h"
|
||
|
#include "llvm/Pass.h"
|
||
|
|
||
|
using namespace llvm;
|
||
|
|
||
|
#define DEBUG_TYPE "cfl-anders-aa"
|
||
|
|
||
|
CFLAndersAAResult::CFLAndersAAResult() = default;
|
||
|
|
||
|
char CFLAndersAA::PassID;
|
||
|
|
||
|
CFLAndersAAResult CFLAndersAA::run(Function &F, AnalysisManager<Function> &AM) {
|
||
|
return CFLAndersAAResult();
|
||
|
}
|
||
|
|
||
|
char CFLAndersAAWrapperPass::ID = 0;
|
||
|
INITIALIZE_PASS(CFLAndersAAWrapperPass, "cfl-anders-aa",
|
||
|
"Inclusion-Based CFL Alias Analysis", false, true)
|
||
|
|
||
|
ImmutablePass *llvm::createCFLAndersAAWrapperPass() {
|
||
|
return new CFLAndersAAWrapperPass();
|
||
|
}
|
||
|
|
||
|
CFLAndersAAWrapperPass::CFLAndersAAWrapperPass() : ImmutablePass(ID) {
|
||
|
initializeCFLAndersAAWrapperPassPass(*PassRegistry::getPassRegistry());
|
||
|
}
|
||
|
|
||
|
void CFLAndersAAWrapperPass::initializePass() {}
|
||
|
|
||
|
void CFLAndersAAWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
|
||
|
AU.setPreservesAll();
|
||
|
}
|