2 import Analysis.MLP.VariableSourceToken;
3 import Analysis.MLP.VarSrcTokTable;
4 import Analysis.MLP.SESEandAgePair;
5 import IR.MethodDescriptor;
6 import IR.ClassDescriptor;
7 import IR.TypeDescriptor;
8 import IR.Tree.SESENode;
11 public class FlatSESEEnterNode extends FlatNode {
13 // SESE class identifiers should be numbered
14 // sequentially from 0 to 1-(total # SESE's)
15 private static int identifier=0;
18 protected FlatSESEExitNode exit;
19 protected SESENode treeNode;
20 protected FlatSESEEnterNode parent;
21 protected Integer oldestAgeToTrack;
23 protected Set<FlatSESEEnterNode> children;
25 protected Set<TempDescriptor> inVars;
26 protected Set<TempDescriptor> outVars;
28 protected Set<SESEandAgePair> needStaticNameInCode;
30 protected Set<SESEandAgePair> staticInVarSrcs;
32 protected Set<TempDescriptor> readyInVars;
33 protected Set<TempDescriptor> staticInVars;
34 protected Set<TempDescriptor> dynamicInVars;
36 protected Set<TempDescriptor> dynamicStallVars;
38 protected Hashtable<TempDescriptor, VariableSourceToken> staticInVar2src;
41 // scope info for this SESE
42 protected FlatMethod fmEnclosing;
43 protected MethodDescriptor mdEnclosing;
44 protected ClassDescriptor cdEnclosing;
46 // structures that allow SESE to appear as
47 // a normal method to code generation
48 protected FlatMethod fmBogus;
49 protected MethodDescriptor mdBogus;
52 public FlatSESEEnterNode( SESENode sn ) {
53 this.id = identifier++;
56 oldestAgeToTrack = new Integer( 0 );
58 children = new HashSet<FlatSESEEnterNode>();
59 inVars = new HashSet<TempDescriptor>();
60 outVars = new HashSet<TempDescriptor>();
61 needStaticNameInCode = new HashSet<SESEandAgePair>();
62 staticInVarSrcs = new HashSet<SESEandAgePair>();
63 readyInVars = new HashSet<TempDescriptor>();
64 staticInVars = new HashSet<TempDescriptor>();
65 dynamicInVars = new HashSet<TempDescriptor>();
66 dynamicStallVars = new HashSet<TempDescriptor>();
68 staticInVar2src = new Hashtable<TempDescriptor, VariableSourceToken>();
71 public void rewriteUse() {
74 public void rewriteDef() {
77 public void setFlatExit( FlatSESEExitNode fsexn ) {
81 public FlatSESEExitNode getFlatExit() {
86 return FKind.FlatSESEEnterNode;
89 public SESENode getTreeNode() {
93 public int getIdentifier() {
97 public String getPrettyIdentifier() {
98 if( treeNode.getID() != null ) {
99 return treeNode.getID();
104 public String toString() {
105 return "sese "+getPrettyIdentifier()+" enter";
108 public void setParent( FlatSESEEnterNode parent ) {
109 this.parent = parent;
112 public FlatSESEEnterNode getParent() {
116 public void addChild( FlatSESEEnterNode child ) {
117 children.add( child );
120 public Set<FlatSESEEnterNode> getChildren() {
124 public void addInVar( TempDescriptor td ) {
128 public void addOutVar( TempDescriptor td ) {
132 public void addInVarSet( Set<TempDescriptor> s ) {
136 public void addOutVarSet( Set<TempDescriptor> s ) {
140 public Set<TempDescriptor> getInVarSet() {
144 Vector<TempDescriptor> vecinVars;
146 HashSet<TempDescriptor> paramset=new HashSet<TempDescriptor>();
147 paramset.addAll(inVars);
148 paramset.addAll(outVars);
149 vecinVars=new Vector<TempDescriptor>();
150 vecinVars.addAll(paramset);
153 public TempDescriptor getParameter(int i) {
154 if (vecinVars==null) {
157 return vecinVars.get(i);
160 public int numParameters() {
161 if (vecinVars==null) {
164 return vecinVars.size();
167 public Set<FlatNode> getNodeSet() {
168 HashSet<FlatNode> tovisit=new HashSet<FlatNode>();
169 HashSet<FlatNode> visited=new HashSet<FlatNode>();
171 while(!tovisit.isEmpty()) {
172 FlatNode fn=tovisit.iterator().next();
177 for(int i=0; i<fn.numNext(); i++) {
178 FlatNode nn=fn.getNext(i);
179 if (!visited.contains(nn))
187 public Set<TempDescriptor> getOutVarSet() {
191 public void addNeededStaticName( SESEandAgePair p ) {
192 needStaticNameInCode.add( p );
195 public Set<SESEandAgePair> getNeededStaticNames() {
196 return needStaticNameInCode;
199 public void addStaticInVarSrc( SESEandAgePair p ) {
200 staticInVarSrcs.add( p );
203 public Set<SESEandAgePair> getStaticInVarSrcs() {
204 return staticInVarSrcs;
207 public void addReadyInVar( TempDescriptor td ) {
208 readyInVars.add( td );
211 public Set<TempDescriptor> getReadyInVarSet() {
215 public void addStaticInVar( TempDescriptor td ) {
216 staticInVars.add( td );
219 public Set<TempDescriptor> getStaticInVarSet() {
223 public void putStaticInVar2src( TempDescriptor staticInVar,
224 VariableSourceToken vst ) {
225 staticInVar2src.put( staticInVar, vst );
228 public VariableSourceToken getStaticInVarSrc( TempDescriptor staticInVar ) {
229 return staticInVar2src.get( staticInVar );
232 public void addDynamicInVar( TempDescriptor td ) {
233 dynamicInVars.add( td );
236 public Set<TempDescriptor> getDynamicInVarSet() {
237 return dynamicInVars;
240 public void addDynamicStallVar( TempDescriptor td ) {
241 dynamicStallVars.add( td );
244 public Set<TempDescriptor> getDynamicStallVarSet() {
245 return dynamicStallVars;
248 public void mustTrackAtLeastAge( Integer age ) {
249 if( age > oldestAgeToTrack ) {
250 oldestAgeToTrack = new Integer( age );
254 public Integer getOldestAgeToTrack() {
255 return oldestAgeToTrack;
258 public void setfmEnclosing( FlatMethod fm ) { fmEnclosing = fm; }
259 public FlatMethod getfmEnclosing() { return fmEnclosing; }
261 public void setmdEnclosing( MethodDescriptor md ) { mdEnclosing = md; }
262 public MethodDescriptor getmdEnclosing() { return mdEnclosing; }
264 public void setcdEnclosing( ClassDescriptor cd ) { cdEnclosing = cd; }
265 public ClassDescriptor getcdEnclosing() { return cdEnclosing; }
267 public void setfmBogus( FlatMethod fm ) { fmBogus = fm; }
268 public FlatMethod getfmBogus() { return fmBogus; }
270 public void setmdBogus( MethodDescriptor md ) { mdBogus = md; }
271 public MethodDescriptor getmdBogus() { return mdBogus; }
273 public String getSESEmethodName() {
274 assert cdEnclosing != null;
275 assert mdBogus != null;
278 cdEnclosing.getSafeSymbol()+
279 mdBogus.getSafeSymbol()+
281 mdBogus.getSafeMethodDescriptor();
284 public String getSESErecordName() {
285 assert cdEnclosing != null;
286 assert mdBogus != null;
290 cdEnclosing.getSafeSymbol()+
291 mdBogus.getSafeSymbol()+
293 mdBogus.getSafeMethodDescriptor()+