From: bdemsky Date: Mon, 17 Sep 2007 20:19:15 +0000 (+0000) Subject: bug fix for my bug that Alokika found X-Git-Tag: preEdgeChange~429 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c17e285ccafd31891aa26bf1a63d46996155a091;p=IRC.git bug fix for my bug that Alokika found --- diff --git a/Robust/src/Analysis/Locality/GenerateConversions.java b/Robust/src/Analysis/Locality/GenerateConversions.java index f9c59f77..9b987c99 100644 --- a/Robust/src/Analysis/Locality/GenerateConversions.java +++ b/Robust/src/Analysis/Locality/GenerateConversions.java @@ -31,15 +31,14 @@ public class GenerateConversions { } /* At the end of an atomic block, we need to convert any global - * references that will be used again into OID's */ + * references that will be used again into OID's. */ private void converttoOid(LocalityBinding lb) { Hashtable atomictab=locality.getAtomic(lb); Hashtable> temptab=locality.getNodeTempInfo(lb); MethodDescriptor md=lb.getMethod(); FlatMethod fm=state.getMethodFlat(md); - - Hashtable> nodetotnpair=new Hashtable>(); + Hashtable> nodetotnpair=new Hashtable>(); Hashtable> nodetoconvs=new Hashtable>(); Set toprocess=fm.getNodeSet(); @@ -52,20 +51,27 @@ public class GenerateConversions { List reads=Arrays.asList(fn.readsTemps()); List writes=Arrays.asList(fn.writesTemps()); - + if (!isatomic&&fn.kind()==FKind.FlatAtomicExitNode &&!nodetoconvs.containsKey(fn)) nodetoconvs.put(fn, new HashSet()); - - + HashSet tempset=new HashSet(); + for(int i=0;i prevset=nodetotnpair.get(fnprev); for(Iterator it=prevset.iterator();it.hasNext();) { TempNodePair tnp=it.next(); + if (fn.kind()==FKind.FlatGlobalConvNode&& + ((FlatGlobalConvNode)fn).getLocality()!=lb) { + //ignore this node + tempset.add(tnp); + continue; + } if (reads.contains(tnp.getTemp())&&tnp.getNode()!=null) { //Value actually is read... nodetoconvs.get(tnp.getNode()).add(tnp.getTemp()); @@ -85,7 +91,8 @@ public class GenerateConversions { } } if (isatomic) { - //if this is in an atomic block, record temps that are written to + /* If this is in an atomic block, record temps that + * are written to.*/ /* NOTE: If this compiler is changed to maintain * OID/Ptr's in variables, then we need to use all @@ -93,8 +100,9 @@ public class GenerateConversions { * ones converted by globalconvnode*/ if (fn.kind()!=FKind.FlatGlobalConvNode|| - ((FlatGlobalConvNode)fn).getLocality()==lb) - //If globalconvnode, make sure we have the right locality + ((FlatGlobalConvNode)fn).getLocality()==lb) { + /*If globalconvnode, make sure we have the right + * locality. */ for(Iterator writeit=writes.iterator();writeit.hasNext();) { TempDescriptor wrtmp=writeit.next(); if (nodetemptab.get(wrtmp)==LocalityAnalysis.GLOBAL) { @@ -102,6 +110,7 @@ public class GenerateConversions { tempset.add(tnp); } } + } } if (!nodetotnpair.containsKey(fn)||!nodetotnpair.get(fn).equals(tempset)) { //changes to set, so enqueue next nodes @@ -125,6 +134,7 @@ public class GenerateConversions { FlatGlobalConvNode fgcn=new FlatGlobalConvNode(tempit.next(), lb, false); atomictab.put(fgcn, atomictab.get(fn)); temptab.put(fgcn, (Hashtable) temptab.get(fn).clone()); + for(int i=0;i0) { //build set of transaction temps use by next nodes HashSet transtemps=new HashSet(); @@ -189,7 +199,7 @@ public class GenerateConversions { atomictab.get(fn.getPrev(0)).intValue()==0) { //sanity check assert(fn.kind()==FKind.FlatAtomicEnterNode); - + //insert calls here... Set tempset=nodetotranstemps.get(fn); for(Iterator tempit=tempset.iterator();tempit.hasNext();) { diff --git a/Robust/src/Analysis/Locality/TempNodePair.java b/Robust/src/Analysis/Locality/TempNodePair.java index ba3828a4..b590d907 100644 --- a/Robust/src/Analysis/Locality/TempNodePair.java +++ b/Robust/src/Analysis/Locality/TempNodePair.java @@ -38,4 +38,11 @@ public class TempNodePair { public int hashCode() { return tmp.hashCode(); } + + public String toString() { + if (getNode()==null) + return ""; + else + return "<"+getNode()+","+getTemp()+">"; + } } diff --git a/Robust/src/Analysis/TaskStateAnalysis/EGTaskNode.java b/Robust/src/Analysis/TaskStateAnalysis/EGTaskNode.java index eccb83d1..e6c9ac32 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/EGTaskNode.java +++ b/Robust/src/Analysis/TaskStateAnalysis/EGTaskNode.java @@ -8,8 +8,6 @@ import Util.GraphNode; public class EGTaskNode extends TaskNode { private boolean source=false; - private int loopmarker=0; - private boolean tomention=true; private FlagState fs; private FlagState postfs; private TaskDescriptor td; @@ -61,24 +59,6 @@ public class EGTaskNode extends TaskNode { return uid; } - public void doSelfLoopMarking(){ - loopmarker=1; - } - - public void doLoopMarking(){ - loopmarker=2; - } - - public boolean isSelfLoop(){ - if (loopmarker==1) return true; - else return false; - } - - public boolean isLoop(){ - if (loopmarker==2) return true; - else return false; - } - public boolean isMultipleParams(){ return getTD()!=null&&getTD().numParameters()>1; } @@ -93,12 +73,4 @@ public class EGTaskNode extends TaskNode { public FlagState getFS(){ return fs; } - - public void dontMention(){ - tomention = false; - } - - public boolean toMention(){ - return tomention; - } } diff --git a/Robust/src/Analysis/TaskStateAnalysis/ExecutionGraph.java b/Robust/src/Analysis/TaskStateAnalysis/ExecutionGraph.java index f9296418..ef6e25fc 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/ExecutionGraph.java +++ b/Robust/src/Analysis/TaskStateAnalysis/ExecutionGraph.java @@ -82,8 +82,6 @@ public class ExecutionGraph { if (map.containsKey(fedge)) return map.get(fedge); EGTaskNode egnode=new EGTaskNode(fedge.getLabel(), (FlagState) fedge.getSource(), fedge.getTask(), fedge.getIndex(), (FlagState) fedge.getTarget()); - if (fedge.getTarget()==fedge.getSource()) - egnode.doSelfLoopMarking(); map.put(fedge, egnode); nodes.add(egnode); return egnode; @@ -133,7 +131,6 @@ public class ExecutionGraph { for(Iterator it1 = v.iterator(); it1.hasNext();){ tn = (EGTaskNode)it1.next(); output.println("\t"+tn.getLabel()+" [label=\""+tn.getTextLabel()+"\""); - if (tn.isSelfLoop()) output.println(", shape=box"); if (tn.isMultipleParams()) output.println(", color=blue"); output.println("];"); diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 7b5ad170..a3c00332 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -1195,6 +1195,7 @@ public class BuildCode { private void generateFlatMethod(FlatMethod fm, LocalityBinding lb, PrintWriter output) { MethodDescriptor md=fm.getMethod(); + TaskDescriptor task=fm.getTask(); ClassDescriptor cn=md!=null?md.getClassDesc():null; diff --git a/Robust/src/IR/Flat/FlatMethod.java b/Robust/src/IR/Flat/FlatMethod.java index 4f1e0c9f..b48f718e 100644 --- a/Robust/src/IR/Flat/FlatMethod.java +++ b/Robust/src/IR/Flat/FlatMethod.java @@ -90,10 +90,14 @@ public class FlatMethod extends FlatNode { return visited; } + public String printMethod() { + return printMethod(null); + } + /** This method returns a string that is a human readable * representation of this method. */ - public String printMethod() { + public String printMethod(Hashtable map) { String st=method+" {\n"; HashSet tovisit=new HashSet(); HashSet visited=new HashSet(); @@ -108,8 +112,6 @@ public class FlatMethod extends FlatNode { tovisit.remove(fn); visited.add(fn); -// System.out.println("Next : "+fn.numNext()); - for(int i=0;i0) { @@ -138,10 +140,16 @@ public class FlatMethod extends FlatNode { if (nodetolabel.containsKey(current_node)) st+="L"+nodetolabel.get(current_node)+":\n"; if (current_node.numNext()==0) { - st+=" "+current_node.toString()+"\n"; + if (map==null) + st+=" "+current_node.toString()+"\n"; + else + st+=" "+current_node.toString()+"["+map.get(current_node)+"]\n"; current_node=null; } else if(current_node.numNext()==1) { - st+=" "+current_node.toString()+"\n"; + if (map==null) + st+=" "+current_node.toString()+"\n"; + else + st+=" "+current_node.toString()+"["+map.get(current_node)+"]\n"; FlatNode nextnode=current_node.getNext(0); if (visited.contains(nextnode)) { st+="goto L"+nodetolabel.get(nextnode)+"\n"; diff --git a/Robust/src/IR/Flat/FlatNode.java b/Robust/src/IR/Flat/FlatNode.java index b1780b10..714b894b 100644 --- a/Robust/src/IR/Flat/FlatNode.java +++ b/Robust/src/IR/Flat/FlatNode.java @@ -37,6 +37,7 @@ public class FlatNode { FlatNode old=getNext(i); next.set(i, n); old.prev.remove(this); + n.addPrev(this); } protected void addPrev(FlatNode p) {