Remove 'static' from inline functions defined in header files.
[oota-llvm.git] / include / llvm / Support / PredIteratorCache.h
index 5e550e70a5975941032e5fa38f96ea27af455b39..bb66a8ed58b772d17836df55000e2ec0da3a637e 100644 (file)
@@ -16,6 +16,9 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallVector.h"
 
+#ifndef LLVM_SUPPORT_PREDITERATORCACHE_H
+#define LLVM_SUPPORT_PREDITERATORCACHE_H
+
 namespace llvm {
 
   /// PredIteratorCache - This class is an extremely trivial cache for
@@ -24,11 +27,12 @@ namespace llvm {
   class PredIteratorCache {
     /// BlockToPredsMap - Pointer to null-terminated list.
     DenseMap<BasicBlock*, BasicBlock**> BlockToPredsMap;
+    DenseMap<BasicBlock*, unsigned> BlockToPredCountMap;
 
     /// Memory - This is the space that holds cached preds.
     BumpPtrAllocator Memory;
   public:
-    
+
     /// GetPreds - Get a cached list for the null-terminated predecessor list of
     /// the specified block.  This can be used in a loop like this:
     ///   for (BasicBlock **PI = PredCache->GetPreds(BB); *PI; ++PI)
@@ -38,19 +42,29 @@ namespace llvm {
     BasicBlock **GetPreds(BasicBlock *BB) {
       BasicBlock **&Entry = BlockToPredsMap[BB];
       if (Entry) return Entry;
-      
+
       SmallVector<BasicBlock*, 32> PredCache(pred_begin(BB), pred_end(BB));
       PredCache.push_back(0); // null terminator.
       
+      BlockToPredCountMap[BB] = PredCache.size()-1;
+
       Entry = Memory.Allocate<BasicBlock*>(PredCache.size());
       std::copy(PredCache.begin(), PredCache.end(), Entry);
       return Entry;
     }
     
+    unsigned GetNumPreds(BasicBlock *BB) {
+      GetPreds(BB);
+      return BlockToPredCountMap[BB];
+    }
+
     /// clear - Remove all information.
     void clear() {
       BlockToPredsMap.clear();
+      BlockToPredCountMap.clear();
       Memory.Reset();
     }
   };
-} // end namespace llvm
\ No newline at end of file
+} // end namespace llvm
+
+#endif