more changes.
[IRC.git] / Robust / src / Analysis / MLP / CodePlan.java
1 package Analysis.MLP;
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 }