From db1680b2be5137ad6afa93354ac872cbea3c771c Mon Sep 17 00:00:00 2001 From: Tanya Lattner Date: Wed, 16 Feb 2005 04:00:59 +0000 Subject: [PATCH] Fixed node deletion bug. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20207 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp | 9 +++++---- .../SparcV9/ModuloScheduling/ModuloScheduling.cpp | 10 ++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp b/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp index 376cbfdf09d..9ac38b4dd3c 100644 --- a/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp +++ b/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp @@ -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()); diff --git a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp index 15dc5b32ce6..985743d8e8b 100644 --- a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp +++ b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp @@ -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 : 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(); -- 2.34.1