00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef LLVM_ANALYSIS_LIBCALL_AA_H
00015 #define LLVM_ANALYSIS_LIBCALL_AA_H
00016
00017 #include "llvm/Analysis/AliasAnalysis.h"
00018 #include "llvm/Pass.h"
00019
00020 namespace llvm {
00021 class LibCallInfo;
00022 struct LibCallFunctionInfo;
00023
00025 struct LibCallAliasAnalysis : public FunctionPass, public AliasAnalysis {
00026 static char ID;
00027
00028 LibCallInfo *LCI;
00029
00030 explicit LibCallAliasAnalysis(LibCallInfo *LC = 0)
00031 : FunctionPass(&ID), LCI(LC) {
00032 }
00033 explicit LibCallAliasAnalysis(const void *ID, LibCallInfo *LC)
00034 : FunctionPass(ID), LCI(LC) {
00035 }
00036 ~LibCallAliasAnalysis();
00037
00038 ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
00039
00040 ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
00041
00042 return AliasAnalysis::getModRefInfo(CS1,CS2);
00043 }
00044
00045 virtual void getAnalysisUsage(AnalysisUsage &AU) const;
00046
00047 virtual bool runOnFunction(Function &F) {
00048 InitializeAliasAnalysis(this);
00049 return false;
00050 }
00051
00052 private:
00053 ModRefResult AnalyzeLibCallDetails(const LibCallFunctionInfo *FI,
00054 CallSite CS, Value *P, unsigned Size);
00055 };
00056 }
00057
00058 #endif