null,
Canonical.intersection( betaY, betaHrn ),
predsTrue,
- edgeHrn.getTaints()
+ Canonical.unionORpreds(edgeHrn.getTaints(),edgeY.getTaints())
);
addEdgeOrMergeWithExisting( edgeNew );
}
if( (currentNode.isInVarNode() && entryNode.isInVarNode()) &&
- (currentNode.getSESEIdentifier()==entryNode.getSESEIdentifier()) ){
+ (currentNode.getSESEIdentifier()==entryNode.getSESEIdentifier()) &&
+ (currentNode.getVar().equals(entryNode.getVar())) ){
continue;
}
rblockRel,
rblockStatus
);
-
+
// 6th pass, not available analysis FOR VARIABLES!
methItr = descriptorsToAnalyze.iterator();
while (methItr.hasNext()) {
// for objects that may cause heap conflicts so the most
// efficient method to deal with conflict can be computed
// later
+
disjointAnalysisReach =
new DisjointAnalysis(state,
typeUtil,
}
}
+
+ private void writeFile(Set<FlatNew> sitesToFlag){
+
+ try{
+ BufferedWriter bw = new BufferedWriter( new FileWriter( "sitesToFlag.txt" ) );
+
+ for (Iterator iterator = sitesToFlag.iterator(); iterator.hasNext();) {
+ FlatNew fn = (FlatNew) iterator.next();
+ bw.write( fn+"\n" );
+ }
+ bw.close();
+ }catch(IOException e){
+
+ }
+
+ }
private void livenessAnalysisBackward(FlatSESEEnterNode fsen, boolean toplevel,
Hashtable<FlatSESEExitNode, Set<TempDescriptor>> liveout) {
// but the edge must remain uncovered.
changed = true;
+
+ if(seseLock.containsConflictNode(newNode)){
+ seseLock.addEdge(edge);
+ fineToCover.remove(edge);
+ break;
+ }
if (seseLock.isWriteNode(newNode)) {
if (newNode.isStallSiteNode()) {
} else {
return null;
}
-
+
+
int count = 0;
Set<ConflictEdge> edgeSet = newNode.getEdgeSet();
for (Iterator iterator = edgeSet.iterator(); iterator.hasNext();) {
count++;
}
}
+
+ if(conflictNodeSet.contains(newNode)){
+ count++;
+ }
- if (count == conflictNodeSet.size()) {
- // connected to all current nodes in group
- return newNode;
+ if(isWriteNode(newNode)){
+ if (count == conflictNodeSet.size()) {
+ // connected to all current nodes in group
+ return newNode;
+ }
+ }else{
+ // it is read node
+ int writeNodeCount=0;
+ for (Iterator iterator = conflictNodeSet.iterator(); iterator.hasNext();) {
+ ConflictNode node = (ConflictNode) iterator.next();
+ if(isWriteNode(node)){
+ writeNodeCount++;
+ }
+ }
+ if (count == writeNodeCount) {
+ // connected to all current write nodes in group
+ return newNode;
+ }
}
return null;