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,
60 TempDescriptor rhs ) {
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+"]";