Update computeArraySize() to use ComputeMultiple() to determine the array size associ...
[oota-llvm.git] / include / llvm / Analysis / ProfileInfo.h
index 16bfc1351c78f245afb119761082184a42b8c446..2a80f3d4c43a9b88d0e3f41a6355a3f642de0aff 100644 (file)
@@ -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