Verify that the CFG hasn't changed during invalidate().
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 30 Jul 2012 17:36:49 +0000 (17:36 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 30 Jul 2012 17:36:49 +0000 (17:36 +0000)
The MachineTraceMetrics analysis must be invalidated before modifying
the CFG. This will catch some of the violations of that rule.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160969 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineTraceMetrics.cpp

index 54c886bdda248b01688687df943fa27ceebc3988..d5ff128bf26bcf832d1aa2ccc44d53c339a3e727 100644 (file)
@@ -420,10 +420,15 @@ MachineTraceMetrics::Ensemble::invalidate(const MachineBasicBlock *BadMBB) {
       for (MachineBasicBlock::const_pred_iterator
            I = MBB->pred_begin(), E = MBB->pred_end(); I != E; ++I) {
         TraceBlockInfo &TBI = BlockInfo[(*I)->getNumber()];
-        if (TBI.hasValidHeight() && TBI.Succ == MBB) {
+        if (!TBI.hasValidHeight())
+          continue;
+        if (TBI.Succ == MBB) {
           TBI.invalidateHeight();
           WorkList.push_back(*I);
+          continue;
         }
+        // Verify that TBI.Succ is actually a *I successor.
+        assert((!TBI.Succ || (*I)->isSuccessor(TBI.Succ)) && "CFG changed");
       }
     } while (!WorkList.empty());
   }
@@ -441,10 +446,15 @@ MachineTraceMetrics::Ensemble::invalidate(const MachineBasicBlock *BadMBB) {
       for (MachineBasicBlock::const_succ_iterator
            I = MBB->succ_begin(), E = MBB->succ_end(); I != E; ++I) {
         TraceBlockInfo &TBI = BlockInfo[(*I)->getNumber()];
-        if (TBI.hasValidDepth() && TBI.Pred == MBB) {
+        if (!TBI.hasValidDepth())
+          continue;
+        if (TBI.Pred == MBB) {
           TBI.invalidateDepth();
           WorkList.push_back(*I);
+          continue;
         }
+        // Verify that TBI.Pred is actually a *I predecessor.
+        assert((!TBI.Pred || (*I)->isPredecessor(TBI.Pred)) && "CFG changed");
       }
     } while (!WorkList.empty());
   }