output.print(generateTemp(fm,fc.getReturnTemp())+"=");
/* Do we need to do virtual dispatch? */
+ if (!md.isStatic()&&md.getReturnType()!=null&&fc.getThis().getType().getClassDesc()==null) {
+ System.out.println(fm);
+ System.out.println(md);
+ System.out.println(fc);
+ System.out.println(fm.printMethod());
+ }
+
if (md.isStatic()||md.getReturnType()==null||singleCall(fc.getThis().getType().getClassDesc(),md)||fc.getSuper()) {
//no
output.print(cn.getSafeSymbol()+md.getSafeSymbol()+"_"+mdstring);
}
public void addChecker(Alloc a, FlatNode fn, TempDescriptor tmp, SMFEState state, EffectsTable et, String prefix, int depth, int weakID) {
+ if (depth>30) {
+ System.out.println(fn+" "+state+" "+state.toStringDOT());
+ }
+
insertEntriesIntoHashStructureNew(fn, tmp, et, a, prefix, depth, weakID);
int pdepth = depth+1;
if(et.hasWriteConflict(a)) {
cFile.append(" int tmpkey" + depth + " = rcr_generateKey(" + prefix + ");\n");
- if (et.leadsToConflict(a))
+ if (et.conflictDereference(a))
cFile.append(" int tmpvar" + depth + " = rcr_WTWRITEBINCASE(allHashStructures[" + weakID + "], tmpkey" + depth + ", " + tasksrc + strrcr + index + ");\n");
else
cFile.append(" int tmpvar" + depth + " = rcr_WRITEBINCASE(allHashStructures["+ weakID + "], tmpkey" + depth + ", " + tasksrc + strrcr + index + ");\n");
} else if(et.hasReadConflict(a)) {
cFile.append(" int tmpkey" + depth + " = rcr_generateKey(" + prefix + ");\n");
- if (et.leadsToConflict(a))
+ if (et.conflictDereference(a))
cFile.append(" int tmpvar" + depth + " = rcr_WTREADBINCASE(allHashStructures[" + weakID + "], tmpkey" + depth + ", " + tasksrc + strrcr + index + ");\n");
else
cFile.append(" int tmpvar" + depth + " = rcr_READBINCASE(allHashStructures["+ weakID + "], tmpkey" + depth + ", " + tasksrc + strrcr + index + ");\n");
}
}
- public boolean leadsToConflict(Alloc a) {
+ public boolean conflictDereference(Alloc a) {
for(Effect e:getEffects(a)) {
- if (!state.transitionsTo(e).isEmpty())
+ if (!state.transitionsTo(e).isEmpty()&&state.getConflicts().contains(e))
return true;
}
return false;