Fixed node deletion bug.
authorTanya Lattner <tonic@nondot.org>
Wed, 16 Feb 2005 04:00:59 +0000 (04:00 +0000)
committerTanya Lattner <tonic@nondot.org>
Wed, 16 Feb 2005 04:00:59 +0000 (04:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20207 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp
lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp

index 376cbfdf09d2b5aecd667c4ec01a988ca388e20e..9ac38b4dd3c6b4fb67714fa17c438e30be284471 100644 (file)
@@ -112,11 +112,12 @@ void MSchedGraph::addNode(const MachineInstr *MI,
 void MSchedGraph::deleteNode(MSchedGraphNode *node) {
   
   //Delete the edge to this node from all predecessors
-  for(MSchedGraphNode::pred_iterator P = node->pred_begin(), PE = node->pred_end();
-      P != PE; ++P) {
-    (*P)->deleteSuccessor(node);
+  while(node->pred_size() > 0) {
+    //DEBUG(std::cerr << "Delete edge from: " << **P << " to " << *node << "\n"); 
+    MSchedGraphNode *pred = *(node->pred_begin());
+    pred->deleteSuccessor(node);
   }
-
   //Remove this node from the graph
   GraphMap.erase(node->getInst());
 
index 15dc5b32ce6aad3539ffbdaade4978d835b1e442..985743d8e8b36da94e18f6e9d50e6f94600ee2ac 100644 (file)
@@ -77,6 +77,8 @@ namespace llvm {
   Statistic<> MSLoops("modulosched-schedLoops", "Number of loops successfully modulo-scheduled");
   Statistic<> IncreasedII("modulosched-increasedII", "Number of times we had to increase II");
   Statistic<> SingleBBLoops("modulosched-singeBBLoops", "Number of single basic block loops");
+  Statistic<> NoSched("modulosched-noSched", "No schedule");
+  Statistic<> SameStage("modulosched-sameStage", "Max stage is 0");
 
   template<>
   struct DOTGraphTraits<MSchedGraph*> : public DefaultDOTGraphTraits {
@@ -252,9 +254,13 @@ bool ModuloSchedulingPass::runOnFunction(Function &F) {
       ++MSLoops;
       Changed = true;
     }
-    else
+    else {
+      if(!haveSched)
+       ++NoSched;
+      else
+       ++SameStage;
       DEBUG(std::cerr << "Max stage is 0, so no change in loop or reached cap\n");
-    
+    }
     //Clear out our maps for the next basic block that is processed
     nodeToAttributesMap.clear();
     partialOrder.clear();