LLVM API Documentation

LibCallAliasAnalysis.h

Go to the documentation of this file.
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