realized there were two print statements in regression testin different SESEs, breaks...
[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 Set<SESEEffectsKey> getStrongUpdateSet(TempDescriptor td){
99                 return strongUpdateTable.get(td);               
100         }
101
102         public String printSet() {
103                 
104                 StringWriter writer=new StringWriter();
105
106                 Set<TempDescriptor> keySet = readTable.keySet();
107                 Iterator<TempDescriptor> iter = keySet.iterator();
108                 while (iter.hasNext()) {
109                         TempDescriptor td = iter.next();
110                         Set<SESEEffectsKey> effectSet = readTable.get(td);
111                         String keyStr = "{";
112                         if (effectSet != null) {
113                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
114                                 while (effectIter.hasNext()) {
115                                         SESEEffectsKey key = effectIter.next();
116                                         keyStr += " " + key;
117                                 }
118                         } 
119                         keyStr+=" }";
120                         writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
121                 }
122
123                 keySet = writeTable.keySet();
124                 iter = keySet.iterator();
125                 while (iter.hasNext()) {
126                         TempDescriptor td = iter.next();
127                         Set<SESEEffectsKey> effectSet = writeTable.get(td);
128                         String keyStr = "{";
129                         if (effectSet != null) {
130                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
131                                 while (effectIter.hasNext()) {
132                                         SESEEffectsKey key = effectIter.next();
133                                         keyStr += " " + key;
134                                 }
135                         } 
136                         keyStr+=" }";
137                         writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
138                 }
139                 
140                 keySet = strongUpdateTable.keySet();
141                 iter = keySet.iterator();
142                 while (iter.hasNext()) {
143                         TempDescriptor td = iter.next();
144                         Set<SESEEffectsKey> effectSet = strongUpdateTable.get(td);
145                         String keyStr = "{";
146                         if (effectSet != null) {
147                                 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
148                                 while (effectIter.hasNext()) {
149                                         SESEEffectsKey key = effectIter.next();
150                                         keyStr += " " + key;
151                                 }
152                         } 
153                         keyStr+=" }";
154                         writer.write("Live-in Var " + td + " StrongUpdate=" + keyStr+"\n");
155                 }
156                 
157                 return writer.toString();
158
159         }
160
161         public boolean equals(Object o) {
162                 if (o == null) {
163                         return false;
164                 }
165
166                 if (!(o instanceof SESEEffectsSet)) {
167                         return false;
168                 }
169
170                 SESEEffectsSet in = (SESEEffectsSet) o;
171
172                 if (getReadTable().equals(in.getReadTable())
173                                 && getWriteTable().equals(in.getWriteTable())
174                                 && getStrongUpdateTable().equals(in.getStrongUpdateTable())) {
175                         return true;
176                 } else {
177                         return false;
178                 }
179
180         }
181
182         public int hashCode() {
183                 int hash = 1;
184
185                 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31 +getStrongUpdateTable().hashCode();
186
187                 return hash;
188         }
189 }