diff options
author | Chris Lattner <sabre@nondot.org> | 2008-06-05 23:45:18 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-06-05 23:45:18 +0000 |
commit | 3816aa7ef7265642b95d15c9537568dc7d7c8f91 (patch) | |
tree | 11a592a1f4cafbe656dc2d59f184bc202a26e679 /llvm/lib | |
parent | 0282d0247e99a4ee3b855d78dfe2a6ceda9db83e (diff) | |
download | bcm5719-llvm-3816aa7ef7265642b95d15c9537568dc7d7c8f91.tar.gz bcm5719-llvm-3816aa7ef7265642b95d15c9537568dc7d7c8f91.zip |
Expose a public interface to this pass.
llvm-svn: 52029
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/LibCallAliasAnalysis.cpp | 52 |
1 files changed, 12 insertions, 40 deletions
diff --git a/llvm/lib/Analysis/LibCallAliasAnalysis.cpp b/llvm/lib/Analysis/LibCallAliasAnalysis.cpp index afc60ddb84a..971e6e7accb 100644 --- a/llvm/lib/Analysis/LibCallAliasAnalysis.cpp +++ b/llvm/lib/Analysis/LibCallAliasAnalysis.cpp @@ -11,52 +11,13 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Analysis/LibCallAliasAnalysis.h" #include "llvm/Analysis/Passes.h" #include "llvm/Analysis/LibCallSemantics.h" #include "llvm/Function.h" #include "llvm/Pass.h" #include "llvm/Target/TargetData.h" using namespace llvm; - -namespace { - /// LibCallAliasAnalysis - Alias analysis driven from LibCallInfo. - struct LibCallAliasAnalysis : public FunctionPass, AliasAnalysis { - static char ID; // Class identification - - LibCallInfo *LCI; - - explicit LibCallAliasAnalysis(LibCallInfo *LC = 0) - : FunctionPass((intptr_t)&ID), LCI(LC) { - } - ~LibCallAliasAnalysis() { - delete LCI; - } - - ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size); - ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) { - // TODO: Could compare two direct calls against each other if we cared to. - return AliasAnalysis::getModRefInfo(CS1,CS2); - } - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AliasAnalysis::getAnalysisUsage(AU); - AU.addRequired<TargetData>(); - AU.setPreservesAll(); // Does not transform code - } - - virtual bool runOnFunction(Function &F) { - InitializeAliasAnalysis(this); // set up super class - return false; - } - - /// hasNoModRefInfoForCalls - We can provide mod/ref information against - /// non-escaping allocations. - virtual bool hasNoModRefInfoForCalls() const { return false; } - private: - ModRefResult AnalyzeLibCallDetails(const LibCallFunctionInfo *FI, - CallSite CS, Value *P, unsigned Size); - }; -} // End of anonymous namespace // Register this pass... char LibCallAliasAnalysis::ID = 0; @@ -70,6 +31,17 @@ FunctionPass *llvm::createLibCallAliasAnalysisPass(LibCallInfo *LCI) { return new LibCallAliasAnalysis(LCI); } +LibCallAliasAnalysis::~LibCallAliasAnalysis() { + delete LCI; +} + +void LibCallAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { + AliasAnalysis::getAnalysisUsage(AU); + AU.addRequired<TargetData>(); + AU.setPreservesAll(); // Does not transform code +} + + /// AnalyzeLibCallDetails - Given a call to a function with the specified /// LibCallFunctionInfo, see if we can improve the mod/ref footprint of the call |