Add missing override statements in ScalarEvolution.h. NFC
[oota-llvm.git] / include / llvm / Analysis / ScalarEvolutionAliasAnalysis.h
index a8bcbde479d3f6d1fdd24f01a813baf375fc9ca7..7bbbf55620479f5843c581a544d62d4d330f06b2 100644 (file)
@@ -17,7 +17,6 @@
 #include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/Analysis/ScalarEvolutionExpressions.h"
 #include "llvm/IR/Function.h"
-#include "llvm/IR/Metadata.h"
 #include "llvm/IR/Module.h"
 #include "llvm/Pass.h"
 
@@ -25,38 +24,55 @@ namespace llvm {
 
 /// A simple alias analysis implementation that uses ScalarEvolution to answer
 /// queries.
-class ScalarEvolutionAliasAnalysis : public FunctionPass, public AliasAnalysis {
-  ScalarEvolution *SE;
+class SCEVAAResult : public AAResultBase<SCEVAAResult> {
+  ScalarEvolution &SE;
 
 public:
-  static char ID; // Class identification, replacement for typeinfo
-  ScalarEvolutionAliasAnalysis() : FunctionPass(ID), SE(nullptr) {
-    initializeScalarEvolutionAliasAnalysisPass(
-        *PassRegistry::getPassRegistry());
-  }
-
-  /// This method is used when a pass implements an analysis interface through
-  /// multiple inheritance.
-  ///
-  /// If needed, it should override this to adjust the this pointer as needed
-  /// for the specified pass info.
-  void *getAdjustedAnalysisPointer(AnalysisID PI) override {
-    if (PI == &AliasAnalysis::ID)
-      return (AliasAnalysis *)this;
-    return this;
-  }
+  explicit SCEVAAResult(const TargetLibraryInfo &TLI, ScalarEvolution &SE)
+      : AAResultBase(TLI), SE(SE) {}
+  SCEVAAResult(SCEVAAResult &&Arg) : AAResultBase(std::move(Arg)), SE(Arg.SE) {}
 
-private:
-  void getAnalysisUsage(AnalysisUsage &AU) const override;
-  bool runOnFunction(Function &F) override;
-  AliasResult alias(const MemoryLocation &LocA,
-                    const MemoryLocation &LocB) override;
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
 
+private:
   Value *GetBaseValue(const SCEV *S);
 };
 
-/// Creates an instance of \c ScalarEvolutionAliasAnalysis.
-FunctionPass *createScalarEvolutionAliasAnalysisPass();
+/// Analysis pass providing a never-invalidated alias analysis result.
+class SCEVAA {
+public:
+  typedef SCEVAAResult Result;
+
+  /// \brief Opaque, unique identifier for this analysis pass.
+  static void *ID() { return (void *)&PassID; }
+
+  SCEVAAResult run(Function &F, AnalysisManager<Function> *AM);
+
+  /// \brief Provide access to a name for this pass for debugging purposes.
+  static StringRef name() { return "SCEVAA"; }
+
+private:
+  static char PassID;
+};
+
+/// Legacy wrapper pass to provide the SCEVAAResult object.
+class SCEVAAWrapperPass : public FunctionPass {
+  std::unique_ptr<SCEVAAResult> Result;
+
+public:
+  static char ID;
+
+  SCEVAAWrapperPass();
+
+  SCEVAAResult &getResult() { return *Result; }
+  const SCEVAAResult &getResult() const { return *Result; }
+
+  bool runOnFunction(Function &F) override;
+  void getAnalysisUsage(AnalysisUsage &AU) const override;
+};
+
+/// Creates an instance of \c SCEVAAWrapperPass.
+FunctionPass *createSCEVAAWrapperPass();
 
 }