Add a flag to disable jump table generation (all
[oota-llvm.git] / include / llvm / Pass.h
index 9dc8643343def079626982e93392a70a3f70502f..305ac37b17d80d5d925d88d121f3492f4a561584 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -32,8 +32,7 @@
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Streams.h"
 #include <vector>
-#include <deque>
-#include <map>
+#include <utility>
 #include <iosfwd>
 #include <cassert>
 
@@ -66,8 +65,6 @@ enum PassManagerType {
   PMT_Last
 };
 
-typedef enum PassManagerType PassManagerType;
-
 //===----------------------------------------------------------------------===//
 /// Pass interface - Implemented by all 'passes'.  Subclass this if you are an
 /// interprocedural optimization or you do not fit into any of the more
@@ -76,7 +73,6 @@ typedef enum PassManagerType PassManagerType;
 class Pass {
   AnalysisResolver *Resolver;  // Used to resolve analysis
   intptr_t PassID;
-
   // AnalysisImpls - This keeps track of which passes implement the interfaces
   // that are required by the current pass (to implement getAnalysis()).
   //
@@ -91,9 +87,7 @@ public:
 
   /// getPassName - Return a nice clean name for a pass.  This usually
   /// implemented in terms of the name that is registered by one of the
-  /// Registration templates, but can be overloaded directly, and if nothing
-  /// else is available, C++ RTTI will be consulted to get a SOMEWHAT
-  /// intelligible name for the pass.
+  /// Registration templates, but can be overloaded directly.
   ///
   virtual const char *getPassName() const;
 
@@ -102,12 +96,6 @@ public:
   ///
   const PassInfo *getPassInfo() const;
 
-  /// runPass - Run this pass, returning true if a modification was made to the
-  /// module argument.  This should be implemented by all concrete subclasses.
-  ///
-  virtual bool runPass(Module &M) { return false; }
-  virtual bool runPass(BasicBlock&) { return false; }
-
   /// print - Print out the internal state of the pass.  This is called by
   /// Analyze to print out the contents of an analysis.  Otherwise it is not
   /// necessary to implement this method.  Beware that the module pointer MAY be
@@ -121,10 +109,10 @@ public:
 
   /// Each pass is responsible for assigning a pass manager to itself.
   /// PMS is the stack of available pass manager. 
-  virtual void assignPassManager(PMStack &PMS
-                                 PassManagerType = PMT_Unknown) {}
+  virtual void assignPassManager(PMStack &, 
+                                 PassManagerType = PMT_Unknown) {}
   /// Check if available pass managers are suitable for this pass or not.
-  virtual void preparePassManager(PMStack &PMS) {}
+  virtual void preparePassManager(PMStack &) {}
   
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const {
@@ -137,7 +125,6 @@ public:
     Resolver = AR; 
   }
   inline AnalysisResolver *getResolver() { 
-    assert (Resolver && "Resolver is not set");
     return Resolver; 
   }
 
@@ -146,7 +133,7 @@ public:
   /// particular analysis result to this function, it can then use the
   /// getAnalysis<AnalysisType>() function, below.
   ///
-  virtual void getAnalysisUsage(AnalysisUsage &Info) const {
+  virtual void getAnalysisUsage(AnalysisUsage &) const {
     // By default, no analysis results are used, all are invalidated.
   }
 
@@ -230,9 +217,6 @@ public:
   /// being operated on.
   virtual bool runOnModule(Module &M) = 0;
 
-  virtual bool runPass(Module &M) { return runOnModule(M); }
-  virtual bool runPass(BasicBlock&) { return false; }
-
   virtual void assignPassManager(PMStack &PMS, 
                                  PassManagerType T = PMT_ModulePassManager);
 
@@ -265,10 +249,11 @@ public:
 
   /// ImmutablePasses are never run.
   ///
-  bool runOnModule(Module &M) { return false; }
+  bool runOnModule(Module &) { return false; }
 
   explicit ImmutablePass(intptr_t pid) : ModulePass(pid) {}
-  explicit ImmutablePass(const void *pid) : ModulePass(pid) {}
+  explicit ImmutablePass(const void *pid) 
+  : ModulePass(pid) {}
   
   // Force out-of-line virtual method.
   virtual ~ImmutablePass();
@@ -291,7 +276,7 @@ public:
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///
-  virtual bool doInitialization(Module &M) { return false; }
+  virtual bool doInitialization(Module &) { return false; }
 
   /// runOnFunction - Virtual method overriden by subclasses to do the
   /// per-function processing of the pass.
@@ -301,7 +286,7 @@ public:
   /// doFinalization - Virtual method overriden by subclasses to do any post
   /// processing needed after all passes have run.
   ///
-  virtual bool doFinalization(Module &M) { return false; }
+  virtual bool doFinalization(Module &) { return false; }
 
   /// runOnModule - On a module, we run this pass by initializing,
   /// ronOnFunction'ing once for every function in the module, then by
@@ -343,12 +328,12 @@ public:
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///
-  virtual bool doInitialization(Module &M) { return false; }
+  virtual bool doInitialization(Module &) { return false; }
 
   /// doInitialization - Virtual method overridden by BasicBlockPass subclasses
   /// to do any necessary per-function initialization.
   ///
-  virtual bool doInitialization(Function &F) { return false; }
+  virtual bool doInitialization(Function &) { return false; }
 
   /// runOnBasicBlock - Virtual method overriden by subclasses to do the
   /// per-basicblock processing of the pass.
@@ -358,12 +343,12 @@ public:
   /// doFinalization - Virtual method overriden by BasicBlockPass subclasses to
   /// do any post processing needed after all passes have run.
   ///
-  virtual bool doFinalization(Function &F) { return false; }
+  virtual bool doFinalization(Function &) { return false; }
 
   /// doFinalization - Virtual method overriden by subclasses to do any post
   /// processing needed after all passes have run.
   ///
-  virtual bool doFinalization(Module &M) { return false; }
+  virtual bool doFinalization(Module &) { return false; }
 
 
   // To run this pass on a function, we simply call runOnBasicBlock once for
@@ -371,12 +356,6 @@ public:
   //
   bool runOnFunction(Function &F);
 
-  /// To run directly on the basic block, we initialize, runOnBasicBlock, then
-  /// finalize.
-  ///
-  virtual bool runPass(Module &M) { return false; }
-  virtual bool runPass(BasicBlock &BB);
-
   virtual void assignPassManager(PMStack &PMS, 
                                  PassManagerType T = PMT_BasicBlockPassManager);
 
@@ -386,33 +365,6 @@ public:
   }
 };
 
-/// PMStack
-/// Top level pass manager (see PasManager.cpp) maintains active Pass Managers 
-/// using PMStack. Each Pass implements assignPassManager() to connect itself
-/// with appropriate manager. assignPassManager() walks PMStack to find
-/// suitable manager.
-///
-/// PMStack is just a wrapper around standard deque that overrides pop() and
-/// push() methods.
-class PMStack {
-public:
-  typedef std::deque<PMDataManager *>::reverse_iterator iterator;
-  iterator begin() { return S.rbegin(); }
-  iterator end() { return S.rend(); }
-
-  void handleLastUserOverflow();
-
-  void pop();
-  inline PMDataManager *top() { return S.back(); }
-  void push(Pass *P);
-  inline bool empty() { return S.empty(); }
-
-  void dump();
-private:
-  std::deque<PMDataManager *> S;
-};
-
-
 /// If the user specifies the -time-passes argument on an LLVM tool command line
 /// then the value of this boolean will be true, otherwise false.
 /// @brief This is the storage for the -time-passes option.