9 // a code plan contains information based on analysis results
10 // for injecting code before and/or after a flat node
11 public class CodePlan {
13 private Hashtable< VariableSourceToken, Set<TempDescriptor> > stall2copySet;
14 private Set<TempDescriptor> dynamicStallSet;
15 private Hashtable<TempDescriptor, TempDescriptor> dynAssign_lhs2rhs;
16 private FlatSESEEnterNode currentSESE;
18 public CodePlan( FlatSESEEnterNode fsen ) {
19 stall2copySet = new Hashtable< VariableSourceToken, Set<TempDescriptor> >();
20 dynamicStallSet = new HashSet<TempDescriptor>();
21 dynAssign_lhs2rhs = new Hashtable<TempDescriptor, TempDescriptor>();
25 public FlatSESEEnterNode getCurrentSESE() {
29 public void addStall2CopySet( VariableSourceToken stallToken,
30 Set<TempDescriptor> copySet ) {
32 if( stall2copySet.containsKey( stallToken ) ) {
33 Set<TempDescriptor> priorCopySet = stall2copySet.get( stallToken );
34 priorCopySet.addAll( copySet );
36 stall2copySet.put( stallToken, copySet );
40 public Set<VariableSourceToken> getStallTokens() {
41 return stall2copySet.keySet();
44 public Set<TempDescriptor> getCopySet( VariableSourceToken stallToken ) {
45 return stall2copySet.get( stallToken );
49 public void addDynamicStall( TempDescriptor var ) {
50 dynamicStallSet.add( var );
53 public Set<TempDescriptor> getDynamicStallSet() {
54 return dynamicStallSet;
57 public void addDynAssign( TempDescriptor lhs,
58 TempDescriptor rhs ) {
59 dynAssign_lhs2rhs.put( lhs, rhs );
62 public Hashtable<TempDescriptor, TempDescriptor> getDynAssigns() {
63 return dynAssign_lhs2rhs;
66 public boolean equals( Object o ) {
71 if( !(o instanceof CodePlan) ) {
75 CodePlan cp = (CodePlan) o;
77 boolean copySetsEq = (stall2copySet.equals( cp.stall2copySet ));
79 boolean dynStallSetEq = (dynamicStallSet.equals( cp.dynamicStallSet ));
81 boolean dynAssignEq = (dynAssign_lhs2rhs.equals( cp.dynAssign_lhs2rhs ));
83 return copySetsEq && dynStallSetEq && dynAssignEq;
86 public int hashCode() {
88 int copySetsHC = stall2copySet.hashCode();
90 int dynStallSetHC = dynamicStallSet.hashCode();
92 int dynAssignHC = dynAssign_lhs2rhs.hashCode();
95 hash = 31*hash + copySetsHC;
96 hash = 31*hash + dynStallSetHC;
97 hash = 31*hash + dynAssignHC;
101 public String toString() {
102 String s = " PLAN: ";
104 if( !stall2copySet.entrySet().isEmpty() ) {
105 s += "[STATIC STALLS:";
107 Iterator cpsItr = stall2copySet.entrySet().iterator();
108 while( cpsItr.hasNext() ) {
109 Map.Entry me = (Map.Entry) cpsItr.next();
110 VariableSourceToken stallToken = (VariableSourceToken) me.getKey();
111 Set<TempDescriptor> copySet = (Set<TempDescriptor>) me.getValue();
113 s += "("+stallToken+"->"+copySet+")";
115 if( !stall2copySet.entrySet().isEmpty() ) {
119 if( !dynamicStallSet.isEmpty() ) {
120 s += "[DYN STALLS:"+dynamicStallSet+"]";
123 if( !dynAssign_lhs2rhs.isEmpty() ) {
124 s += "[DYN ASSIGNS:"+dynAssign_lhs2rhs+"]";