1 package Analysis.OoOJava;
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 Set<TempDescriptor> dynAssign_lhs2curr;
17 private FlatSESEEnterNode currentSESE;
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>();
27 public FlatSESEEnterNode getCurrentSESE() {
31 public void addStall2CopySet(VariableSourceToken stallToken,
32 Set<TempDescriptor> copySet) {
34 if( stall2copySet.containsKey(stallToken) ) {
35 Set<TempDescriptor> priorCopySet = stall2copySet.get(stallToken);
36 priorCopySet.addAll(copySet);
38 stall2copySet.put(stallToken, copySet);
42 public Set<VariableSourceToken> getStallTokens() {
43 return stall2copySet.keySet();
46 public Set<TempDescriptor> getCopySet(VariableSourceToken stallToken) {
47 return stall2copySet.get(stallToken);
51 public void addDynamicStall(TempDescriptor var) {
52 dynamicStallSet.add(var);
55 public Set<TempDescriptor> getDynamicStallSet() {
56 return dynamicStallSet;
59 public void addDynAssign(TempDescriptor lhs,
61 dynAssign_lhs2rhs.put(lhs, rhs);
64 public Hashtable<TempDescriptor, TempDescriptor> getDynAssigns() {
65 return dynAssign_lhs2rhs;
68 public void addDynAssign(TempDescriptor lhs) {
69 dynAssign_lhs2curr.add(lhs);
72 public Set<TempDescriptor> getDynAssignCurr() {
73 return dynAssign_lhs2curr;
76 public String toString() {
79 if( !stall2copySet.entrySet().isEmpty() ) {
80 s += "[STATIC STALLS:";
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();
88 s += "("+stallToken+"->"+copySet+")";
90 if( !stall2copySet.entrySet().isEmpty() ) {
94 if( !dynamicStallSet.isEmpty() ) {
95 s += "[DYN STALLS:"+dynamicStallSet+"]";
98 if( !dynAssign_lhs2rhs.isEmpty() ) {
99 s += "[DYN ASSIGNS:"+dynAssign_lhs2rhs+"]";
102 if( !dynAssign_lhs2curr.isEmpty() ) {
103 s += "[DYN ASS2CURR:"+dynAssign_lhs2curr+"]";