summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp
diff options
context:
space:
mode:
authorTanya Lattner <tonic@nondot.org>2004-10-30 00:39:07 +0000
committerTanya Lattner <tonic@nondot.org>2004-10-30 00:39:07 +0000
commitddebd1eeaaa78cf6f6c3b7d2ac550922ba84db71 (patch)
treecd75ba8377163582de9ff2e5c0ab9c7b43655a1d /llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp
parentb56287dfd28408d3a9fe81c1a108f02b115afe88 (diff)
downloadbcm5719-llvm-ddebd1eeaaa78cf6f6c3b7d2ac550922ba84db71.tar.gz
bcm5719-llvm-ddebd1eeaaa78cf6f6c3b7d2ac550922ba84db71.zip
Fixed bug with infinite epilogues.
Fixed issue with generating the partial order. It now adds the nodes not in recurrences in sets for each connected component. llvm-svn: 17351
Diffstat (limited to 'llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp')
-rw-r--r--llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp b/llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp
index f4a6924d6b1..02cd8b7841b 100644
--- a/llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp
+++ b/llvm/lib/Target/SparcV9/ModuloScheduling/MSSchedule.cpp
@@ -63,6 +63,8 @@ bool MSSchedule::resourcesFree(MSchedGraphNode *node, int cycle) {
for(unsigned j=0; j < resources[i].size(); ++j) {
int resourceNum = resources[i][j];
+ DEBUG(std::cerr << "Attempting to schedule Resource Num: " << resourceNum << " in cycle: " << currentCycle << "\n");
+
//Check if this resource is available for this cycle
std::map<int, std::map<int,int> >::iterator resourcesForCycle = resourceNumPerCycle.find(currentCycle);
@@ -111,14 +113,15 @@ bool MSSchedule::resourcesFree(MSchedGraphNode *node, int cycle) {
//Check if this resource is available for this cycle
std::map<int, std::map<int,int> >::iterator resourcesForCycle = resourceNumPerCycle.find(oldCycle);
-
- for(unsigned j=0; j < resources[i].size(); ++j) {
- int resourceNum = resources[i][j];
- //remove from map
- std::map<int, int>::iterator resourceUse = resourcesForCycle->second.find(resourceNum);
- //assert if not in the map.. since it should be!
- //assert(resourceUse != resourcesForCycle.end() && "Resource should be in map!");
- --resourceUse->second;
+ if(resourcesForCycle != resourceNumPerCycle.end()) {
+ for(unsigned j=0; j < resources[i].size(); ++j) {
+ int resourceNum = resources[i][j];
+ //remove from map
+ std::map<int, int>::iterator resourceUse = resourcesForCycle->second.find(resourceNum);
+ //assert if not in the map.. since it should be!
+ //assert(resourceUse != resourcesForCycle.end() && "Resource should be in map!");
+ --resourceUse->second;
+ }
}
}
else
OpenPOWER on IntegriCloud