1 //- CFLAndersAliasAnalysis.cpp - Unification-based Alias Analysis ---*- C++-*-//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a CFL-based, summary-based alias analysis algorithm. It
11 // differs from CFLSteensAliasAnalysis in its inclusion-based nature while
12 // CFLSteensAliasAnalysis is unification-based. This pass has worse performance
13 // than CFLSteensAliasAnalysis (the worst case complexity of
14 // CFLAndersAliasAnalysis is cubic, while the worst case complexity of
15 // CFLSteensAliasAnalysis is almost linear), but it is able to yield more
16 // precise analysis result. The precision of this analysis is roughly the same
17 // as that of an one level context-sensitive Andersen's algorithm.
18 //
19 //===----------------------------------------------------------------------===//
20
21 // N.B. AliasAnalysis as a whole is phrased as a FunctionPass at the moment, and
22 // CFLAndersAA is interprocedural. This is *technically* A Bad Thing, because
23 // FunctionPasses are only allowed to inspect the Function that they're being
24 // run on. Realistically, this likely isn't a problem until we allow
25 // FunctionPasses to run concurrently.
26
27 #include "llvm/Analysis/CFLAndersAliasAnalysis.h"
28 #include "CFLGraph.h"
29 #include "llvm/Pass.h"
30
31 using namespace llvm;
32 using namespace llvm::cflaa;
33
34 #define DEBUG_TYPE "cfl-anders-aa"
35
36 CFLAndersAAResult::CFLAndersAAResult() = default;
37
38 char CFLAndersAA::PassID;
39
run(Function & F,AnalysisManager<Function> & AM)40 CFLAndersAAResult CFLAndersAA::run(Function &F, AnalysisManager<Function> &AM) {
41 return CFLAndersAAResult();
42 }
43
44 char CFLAndersAAWrapperPass::ID = 0;
45 INITIALIZE_PASS(CFLAndersAAWrapperPass, "cfl-anders-aa",
46 "Inclusion-Based CFL Alias Analysis", false, true)
47
createCFLAndersAAWrapperPass()48 ImmutablePass *llvm::createCFLAndersAAWrapperPass() {
49 return new CFLAndersAAWrapperPass();
50 }
51
CFLAndersAAWrapperPass()52 CFLAndersAAWrapperPass::CFLAndersAAWrapperPass() : ImmutablePass(ID) {
53 initializeCFLAndersAAWrapperPassPass(*PassRegistry::getPassRegistry());
54 }
55
initializePass()56 void CFLAndersAAWrapperPass::initializePass() {}
57
getAnalysisUsage(AnalysisUsage & AU) const58 void CFLAndersAAWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
59 AU.setPreservesAll();
60 }
61