Update computeArraySize() to use ComputeMultiple() to determine the array size associ...
[oota-llvm.git] / include / llvm / Analysis / ProfileInfo.h
index d8b90354929e58b10f25a73ec2d81eda9495b7b8..2a80f3d4c43a9b88d0e3f41a6355a3f642de0aff 100644 (file)
@@ -22,7 +22,6 @@
 #define LLVM_ANALYSIS_PROFILEINFO_H
 
 #include "llvm/BasicBlock.h"
-#include "llvm/Support/raw_ostream.h"
 #include <cassert>
 #include <string>
 #include <map>
@@ -30,6 +29,7 @@
 namespace llvm {
   class Function;
   class Pass;
+  class raw_ostream;
 
   /// ProfileInfo Class - This class holds and maintains profiling
   /// information for some unit of code.
@@ -63,8 +63,13 @@ namespace llvm {
 
     // getFunction() - Returns the Function for an Edge, checking for validity.
     static const Function* getFunction(Edge e) {
-      assert(e.second && "Invalid ProfileInfo::Edge");
-      return e.second->getParent();
+      if (e.first) {
+        return e.first->getParent();
+      } else if (e.second) {
+        return e.second->getParent();
+      }
+      assert(0 && "Invalid ProfileInfo::Edge");
+      return (const Function*)0;
     }
 
     // getEdge() - Creates an Edge from two BasicBlocks.
@@ -97,7 +102,26 @@ namespace llvm {
     //===------------------------------------------------------------------===//
     /// Analysis Update Methods
     ///
+    void removeBlock(const BasicBlock *BB) {
+      std::map<const Function*, BlockCounts>::iterator J =
+        BlockInformation.find(BB->getParent());
+      if (J == BlockInformation.end()) return;
 
+      J->second.erase(BB);
+    }
+
+    void removeEdge(Edge e) {
+      std::map<const Function*, EdgeWeights>::iterator J =
+        EdgeInformation.find(getFunction(e));
+      if (J == EdgeInformation.end()) return;
+
+      J->second.erase(e);
+    }
+
+    void splitEdge(const BasicBlock *FirstBB, const BasicBlock *SecondBB,
+                   const BasicBlock *NewBB, bool MergeIdenticalEdges = false);
+
+    void replaceAllUses(const BasicBlock *RmBB, const BasicBlock *DestBB);
   };
 
   /// createProfileLoaderPass - This function returns a Pass that loads the
@@ -105,16 +129,7 @@ namespace llvm {
   /// it available to the optimizers.
   Pass *createProfileLoaderPass(const std::string &Filename);
 
-  static raw_ostream& operator<<(raw_ostream &O,
-                                 ProfileInfo::Edge E) ATTRIBUTE_USED;
-  static raw_ostream& operator<<(raw_ostream &O,
-                                 ProfileInfo::Edge E) {
-    O<<"(";
-    O<<(E.first?E.first->getNameStr():"0");
-    O<<",";
-    O<<(E.second?E.second->getNameStr():"0");
-    return O<<")";
-  }
+  raw_ostream& operator<<(raw_ostream &O, ProfileInfo::Edge E);
 
 } // End llvm namespace