LLVM API Documentation
00001 //===- LibCallAliasAnalysis.h - Implement AliasAnalysis for libcalls ------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file defines the LibCallAliasAnalysis class. 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 class LibCallFunctionInfo; 00023 00024 /// LibCallAliasAnalysis - Alias analysis driven from LibCallInfo. 00025 struct LibCallAliasAnalysis : public FunctionPass, AliasAnalysis { 00026 static char ID; // Class identification 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 // TODO: Could compare two direct calls against each other if we cared to. 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); // set up super class 00049 return false; 00050 } 00051 00052 /// hasNoModRefInfoForCalls - We can provide mod/ref information against 00053 /// non-escaping allocations. 00054 virtual bool hasNoModRefInfoForCalls() const { return false; } 00055 private: 00056 ModRefResult AnalyzeLibCallDetails(const LibCallFunctionInfo *FI, 00057 CallSite CS, Value *P, unsigned Size); 00058 }; 00059 } // End of llvm namespace 00060 00061 #endif