cleanups pointed out by duncan
[oota-llvm.git] / lib / Analysis / LibCallAliasAnalysis.cpp
index 2fd17cfacc5741d0ae44b008ef9022b9fdea18fd..74196592989025b784f4602ca12adc62e8f4db1c 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
+#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;
-    
-    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);
-  };
   
-  // Register this pass...
-  char LibCallAliasAnalysis::ID = 0;
-  RegisterPass<LibCallAliasAnalysis>
-  X("libcall-aa", "LibCall Alias Analysis", false, true);
+// Register this pass...
+char LibCallAliasAnalysis::ID = 0;
+static RegisterPass<LibCallAliasAnalysis>
+X("libcall-aa", "LibCall Alias Analysis", false, true);
   
-  // Declare that we implement the AliasAnalysis interface
-  RegisterAnalysisGroup<AliasAnalysis> Y(X);
-}  // End of llvm namespace
+// Declare that we implement the AliasAnalysis interface
+static RegisterAnalysisGroup<AliasAnalysis> Y(X);
 
 FunctionPass *llvm::createLibCallAliasAnalysisPass(LibCallInfo *LCI) {
   return new LibCallAliasAnalysis(LCI);
 }
 
+LibCallAliasAnalysis::~LibCallAliasAnalysis() {
+  delete LCI;
+}
+
+void LibCallAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
+  AliasAnalysis::getAnalysisUsage(AU);
+  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
@@ -155,8 +125,8 @@ LibCallAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
   
   // If this is a direct call to a function that LCI knows about, get the
   // information about the runtime function.
-  if (Function *F = CS.getCalledFunction()) {
-    if (LCI && F->isDeclaration()) {
+  if (LCI) {
+    if (Function *F = CS.getCalledFunction()) {
       if (const LibCallFunctionInfo *FI = LCI->getFunctionInfo(F)) {
         MRInfo = ModRefResult(MRInfo & AnalyzeLibCallDetails(FI, CS, P, Size));
         if (MRInfo == NoModRef) return NoModRef;