Rename some GC classes so that their roll will hopefully be clearer.
[oota-llvm.git] / include / llvm / PassAnalysisSupport.h
index 75434a25ef2bbae96cdaf95222e0ad119fbbffc1..c6ed179af61f9a3516a562cede022d84d9752f42 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.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -20,6 +20,7 @@
 #define LLVM_PASS_ANALYSIS_SUPPORT_H
 
 #include <vector>
+#include "llvm/ADT/SmallVector.h"
 
 namespace llvm {
 
@@ -34,9 +35,14 @@ namespace llvm {
 // Pass infrastructure through the getAnalysisUsage virtual function.
 //
 class AnalysisUsage {
+public:
+  typedef SmallVector<AnalysisID, 32> VectorType;
+
+private:
   // Sets of analyses required and preserved by a pass
-  std::vector<AnalysisID> Required, RequiredTransitive, Preserved;
+  VectorType Required, RequiredTransitive, Preserved;
   bool PreservesAll;
+
 public:
   AnalysisUsage() : PreservesAll(false) {}
 
@@ -44,24 +50,26 @@ public:
   // for a pass.
   //
   AnalysisUsage &addRequiredID(AnalysisID ID) {
+    assert(ID && "Pass class not registered!");
     Required.push_back(ID);
     return *this;
   }
   template<class PassClass>
   AnalysisUsage &addRequired() {
-    assert(Pass::getClassPassInfo<PassClass>() && "Pass class not registered!");
-    Required.push_back(Pass::getClassPassInfo<PassClass>());
-    return *this;
+    return addRequiredID(Pass::getClassPassInfo<PassClass>());
   }
 
-  template<class PassClass>
-  AnalysisUsage &addRequiredTransitive() {
-    AnalysisID ID = Pass::getClassPassInfo<PassClass>();
+  AnalysisUsage &addRequiredTransitiveID(AnalysisID ID) {
     assert(ID && "Pass class not registered!");
     Required.push_back(ID);
     RequiredTransitive.push_back(ID);
     return *this;
   }
+  template<class PassClass>
+  AnalysisUsage &addRequiredTransitive() {
+    AnalysisID ID = Pass::getClassPassInfo<PassClass>();
+    return addRequiredTransitiveID(ID);
+  }
 
   // addPreserved - Add the specified ID to the set of analyses preserved by
   // this pass
@@ -93,11 +101,11 @@ public:
   ///
   void setPreservesCFG();
 
-  const std::vector<AnalysisID> &getRequiredSet() const { return Required; }
-  const std::vector<AnalysisID> &getRequiredTransitiveSet() const {
+  const VectorType &getRequiredSet() const { return Required; }
+  const VectorType &getRequiredTransitiveSet() const {
     return RequiredTransitive;
   }
-  const std::vector<AnalysisID> &getPreservedSet() const { return Preserved; }
+  const VectorType &getPreservedSet() const { return Preserved; }
 };
 
 //===----------------------------------------------------------------------===//