X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FDisjoint%2FBuildStateMachines.java;h=b4e0b6a21269cfbc78c0c6fb4b88d2a69db19cdb;hb=ebd4254a09e78c8c2a6c365330f9d7681bcd8a79;hp=d7e404f21ae8f18bdc4d6c88f75c48908230127c;hpb=7034316ea7bcf724d2b34584b4cf2fa1d7c5dad3;p=IRC.git diff --git a/Robust/src/Analysis/Disjoint/BuildStateMachines.java b/Robust/src/Analysis/Disjoint/BuildStateMachines.java index d7e404f2..b4e0b6a2 100644 --- a/Robust/src/Analysis/Disjoint/BuildStateMachines.java +++ b/Robust/src/Analysis/Disjoint/BuildStateMachines.java @@ -5,6 +5,9 @@ import java.io.*; import IR.*; import IR.Flat.*; +import Analysis.OoOJava.*; +import Util.*; + ////////////////////////////////////////////// // @@ -22,39 +25,48 @@ public class BuildStateMachines { // map a task or stall site (both a FlatNode) to a variable // and then finally to a state machine - protected - Hashtable< FlatNode, Hashtable > - fn2var2smfe; + protected Hashtable< FlatNode, Hashtable> fn2var2smfe; + + // remember all the FlatNode/TempDescriptor pairs that have a state machines + // for easy retrieval of all machines + protected Set> allMachineNamePairs; + public BuildStateMachines() { - fn2var2smfe = new - Hashtable< FlatNode, Hashtable >(); + fn2var2smfe = new Hashtable< FlatNode, Hashtable >(); + allMachineNamePairs = new HashSet>(); } - protected StateMachineForEffects getStateMachine( FlatNode fn, - TempDescriptor var ) { + public StateMachineForEffects getStateMachine(Pair fnpair) { + return getStateMachine(fnpair.getFirst(), fnpair.getSecond()); + } - Hashtable var2smfe = fn2var2smfe.get( fn ); + public StateMachineForEffects getStateMachine(FlatNode fn, TempDescriptor var) { + Hashtable var2smfe = fn2var2smfe.get(fn); if( var2smfe == null ) { var2smfe = new Hashtable(); - fn2var2smfe.put( fn, var2smfe ); + fn2var2smfe.put(fn, var2smfe); } - - StateMachineForEffects smfe = var2smfe.get( var ); + + StateMachineForEffects smfe = var2smfe.get(var); if( smfe == null ) { - smfe = new StateMachineForEffects( fn ); - var2smfe.put( var, smfe ); + smfe = new StateMachineForEffects(fn); + var2smfe.put(var, smfe); + allMachineNamePairs.add(new Pair(fn, var) ); } return smfe; } + public Set> getAllMachineNames() { + return allMachineNamePairs; + } + - public void addToStateMachine( Taint t, - Effect e, - FlatNode currentProgramPoint ) { - + public void addToStateMachine(Taint t, + Effect e, + FlatNode currentProgramPoint) { FlatNode taskOrStallSite; if( t.isStallSiteTaint() ) { taskOrStallSite = t.getStallSite(); @@ -64,40 +76,50 @@ public class BuildStateMachines { TempDescriptor var = t.getVar(); - StateMachineForEffects smfe = getStateMachine( taskOrStallSite, var ); + StateMachineForEffects smfe = getStateMachine(taskOrStallSite, var); FlatNode whereDefined = t.getWhereDefined(); - smfe.addEffect( whereDefined, e ); + smfe.addEffect(whereDefined, e); // reads of pointers make a transition if( e.getType() == Effect.read && - e.getField().getType().isPtr() ) { - - smfe.addTransition( whereDefined, - currentProgramPoint, - e ); + ((e.getField()!=null && e.getField().getType().isPtr()) + ||(e.getField()==null && e.getAffectedAllocSite().getFlatNew().getType().dereference().isPtr()))) { + + smfe.addTransition(whereDefined, + currentProgramPoint, + e); } } public void writeStateMachines() { + writeStateMachines(""); + } + + public void writeStateMachines(String prefix) { Iterator fnItr = fn2var2smfe.keySet().iterator(); while( fnItr.hasNext() ) { FlatNode fn = fnItr.next(); - - Hashtable - var2smfe = fn2var2smfe.get( fn ); - + + Hashtable + var2smfe = fn2var2smfe.get(fn); + Iterator varItr = var2smfe.keySet().iterator(); while( varItr.hasNext() ) { TempDescriptor var = varItr.next(); - StateMachineForEffects smfe = var2smfe.get( var ); + StateMachineForEffects smfe = var2smfe.get(var); - smfe.writeAsDOT( "statemachine_"+fn.toString()+var.toString() ); + smfe.writeAsDOT(prefix+"statemachine_"+fn.toString()+var.toString() ); } } } + //TODO JIM! Give me the REAALL number here. + public int getTotalNumOfWeakGroups() { + // TODO Auto-generated method stub + return 1; + } }