changes to maintain strong update effects.
[IRC.git] / Robust / src / Analysis / MLP / SESEEffectsSet.java
1 package Analysis.MLP;
2
3 import java.io.StringWriter;
4 import java.util.HashSet;
5 import java.util.Hashtable;
6 import java.util.Iterator;
7 import java.util.Set;
8
9 import IR.Flat.TempDescriptor;
10
11 public class SESEEffectsSet {
12         private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> readTable;
13         private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> writeTable;
14         private Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> strongUpdateTable;
15
16         public SESEEffectsSet() {
17                 readTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
18                 writeTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
19                 strongUpdateTable =  new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
20         }
21
22         public void addReadingVar(TempDescriptor td, SESEEffectsKey access) {
23                 HashSet<SESEEffectsKey> aSet = readTable.get(td);
24                 if (aSet == null) {
25                         aSet = new HashSet<SESEEffectsKey>();
26                 }
27
28                 aSet.add(access);
29                 readTable.put(td, aSet);
30         }
31
32         public void addReadingEffectsSet(TempDescriptor td,
33                         HashSet<SESEEffectsKey> newSet) {
34
35                 if (newSet != null) {
36                         HashSet<SESEEffectsKey> aSet = readTable.get(td);
37                         if (aSet == null) {
38                                 aSet = new HashSet<SESEEffectsKey>();
39                         }
40                         aSet.addAll(newSet);
41                         readTable.put(td, aSet);
42                 }
43
44         }
45
46         public void addWritingEffectsSet(TempDescriptor td,
47                         HashSet<SESEEffectsKey> newSet) {
48
49                 if (newSet != null) {
50                         HashSet<SESEEffectsKey> aSet = writeTable.get(td);
51                         if (aSet == null) {
52                                 aSet = new HashSet<SESEEffectsKey>();
53                         }
54                         aSet.addAll(newSet);
55                         writeTable.put(td, aSet);
56                 }
57
58         }
59
60         public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getReadTable() {
61                 return readTable;
62         }
63
64         public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getWriteTable() {
65                 return writeTable;
66         }
67         
68         public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getStrongUpdateTable() {
69                 return strongUpdateTable;
70         }
71
72         public void addWritingVar(TempDescriptor td, SESEEffectsKey access) {
73                 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
74                 if (aSet == null) {
75                         aSet = new HashSet<SESEEffectsKey>();
76                 }
77                 aSet.add(access);
78                 writeTable.put(td, aSet);
79         }
80         
81         public void addStrongUpdateVar(TempDescriptor td, SESEEffectsKey access) {
82                 HashSet<SESEEffectsKey> aSet = strongUpdateTable.get(td);
83                 if (aSet == null) {
84                         aSet = new HashSet<SESEEffectsKey>();
85                 }
86                 aSet.add(access);
87                 strongUpdateTable.put(td, aSet);
88         }
89
90         public Set<SESEEffectsKey> getReadingSet(TempDescriptor td) {
91                 return readTable.get(td);
92         }
93
94         public Set<SESEEffectsKey> getWritingSet(TempDescriptor td) {
95                 return writeTable.get(td);
96         }
97
98         public String printSet() {
99                 
100                 StringWriter writer=new StringWriter();
101
102                 Set<TempDescriptor> keySet = readTable.keySet();
103                 Iterator<TempDescriptor> iter = keySet.iterator();
104                 while (iter.hasNext()) {
105                         TempDescriptor td = iter.next();
106                         Set<SESEEffectsKey> effectSet = readTable.get(td);
107                         String keyStr = "{";
108                         if (effectSet != null) {
109                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
110                                 while (effectIter.hasNext()) {
111                                         SESEEffectsKey key = effectIter.next();
112                                         keyStr += " " + key;
113                                 }
114                         } 
115                         keyStr+=" }";
116                         writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
117                 }
118
119                 keySet = writeTable.keySet();
120                 iter = keySet.iterator();
121                 while (iter.hasNext()) {
122                         TempDescriptor td = iter.next();
123                         Set<SESEEffectsKey> effectSet = writeTable.get(td);
124                         String keyStr = "{";
125                         if (effectSet != null) {
126                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
127                                 while (effectIter.hasNext()) {
128                                         SESEEffectsKey key = effectIter.next();
129                                         keyStr += " " + key;
130                                 }
131                         } 
132                         keyStr+=" }";
133                         writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
134                 }
135                 
136                 keySet = strongUpdateTable.keySet();
137                 iter = keySet.iterator();
138                 while (iter.hasNext()) {
139                         TempDescriptor td = iter.next();
140                         Set<SESEEffectsKey> effectSet = strongUpdateTable.get(td);
141                         String keyStr = "{";
142                         if (effectSet != null) {
143                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
144                                 while (effectIter.hasNext()) {
145                                         SESEEffectsKey key = effectIter.next();
146                                         keyStr += " " + key;
147                                 }
148                         } 
149                         keyStr+=" }";
150                         writer.write("Live-in Var " + td + " StrongUpdate=" + keyStr+"\n");
151                 }
152                 
153                 return writer.toString();
154
155         }
156
157         public boolean equals(Object o) {
158                 if (o == null) {
159                         return false;
160                 }
161
162                 if (!(o instanceof SESEEffectsSet)) {
163                         return false;
164                 }
165
166                 SESEEffectsSet in = (SESEEffectsSet) o;
167
168                 if (getReadTable().equals(in.getReadTable())
169                                 && getWriteTable().equals(in.getWriteTable())
170                                 && getStrongUpdateTable().equals(in.getStrongUpdateTable())) {
171                         return true;
172                 } else {
173                         return false;
174                 }
175
176         }
177
178         public int hashCode() {
179                 int hash = 1;
180
181                 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31 +getStrongUpdateTable().hashCode();
182
183                 return hash;
184         }
185 }