conflictType = updateConflictType(conflictType, ConflictGraph.COARSE_GRAIN_EDGE);
}
} else {
- return ConflictGraph.COARSE_GRAIN_EDGE;
+ if (state.RCR) {
+ // need coarse effects for RCR from just one pass
+ addCoarseEffect(nodeA, asA, strongUpdateA);
+ if (!nodeA.equals(nodeB)) {
+ addCoarseEffect(nodeB, asB, effectB);
+ }
+ conflictType=ConflictGraph.COARSE_GRAIN_EDGE;
+ } else {
+ return ConflictGraph.COARSE_GRAIN_EDGE;
+ }
}
}
}
}
} else {
- if (state.RCR) {
- //need coarse effects for RCR from just one pass
- addCoarseEffect(nodeA, asA, effectA);
- if (!nodeA.equals(nodeB)) {
- addCoarseEffect(nodeB, asB, effectB);
- }
- }
- return ConflictGraph.COARSE_GRAIN_EDGE;
+ if (state.RCR) {
+ // need coarse effects for RCR from just one pass
+ addCoarseEffect(nodeA, asA, effectA);
+ if (!nodeA.equals(nodeB)) {
+ addCoarseEffect(nodeB, asB, effectB);
+ }
+ conflictType=ConflictGraph.COARSE_GRAIN_EDGE;
+ } else {
+ return ConflictGraph.COARSE_GRAIN_EDGE;
+ }
}
}
}
WaitingElement newElement = new WaitingElement();
newElement.setQueueID(seseLock.getID());
newElement.setStatus(seseLock.getNodeType(node));
+ newElement.setTempDesc(node.getVar());
if (isFineElement(newElement.getStatus())) {
- newElement.setDynID(node.getVar().toString());
- newElement.setTempDesc(node.getVar());
+ newElement.setDynID(node.getVar().toString());
}
if (!waitingElementSet.contains(newElement)) {
waitingElementSet.add(newElement);
set.add(waitingElement);
map.put(new Integer(waitingElement.getQueueID()), set);
}
-
- if(!state.RCR){
- Set<Integer> keySet = map.keySet();
- for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
- Integer queueID = (Integer) iterator.next();
- Set<WaitingElement> queueWEset = map.get(queueID);
- refineQueue(queueID.intValue(), queueWEset, seseDS);
- }
+
+ Set<Integer> keySet = map.keySet();
+ for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+ Integer queueID = (Integer) iterator.next();
+ Set<WaitingElement> queueWEset = map.get(queueID);
+ refineQueue(queueID.intValue(), queueWEset, seseDS);
}
+
return seseDS;
}
SCCelement = waitingElement;
}
}
-
if (SCCelement != null) {
// if there is at lease one SCC element, just enqueue SCC and
// ignore others.
+ if(state.RCR){
+ // for rcr, we need to label all of coarse tempdescriptors
+ // here assume that all waiting elements are coarse
+ for (Iterator iterator = waitingElementSet.iterator(); iterator.hasNext();) {
+ WaitingElement waitingElement = (WaitingElement) iterator.next();
+ SCCelement.addTempDesc(waitingElement.getTempDesc());
+ if(waitingElement!=SCCelement){
+ waitingElement.setBogus(true);
+ refinedSet.add(waitingElement);
+ }
+ }
+ }
refinedSet.add(SCCelement);
- } else if (numCoarse == 1 && (numRead + numWrite + numCoarse == total)) {
+ } else if (numCoarse == 1 && (numRead + numWrite == total)) {
// if one is a coarse, the othere are reads/write, enqueue SCC.
WaitingElement we = new WaitingElement();
we.setQueueID(queueID);
refinedSet.add(we);
} else if (numCoarse == total) {
// if there are multiple coarses, enqueue just one coarse.
+ if(state.RCR){
+ // for rcr, we need to label all of coarse tempdescriptors
+ for (Iterator iterator = waitingElementSet.iterator(); iterator.hasNext();) {
+ WaitingElement waitingElement = (WaitingElement) iterator.next();
+ if(waitingElement!=coarseElement){
+ coarseElement.addTempDesc(waitingElement.getTempDesc());
+ waitingElement.setBogus(true);
+ refinedSet.add(waitingElement);
+ }
+ }
+ }
refinedSet.add(coarseElement);
} else if (numWrite == total || (numRead + numWrite) == total) {
// code generator is going to handle the case for multiple writes &
bw.close();
}
+
+ public Hashtable<String, ConflictNode> getId2cn() {
+ return id2cn;
+ }
}