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 | 626645c77be5420483052db48bbc45e4776305b8 (patch) | |
tree | 6b0c40efd7a77d50b1afdc5b40803fabd082ff99 /lib/Analysis/LibCallAliasAnalysis.cpp | |
parent | c5d701c11e0c6bd0343ccc061ee79d5db6afad9d (diff) | |
download | external_llvm-626645c77be5420483052db48bbc45e4776305b8.zip external_llvm-626645c77be5420483052db48bbc45e4776305b8.tar.gz external_llvm-626645c77be5420483052db48bbc45e4776305b8.tar.bz2 |
Expose a public interface to this pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52029 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/LibCallAliasAnalysis.cpp')
-rw-r--r-- | lib/Analysis/LibCallAliasAnalysis.cpp | 52 |
1 files changed, 12 insertions, 40 deletions
diff --git a/lib/Analysis/LibCallAliasAnalysis.cpp b/lib/Analysis/LibCallAliasAnalysis.cpp index afc60dd..971e6e7 100644 --- a/lib/Analysis/LibCallAliasAnalysis.cpp +++ b/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 |