3 import java.io.StringWriter;
4 import java.util.HashSet;
5 import java.util.Hashtable;
6 import java.util.Iterator;
9 import IR.Flat.TempDescriptor;
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;
16 public SESEEffectsSet() {
17 readTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
18 writeTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
19 strongUpdateTable = new Hashtable<TempDescriptor, HashSet<SESEEffectsKey>>();
22 public void addReadingVar(TempDescriptor td, SESEEffectsKey access) {
23 HashSet<SESEEffectsKey> aSet = readTable.get(td);
25 aSet = new HashSet<SESEEffectsKey>();
29 readTable.put(td, aSet);
32 public void addReadingEffectsSet(TempDescriptor td,
33 HashSet<SESEEffectsKey> newSet) {
36 HashSet<SESEEffectsKey> aSet = readTable.get(td);
38 aSet = new HashSet<SESEEffectsKey>();
41 readTable.put(td, aSet);
46 public void addWritingEffectsSet(TempDescriptor td,
47 HashSet<SESEEffectsKey> newSet) {
50 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
52 aSet = new HashSet<SESEEffectsKey>();
55 writeTable.put(td, aSet);
60 public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getReadTable() {
64 public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getWriteTable() {
68 public Hashtable<TempDescriptor, HashSet<SESEEffectsKey>> getStrongUpdateTable() {
69 return strongUpdateTable;
72 public void addWritingVar(TempDescriptor td, SESEEffectsKey access) {
73 HashSet<SESEEffectsKey> aSet = writeTable.get(td);
75 aSet = new HashSet<SESEEffectsKey>();
78 writeTable.put(td, aSet);
81 public void addStrongUpdateVar(TempDescriptor td, SESEEffectsKey access) {
82 HashSet<SESEEffectsKey> aSet = strongUpdateTable.get(td);
84 aSet = new HashSet<SESEEffectsKey>();
87 strongUpdateTable.put(td, aSet);
90 public Set<SESEEffectsKey> getReadingSet(TempDescriptor td) {
91 return readTable.get(td);
94 public Set<SESEEffectsKey> getWritingSet(TempDescriptor td) {
95 return writeTable.get(td);
98 public String printSet() {
100 StringWriter writer=new StringWriter();
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);
108 if (effectSet != null) {
109 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
110 while (effectIter.hasNext()) {
111 SESEEffectsKey key = effectIter.next();
116 writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
119 keySet = writeTable.keySet();
120 iter = keySet.iterator();
121 while (iter.hasNext()) {
122 TempDescriptor td = iter.next();
123 Set<SESEEffectsKey> effectSet = writeTable.get(td);
125 if (effectSet != null) {
126 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
127 while (effectIter.hasNext()) {
128 SESEEffectsKey key = effectIter.next();
133 writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
136 keySet = strongUpdateTable.keySet();
137 iter = keySet.iterator();
138 while (iter.hasNext()) {
139 TempDescriptor td = iter.next();
140 Set<SESEEffectsKey> effectSet = strongUpdateTable.get(td);
142 if (effectSet != null) {
143 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
144 while (effectIter.hasNext()) {
145 SESEEffectsKey key = effectIter.next();
150 writer.write("Live-in Var " + td + " StrongUpdate=" + keyStr+"\n");
153 return writer.toString();
157 public boolean equals(Object o) {
162 if (!(o instanceof SESEEffectsSet)) {
166 SESEEffectsSet in = (SESEEffectsSet) o;
168 if (getReadTable().equals(in.getReadTable())
169 && getWriteTable().equals(in.getWriteTable())
170 && getStrongUpdateTable().equals(in.getStrongUpdateTable())) {
178 public int hashCode() {
181 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31 +getStrongUpdateTable().hashCode();