summaryrefslogtreecommitdiff
path: root/lib/Analysis/LibCallAliasAnalysis.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-06-05 23:45:18 +0000
committerChris Lattner <sabre@nondot.org>2008-06-05 23:45:18 +0000
commit5c490610a166a31b4a34c9fcaebbf744fd524049 (patch)
tree6b0c40efd7a77d50b1afdc5b40803fabd082ff99 /lib/Analysis/LibCallAliasAnalysis.cpp
parent15ccbf59a90e796dd6e756c4ae43cc7ac03d0b1b (diff)
downloadllvm-5c490610a166a31b4a34c9fcaebbf744fd524049.tar.gz
llvm-5c490610a166a31b4a34c9fcaebbf744fd524049.tar.bz2
llvm-5c490610a166a31b4a34c9fcaebbf744fd524049.tar.xz
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.cpp52
1 files changed, 12 insertions, 40 deletions
diff --git a/lib/Analysis/LibCallAliasAnalysis.cpp b/lib/Analysis/LibCallAliasAnalysis.cpp
index afc60ddb84..971e6e7acc 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