// a code plan contains information based on analysis results
// for injecting code before and/or after a flat node
public class CodePlan {
-
- private Set<VariableSourceToken> writeToDynamicSrc;
-
- private Hashtable< SESEandAgePair, Set<TempDescriptor> > stall2copySet;
-
+
+ private Hashtable< VariableSourceToken, Set<TempDescriptor> > stall2copySet;
+ private Set<TempDescriptor> dynamicStallSet;
+ private Hashtable<TempDescriptor, TempDescriptor> dynAssign_lhs2rhs;
+ private FlatSESEEnterNode currentSESE;
- public CodePlan() {
- writeToDynamicSrc = null;
+ public CodePlan( FlatSESEEnterNode fsen ) {
+ stall2copySet = new Hashtable< VariableSourceToken, Set<TempDescriptor> >();
+ dynamicStallSet = new HashSet<TempDescriptor>();
+ dynAssign_lhs2rhs = new Hashtable<TempDescriptor, TempDescriptor>();
+ currentSESE = fsen;
+ }
- stall2copySet = new Hashtable< SESEandAgePair, Set<TempDescriptor> >();
+ public FlatSESEEnterNode getCurrentSESE() {
+ return currentSESE;
}
+
+ public void addStall2CopySet( VariableSourceToken stallToken,
+ Set<TempDescriptor> copySet ) {
+ if( stall2copySet.containsKey( stallToken ) ) {
+ Set<TempDescriptor> priorCopySet = stall2copySet.get( stallToken );
+ priorCopySet.addAll( copySet );
+ } else {
+ stall2copySet.put( stallToken, copySet );
+ }
+ }
- public void setWriteToDynamicSrc(
- Set<VariableSourceToken> writeToDynamicSrc
- ) {
- this.writeToDynamicSrc = writeToDynamicSrc;
+ public Set<VariableSourceToken> getStallTokens() {
+ return stall2copySet.keySet();
}
- public Set<VariableSourceToken> getWriteToDynamicSrc() {
- return writeToDynamicSrc;
+ public Set<TempDescriptor> getCopySet( VariableSourceToken stallToken ) {
+ return stall2copySet.get( stallToken );
}
- public void addStall2CopySet( SESEandAgePair stallPair,
- Set<TempDescriptor> copySet ) {
+ public void addDynamicStall( TempDescriptor var ) {
+ dynamicStallSet.add( var );
+ }
- if( stall2copySet.containsKey( stallPair ) ) {
- Set<TempDescriptor> priorCopySet = stall2copySet.get( stallPair );
- priorCopySet.addAll( copySet );
- } else {
- stall2copySet.put( stallPair, copySet );
- }
+ public Set<TempDescriptor> getDynamicStallSet() {
+ return dynamicStallSet;
}
- public Hashtable< SESEandAgePair, Set<TempDescriptor> > getStall2copySet() {
- return stall2copySet;
+ public void addDynAssign( TempDescriptor lhs,
+ TempDescriptor rhs ) {
+ dynAssign_lhs2rhs.put( lhs, rhs );
}
+ public Hashtable<TempDescriptor, TempDescriptor> getDynAssigns() {
+ return dynAssign_lhs2rhs;
+ }
public boolean equals( Object o ) {
if( o == null ) {
CodePlan cp = (CodePlan) o;
- boolean dynamicSetEq;
- if( writeToDynamicSrc == null ) {
- dynamicSetEq = (cp.writeToDynamicSrc == null);
- } else {
- dynamicSetEq = (writeToDynamicSrc.equals( cp.writeToDynamicSrc ));
- }
-
boolean copySetsEq = (stall2copySet.equals( cp.stall2copySet ));
+
+ boolean dynStallSetEq = (dynamicStallSet.equals( cp.dynamicStallSet ));
+
+ boolean dynAssignEq = (dynAssign_lhs2rhs.equals( cp.dynAssign_lhs2rhs ));
- return dynamicSetEq && copySetsEq;
+ return copySetsEq && dynStallSetEq && dynAssignEq;
}
public int hashCode() {
- int dynamicSetHC = 1;
- if( writeToDynamicSrc != null ) {
- dynamicSetHC = writeToDynamicSrc.hashCode();
- }
int copySetsHC = stall2copySet.hashCode();
- return dynamicSetHC ^ 3*copySetsHC;
- }
-
- public String toString() {
- String s = "";
+ int dynStallSetHC = dynamicStallSet.hashCode();
- if( writeToDynamicSrc != null ) {
- s += "[WRITE DYN";
+ int dynAssignHC = dynAssign_lhs2rhs.hashCode();
- Iterator<VariableSourceToken> vstItr = writeToDynamicSrc.iterator();
- while( vstItr.hasNext() ) {
- VariableSourceToken vst = vstItr.next();
- s += ", "+vst;
- }
+ int hash = 7;
+ hash = 31*hash + copySetsHC;
+ hash = 31*hash + dynStallSetHC;
+ hash = 31*hash + dynAssignHC;
+ return hash;
+ }
- s += "]";
- }
+ public String toString() {
+ String s = " PLAN: ";
if( !stall2copySet.entrySet().isEmpty() ) {
- s += "[STALLS:";
+ s += "[STATIC STALLS:";
}
Iterator cpsItr = stall2copySet.entrySet().iterator();
while( cpsItr.hasNext() ) {
- Map.Entry me = (Map.Entry) cpsItr.next();
- SESEandAgePair stallPair = (SESEandAgePair) me.getKey();
- Set<TempDescriptor> copySet = (Set<TempDescriptor>) me.getValue();
+ Map.Entry me = (Map.Entry) cpsItr.next();
+ VariableSourceToken stallToken = (VariableSourceToken) me.getKey();
+ Set<TempDescriptor> copySet = (Set<TempDescriptor>) me.getValue();
- s += "("+stallPair+"->"+copySet+")";
+ s += "("+stallToken+"->"+copySet+")";
}
if( !stall2copySet.entrySet().isEmpty() ) {
s += "]";
}
+ if( !dynamicStallSet.isEmpty() ) {
+ s += "[DYN STALLS:"+dynamicStallSet+"]";
+ }
+
+ if( !dynAssign_lhs2rhs.isEmpty() ) {
+ s += "[DYN ASSIGNS:"+dynAssign_lhs2rhs+"]";
+ }
+
return s;
}
}