AliasAnalysis.h revision 4df22c0100fe27f19e6f4874f24eedd0742b9cf4
1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh//===- llvm/Analysis/AliasAnalysis.h - Alias Analysis Interface -*- C++ -*-===// 20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang// 3f8a6a7636d53a5730c58ae041e4e09ae12e1657cChia-chi Yeh// This file defines the generic AliasAnalysis interface, which is used as the 4c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh// common interface used by all clients of alias analysis information, and 5c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh// implemented by all alias analysis implementations. 60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang// 7c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh// Implementations of this interface must implement the various virtual methods, 8c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh// which automatically provides functionality for the entire suite of client 90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang// APIs. 10c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh// 11c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh//===----------------------------------------------------------------------===// 12c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh 130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef LLVM_ANALYSIS_ALIAS_ANALYSIS_H 140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define LLVM_ANALYSIS_ALIAS_ANALYSIS_H 150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangclass Value; 17c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehclass CallInst; 180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangclass InvokeInst; 19c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehclass BasicBlock; 20c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehclass Instruction; 21c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh 220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct AliasAnalysis { 230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // Alias analysis result - Either we know for sure that it does not alias, we 250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // know for sure it must alias, or we don't know anything: The two pointers 260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // _might_ alias. This enum is designed so you can do things like: 270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // if (AA.alias(P1, P2)) { ... } 280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // to check to see if two pointers might alias. 290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang enum Result { NoAlias = 0, MayAlias = 1, MustAlias = 2 }; 310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 32c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh // alias - The main low level interface to the alias analysis implementation. 330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // Returns a Result indicating whether the two pointers are aliased to each 340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // other. This is the interface that must be implemented by specific alias 350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // analysis implementations. 360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang virtual Result alias(const Value *V1, const Value *V2) const = 0; 380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // canCallModify - Return a Result that indicates whether the specified 400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // function call can modify the memory location pointed to by Ptr. 410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang virtual Result canCallModify(const CallInst &CI, const Value *Ptr) const = 0; 430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // canInvokeModify - Return a Result that indicates whether the specified 450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // function invoke can modify the memory location pointed to by Ptr. 460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang virtual Result canInvokeModify(const InvokeInst &I, const Value *Ptr) const=0; 480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // canBasicBlockModify - Return true if it is possible for execution of the 500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // specified basic block to modify the value pointed to by Ptr. 510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang bool canBasicBlockModify(const BasicBlock &BB, const Value *Ptr) const; 530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // canInstructionRangeModify - Return true if it is possible for the execution 550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // of the specified instructions to modify the value pointed to by Ptr. The 560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // instructions to consider are all of the instructions in the range of 570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // [I1,I2] INCLUSIVE. I1 and I2 must be in the same basic block. 580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang // 590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang bool canInstructionRangeModify(const Instruction &I1, const Instruction &I2, 600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang const Value *Ptr) const; 610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang virtual ~AliasAnalysis(); // We want to be subclassed 630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}; 640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang