AliasAnalysis.h revision f12c2c28bd72091f2d7fff5718265c5ad52e7af8
14df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner//===- llvm/Analysis/AliasAnalysis.h - Alias Analysis Interface -*- C++ -*-===// 24df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// 34df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// This file defines the generic AliasAnalysis interface, which is used as the 44df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// common interface used by all clients of alias analysis information, and 54df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// implemented by all alias analysis implementations. 64df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// 74df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// Implementations of this interface must implement the various virtual methods, 84df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// which automatically provides functionality for the entire suite of client 94df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// APIs. 104df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner// 114df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner//===----------------------------------------------------------------------===// 124df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 134df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner#ifndef LLVM_ANALYSIS_ALIAS_ANALYSIS_H 144df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner#define LLVM_ANALYSIS_ALIAS_ANALYSIS_H 154df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 164df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerclass Value; 174df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerclass CallInst; 184df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerclass InvokeInst; 194df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerclass BasicBlock; 204df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerclass Instruction; 214df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 224df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattnerstruct AliasAnalysis { 234df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 24f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// Alias analysis result - Either we know for sure that it does not alias, we 25f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// know for sure it must alias, or we don't know anything: The two pointers 26f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// _might_ alias. This enum is designed so you can do things like: 27f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// if (AA.alias(P1, P2)) { ... } 28f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// to check to see if two pointers might alias. 29f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 304df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner enum Result { NoAlias = 0, MayAlias = 1, MustAlias = 2 }; 314df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 32f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// alias - The main low level interface to the alias analysis implementation. 33f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// Returns a Result indicating whether the two pointers are aliased to each 34f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// other. This is the interface that must be implemented by specific alias 35f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// analysis implementations. 36f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 374df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner virtual Result alias(const Value *V1, const Value *V2) const = 0; 384df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 39f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// canCallModify - Return a Result that indicates whether the specified 40f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// function call can modify the memory location pointed to by Ptr. 41f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 424df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner virtual Result canCallModify(const CallInst &CI, const Value *Ptr) const = 0; 434df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 44f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// canInvokeModify - Return a Result that indicates whether the specified 45f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// function invoke can modify the memory location pointed to by Ptr. 46f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 474df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner virtual Result canInvokeModify(const InvokeInst &I, const Value *Ptr) const=0; 484df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 49f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// canBasicBlockModify - Return true if it is possible for execution of the 50f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// specified basic block to modify the value pointed to by Ptr. 51f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 524df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner bool canBasicBlockModify(const BasicBlock &BB, const Value *Ptr) const; 534df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 54f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// canInstructionRangeModify - Return true if it is possible for the 55f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// execution of the specified instructions to modify the value pointed to by 56f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// Ptr. The instructions to consider are all of the instructions in the 57f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// range of [I1,I2] INCLUSIVE. I1 and I2 must be in the same basic block. 58f12c2c28bd72091f2d7fff5718265c5ad52e7af8Chris Lattner /// 594df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner bool canInstructionRangeModify(const Instruction &I1, const Instruction &I2, 604df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner const Value *Ptr) const; 614df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 624df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner virtual ~AliasAnalysis(); // We want to be subclassed 634df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner}; 644df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner 654df22c0100fe27f19e6f4874f24eedd0742b9cf4Chris Lattner#endif 66