changes.
[IRC.git] / Robust / src / Analysis / OoOJava / CodePlan.java
1 package Analysis.OoOJava;
2
3 import IR.*;
4 import IR.Flat.*;
5 import java.util.*;
6 import java.io.*;
7
8
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 {
12
13   private Hashtable< VariableSourceToken, Set<TempDescriptor> > stall2copySet;
14   private Set<TempDescriptor>                                   dynamicStallSet;
15   private Hashtable<TempDescriptor, TempDescriptor>             dynAssign_lhs2rhs;
16   private Set<TempDescriptor>                                   dynAssign_lhs2curr;
17   private FlatSESEEnterNode currentSESE;
18
19   public CodePlan(FlatSESEEnterNode fsen) {
20     stall2copySet      = new Hashtable< VariableSourceToken, Set<TempDescriptor> >();
21     dynamicStallSet    = new HashSet<TempDescriptor>();
22     dynAssign_lhs2rhs  = new Hashtable<TempDescriptor, TempDescriptor>();
23     dynAssign_lhs2curr = new HashSet<TempDescriptor>();
24     currentSESE        = fsen;
25   }
26
27   public FlatSESEEnterNode getCurrentSESE() {
28     return currentSESE;
29   }
30
31   public void addStall2CopySet(VariableSourceToken stallToken,
32                                Set<TempDescriptor> copySet) {
33
34     if( stall2copySet.containsKey(stallToken) ) {
35       Set<TempDescriptor> priorCopySet = stall2copySet.get(stallToken);
36       priorCopySet.addAll(copySet);
37     } else {
38       stall2copySet.put(stallToken, copySet);
39     }
40   }
41
42   public Set<VariableSourceToken> getStallTokens() {
43     return stall2copySet.keySet();
44   }
45
46   public Set<TempDescriptor> getCopySet(VariableSourceToken stallToken) {
47     return stall2copySet.get(stallToken);
48   }
49
50
51   public void addDynamicStall(TempDescriptor var) {
52     dynamicStallSet.add(var);
53   }
54
55   public Set<TempDescriptor> getDynamicStallSet() {
56     return dynamicStallSet;
57   }
58
59   public void addDynAssign(TempDescriptor lhs,
60                            TempDescriptor rhs) {
61     dynAssign_lhs2rhs.put(lhs, rhs);
62   }
63
64   public Hashtable<TempDescriptor, TempDescriptor> getDynAssigns() {
65     return dynAssign_lhs2rhs;
66   }
67
68   public void addDynAssign(TempDescriptor lhs) {
69     dynAssign_lhs2curr.add(lhs);
70   }
71
72   public Set<TempDescriptor> getDynAssignCurr() {
73     return dynAssign_lhs2curr;
74   }
75
76   public String toString() {
77     String s = " PLAN: ";
78
79     if( !stall2copySet.entrySet().isEmpty() ) {
80       s += "[STATIC STALLS:";
81     }
82     Iterator cpsItr = stall2copySet.entrySet().iterator();
83     while( cpsItr.hasNext() ) {
84       Map.Entry me         = (Map.Entry)cpsItr.next();
85       VariableSourceToken stallToken = (VariableSourceToken) me.getKey();
86       Set<TempDescriptor> copySet    = (Set<TempDescriptor>)me.getValue();
87
88       s += "("+stallToken+"->"+copySet+")";
89     }
90     if( !stall2copySet.entrySet().isEmpty() ) {
91       s += "]";
92     }
93
94     if( !dynamicStallSet.isEmpty() ) {
95       s += "[DYN STALLS:"+dynamicStallSet+"]";
96     }
97
98     if( !dynAssign_lhs2rhs.isEmpty() ) {
99       s += "[DYN ASSIGNS:"+dynAssign_lhs2rhs+"]";
100     }
101
102     if( !dynAssign_lhs2curr.isEmpty() ) {
103       s += "[DYN ASS2CURR:"+dynAssign_lhs2curr+"]";
104     }
105
106     return s;
107   }
108 }