} else {
FlatElementNode fen = (FlatElementNode) fn;
rhs = fen.getSrc();
- }
+ }
// add stall site
Hashtable<Taint, Set<Effect>> taint2Effects = effectsAnalysis.get(fn);
}
} while (changed);
+ HashSet<ConflictEdge> notCovered=new HashSet<ConflictEdge>();
do { // coarse
changed = false;
int type;
// new node has a coarse-grained edge to all fine-read, fine-write,
// parent
changed = true;
-
+
if (newNode.isInVarNode() && (!seseLock.hasSelfCoarseEdge(newNode))
&& seseLock.hasCoarseEdgeWithParentCoarse(newNode)) {
// this case can't be covered by this queue
coarseToCover.remove(edge);
+ notCovered.add(edge);
break;
}
+ if (seseLock.containsConflictNode(newNode)) {
+ seseLock.addEdge(edge);
+ coarseToCover.remove(edge);
+ break;
+ }
+
if (seseLock.hasSelfCoarseEdge(newNode)) {
// SCC
if (newNode.isStallSiteNode()) {
lockSet.add(seseLock);
toCover.clear();
+ coarseToCover.addAll(notCovered);
toCover.addAll(fineToCover);
toCover.addAll(coarseToCover);