aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/SparcV9/ModuloScheduling
diff options
context:
space:
mode:
authorTanya Lattner <tonic@nondot.org>2005-02-16 04:00:59 +0000
committerTanya Lattner <tonic@nondot.org>2005-02-16 04:00:59 +0000
commitdb1680b2be5137ad6afa93354ac872cbea3c771c (patch)
treec3a715b3de277f7dfbab39ac1fdd4ae646f1f053 /lib/Target/SparcV9/ModuloScheduling
parent2ee51cbeb8f83f0b04d9611535151c801bbe3d4b (diff)
Fixed node deletion bug.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20207 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/SparcV9/ModuloScheduling')
-rw-r--r--lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp9
-rw-r--r--lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.cpp10
2 files changed, 13 insertions, 6 deletions
diff --git a/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp b/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp
index 376cbfdf09..9ac38b4dd3 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 15dc5b32ce..985743d8e8 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<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();