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 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 48 ImmutablePass *llvm::createCFLAndersAAWrapperPass() { 49 return new CFLAndersAAWrapperPass(); 50 } 51 52 CFLAndersAAWrapperPass::CFLAndersAAWrapperPass() : ImmutablePass(ID) { 53 initializeCFLAndersAAWrapperPassPass(*PassRegistry::getPassRegistry()); 54 } 55 56 void CFLAndersAAWrapperPass::initializePass() {} 57 58 void CFLAndersAAWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { 59 AU.setPreservesAll(); 60 } 61