[PATCH] D11872: [RegionInfo] Verify getRegionFor

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 08:17:27 PDT 2015


This revision was automatically updated to reflect the committed changes.
Closed by commit rL244611: [RegionInfo] Verify getRegionFor (authored by Meinersbur).

Changed prior to commit:
  http://reviews.llvm.org/D11872?vs=31669&id=31819#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D11872

Files:
  llvm/trunk/include/llvm/Analysis/RegionInfo.h
  llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h

Index: llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h
===================================================================
--- llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h
+++ llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h
@@ -544,6 +544,21 @@
 }
 
 template <class Tr>
+void RegionInfoBase<Tr>::verifyBBMap(const RegionT *R) const {
+  assert(R && "Re must be non-null");
+  for (auto I = R->element_begin(), E = R->element_end(); I != E; ++I) {
+    if (I->isSubRegion()) {
+      const RegionT *SR = I->template getNodeAs<RegionT>();
+      verifyBBMap(SR);
+    } else {
+      BlockT *BB = I->template getNodeAs<BlockT>();
+      if (getRegionFor(BB) != R)
+        llvm_unreachable("BB map does not match region nesting");
+    }
+  }
+}
+
+template <class Tr>
 bool RegionInfoBase<Tr>::isCommonDomFrontier(BlockT *BB, BlockT *entry,
                                              BlockT *exit) const {
   for (PredIterTy PI = InvBlockTraits::child_begin(BB),
@@ -788,7 +803,14 @@
 
 template <class Tr>
 void RegionInfoBase<Tr>::verifyAnalysis() const {
+  // Do only verify regions if explicitely activated using XDEBUG or
+  // -verify-region-info
+  if (!RegionInfoBase<Tr>::VerifyRegionInfo)
+    return;
+
   TopLevelRegion->verifyRegionNest();
+
+  verifyBBMap(TopLevelRegion);
 }
 
 // Region pass manager support.
Index: llvm/trunk/include/llvm/Analysis/RegionInfo.h
===================================================================
--- llvm/trunk/include/llvm/Analysis/RegionInfo.h
+++ llvm/trunk/include/llvm/Analysis/RegionInfo.h
@@ -687,6 +687,11 @@
   /// Map every BB to the smallest region, that contains BB.
   BBtoRegionMap BBtoRegion;
 
+  // Check whether the entries of BBtoRegion for the BBs of region
+  // SR are correct. Triggers an assertion if not. Calls itself recursively for
+  // subregions.
+  void verifyBBMap(const RegionT *SR) const;
+
   // Returns true if BB is in the dominance frontier of
   // entry, because it was inherited from exit. In the other case there is an
   // edge going from entry to BB without passing exit.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11872.31819.patch
Type: text/x-patch
Size: 2080 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150811/605c1ec3/attachment.bin>


More information about the llvm-commits mailing list