From: bdemsky Date: Wed, 9 Jan 2008 09:07:22 +0000 (+0000) Subject: changes X-Git-Tag: preEdgeChange~316 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c1597c621eac0fbe86953a8b93442917dc60d6fb;p=IRC.git changes --- diff --git a/Robust/src/Analysis/TaskStateAnalysis/ObjWrapper.java b/Robust/src/Analysis/TaskStateAnalysis/ObjWrapper.java index 042c9226..3fe4b458 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/ObjWrapper.java +++ b/Robust/src/Analysis/TaskStateAnalysis/ObjWrapper.java @@ -4,7 +4,7 @@ import IR.Tree.*; import IR.Flat.*; import java.util.*; -public class ObjWrapper { +public class ObjWrapper implements Wrapper{ FlagState fs; Vector tags; diff --git a/Robust/src/Analysis/TaskStateAnalysis/TagWrapper.java b/Robust/src/Analysis/TaskStateAnalysis/TagWrapper.java index eedda217..1cdad2c2 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TagWrapper.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TagWrapper.java @@ -4,7 +4,7 @@ import IR.Tree.*; import IR.Flat.*; import java.util.*; -public class TagWrapper { +public class TagWrapper implements Wrapper { TagState initts; Vector ts; @@ -20,16 +20,4 @@ public class TagWrapper { tw.ts=ts.clone(); return tw; } - - public boolean equals(Object o) { - if (o instanceof TagWrapper) { - TagWrapper tw=(TagWrapper)o; - return tw.initts.equals(initts)&&tw.ts.equals(ts); - } - return false; - } - - public int hashCode() { - return initts.hashCode()^ts.hashCode(); - } } diff --git a/Robust/src/Analysis/TaskStateAnalysis/TaskTagAnalysis.java b/Robust/src/Analysis/TaskStateAnalysis/TaskTagAnalysis.java index 093102e9..f83c2588 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TaskTagAnalysis.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TaskTagAnalysis.java @@ -73,37 +73,81 @@ public class TaskTagAnalysis { } } - private Hashtable computeInitialState(Hashtable> table, FlatNode fn) { - Hashtable table=new Hashtable(); + private Hashtable computeInitialState(Hashtable> maintable, FlatNode fn) { + Hashtable table=new Hashtable(); + Hashtable tagtable=new Hashtable(); for(int i=0;i prevtable=table.get(fn); + Hashtable prevtable=maintable.get(fn); + + //Iterator through the Tags for(Iterator tmpit=prevtable.keySet().iterator();tmpit.hasNext();) { TempDescriptor tmp=tmpit.next(); - TagWrapper prevtag=prevtable.get(tmp); + Wrapper prevtag=prevtable.get(tmp); + if (prevtag instanceof ObjWrapper) + continue; if (table.containsKey(tmp)) { //merge tag states - TagWrapper currtag=table.get(tmp); - assert(currtag.initts.equals(prevtag.initts)); - for(Iterator tagit=prevtag.ts.iterator();tagit.hasNext();) { + TagWrapper currtag=(TagWrapper) table.get(tmp); + tagtable.put((TagWrapper)prevtag, currtag); + assert(currtag.initts.equals(((TagWrapper)prevtag).initts)); + for(Iterator tagit=((TagWrapper)prevtag).ts.iterator();tagit.hasNext();) { TagState tag=tagit.next(); if (!currtag.ts.contains(tag)) { currtag.ts.add(tag); } } } else { - table.put(tmp, prevtag.clone()); + TagWrapper clonetag=prevtag.clone(); + tagtable.put(prevtag, clonetag); + table.put(tmp, clonetag); + } + } + + //Iterator through the Objects + for(Iterator tmpit=prevtable.keySet().iterator();tmpit.hasNext();) { + TempDescriptor tmp=tmpit.next(); + Wrapper obj=prevtable.get(tmp); + if (obj instanceof TagWrapper) + continue; + ObjWrapper prevobj=(ObjWrapper)obj; + if (table.containsKey(tmp)) { + //merge tag states + ObjWrapper newobj=new ObjWrapper(prevobj.fs); + table.put(tmp, newobj); + } + ObjWrapper currobj=(ObjWrapper) table.get(tmp); + for(int j=0;j table) { + + } + + private void processFlatCall(FlatCall fc, Hashtable table) { + + } + + private void processFlatReturnNode(FlatReturnNode fr, Hashtable table) { + + } + + private boolean equivalent(Hashtable table1, Hashtable table2) { + + } + private void doAnalysis(TaskBinding tb) { TaskDescriptor td=tb.tqi.tq.getTask(); FlatMethod fm=state.getMethodFlat(td); - Hashtable> table=new Hashtable>(); - table.put(fm, buildinittable(tb)); + Hashtable> wtable=new Hashtable>(); + wtable.put(fm, buildinittable(tb)); HashSet visited=new HashSet(); HashSet tovisit=new HashSet(); tovisit.add(fm.getNext(0)); @@ -111,25 +155,45 @@ public class TaskTagAnalysis { FlatNode fn=tovisit.iterator().next(); tovisit.remove(fn); visited.add(fn); - Hashtable table=computeInitialState(table, fn); - + Hashtable table=computeInitialState(wtable, fn); + switch(fn.kind()) { + case FKind.FlatFlagActionNode: + processFlatFlag((FlatFlagActionNode)fn, table); + break; + case FKind.FlatCall: + processFlatCall((FlatCall)fn, table); + break; + case FKind.FlatReturnNode: + processFlatReturnNode((FlatReturn)fn, table); + break; + default: + } - for(int i=0;i> buildinittable(TaskBinding tb) { - Hashtable> table=new Hashtable>(); + private Hashtable buildinittable(TaskBinding tb, FlatMethod fm) { + Hashtable table=new Hashtable(); Vector tagtmps=tb.tqi.tq.tags; for(int i=0;i tset=new HashSet(); - tset.add(tb.getTag(tmp)); - table.put(tmp, tset); + table.put(tmp, tb.getTag(tmp)); + } + for(int i=0;i