fix bugs to run without pool allocation like the ppopp paper experiments
[IRC.git] / Robust / src / IR / Flat / FlatWriteDynamicVarNode.java
1 package IR.Flat;
2 import Analysis.MLP.VSTWrapper;
3 import java.util.Hashtable;
4
5
6 // This node is inserted by the MLP analysis
7 // in between a (tail -> head) IR graph edge.
8 // It is for tracking SESE variables with
9 // dynamic sources
10 public class FlatWriteDynamicVarNode extends FlatNode {
11
12
13   protected FlatNode tailNode;
14   protected FlatNode headNode;
15   
16   protected Hashtable<TempDescriptor, VSTWrapper> var2src;
17
18   protected FlatSESEEnterNode enclosingSESE;
19
20
21   public FlatWriteDynamicVarNode( FlatNode t,
22                                   FlatNode h,
23                                   Hashtable<TempDescriptor, VSTWrapper> v2s,
24                                   FlatSESEEnterNode c
25                                 ) {
26     tailNode      = t;
27     headNode      = h;
28     var2src       = v2s;
29     enclosingSESE = c;
30   }
31
32   public void spliceIntoIR() {
33     
34     if(tailNode instanceof FlatCondBranch){
35
36       headNode.removePrev( tailNode );
37       
38       if(tailNode.next.elementAt(0).equals(headNode)){
39         tailNode.removeNext( headNode );
40         ((FlatCondBranch)tailNode).addTrueNext(this);
41       }else{
42         tailNode.removeNext( headNode );
43         ((FlatCondBranch)tailNode).addFalseNext(this);
44       }
45       
46       this.addNext( headNode );
47     }else{
48       tailNode.removeNext( headNode );
49       headNode.removePrev( tailNode );
50       
51       tailNode.addNext( this );
52       this.addNext( headNode );
53     }
54
55   }
56
57   public void addMoreVar2Src( Hashtable<TempDescriptor, VSTWrapper> more ) {
58     var2src.putAll( more );
59   }
60
61   public Hashtable<TempDescriptor, VSTWrapper> getVar2src() {
62     return var2src;
63   }
64
65   public FlatSESEEnterNode getEnclosingSESE() {
66     return enclosingSESE;
67   }
68
69   public String toString() {
70     return "writeDynVars "+var2src;
71   }
72
73   public int kind() {
74     return FKind.FlatWriteDynamicVarNode;
75   }
76
77   public FlatNode clone(TempMap t) {
78     return new FlatWriteDynamicVarNode( tailNode, 
79                                         headNode, 
80                                         var2src, 
81                                         enclosingSESE 
82                                         );
83   }
84   public void rewriteUse(TempMap t) {
85   }
86 }