RegionInfo: Update RegionInfo after a BB was split.
authorTobias Grosser <grosser@fim.uni-passau.de>
Wed, 13 Oct 2010 05:54:13 +0000 (05:54 +0000)
committerTobias Grosser <grosser@fim.uni-passau.de>
Wed, 13 Oct 2010 05:54:13 +0000 (05:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116398 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/RegionInfo.h
lib/Analysis/RegionInfo.cpp

index f982b9f9ff32d164299b00b28c675f91a9c822ca..4e7d303863b880775ead46353a3b1d13d491ad9c 100644 (file)
@@ -638,6 +638,12 @@ public:
     return TopLevelRegion;
   }
 
+  /// @brief Update RegionInfo after a basic block was split.
+  ///
+  /// @param NewBB The basic block that was created before OldBB.
+  /// @param OldBB The old basic block.
+  void splitBlock(BasicBlock* NewBB, BasicBlock *OldBB);
+
   /// @brief Clear the Node Cache for all Regions.
   ///
   /// @see Region::clearNodeCache()
index 2576d4ee14a0f446f7131ff91fe39ea1b60fd962..4a0a9a3ccecdcab72165cbff207737ad43f0d28e 100644 (file)
@@ -807,6 +807,19 @@ RegionInfo::getCommonRegion(SmallVectorImpl<BasicBlock*> &BBs) const {
   return ret;
 }
 
+void RegionInfo::splitBlock(BasicBlock* NewBB, BasicBlock *OldBB)
+{
+  Region *R = getRegionFor(OldBB);
+  setRegionFor(NewBB, R);
+
+  while (R->getEntry() == OldBB && R->getParent()) {
+    R->replaceEntry(NewBB);
+    R = R->getParent();
+  }
+
+  setRegionFor(OldBB, R);
+}
+
 char RegionInfo::ID = 0;
 INITIALIZE_PASS_BEGIN(RegionInfo, "regions",
                 "Detect single entry single exit regions", true, true)