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 Set<SESEEffectsKey> getStrongUpdateSet(TempDescriptor td){
99 return strongUpdateTable.get(td);
102 public String printSet() {
104 StringWriter writer=new StringWriter();
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);
112 if (effectSet != null) {
113 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
114 while (effectIter.hasNext()) {
115 SESEEffectsKey key = effectIter.next();
120 writer.write("Live-in Var " + td + " Read=" + keyStr+"\n");
123 keySet = writeTable.keySet();
124 iter = keySet.iterator();
125 while (iter.hasNext()) {
126 TempDescriptor td = iter.next();
127 Set<SESEEffectsKey> effectSet = writeTable.get(td);
129 if (effectSet != null) {
130 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
131 while (effectIter.hasNext()) {
132 SESEEffectsKey key = effectIter.next();
137 writer.write("Live-in Var " + td + " Write=" + keyStr+"\n");
140 keySet = strongUpdateTable.keySet();
141 iter = keySet.iterator();
142 while (iter.hasNext()) {
143 TempDescriptor td = iter.next();
144 Set<SESEEffectsKey> effectSet = strongUpdateTable.get(td);
146 if (effectSet != null) {
147 Iterator<SESEEffectsKey> effectIter = effectSet.iterator();
148 while (effectIter.hasNext()) {
149 SESEEffectsKey key = effectIter.next();
154 writer.write("Live-in Var " + td + " StrongUpdate=" + keyStr+"\n");
157 return writer.toString();
161 public boolean equals(Object o) {
166 if (!(o instanceof SESEEffectsSet)) {
170 SESEEffectsSet in = (SESEEffectsSet) o;
172 if (getReadTable().equals(in.getReadTable())
173 && getWriteTable().equals(in.getWriteTable())
174 && getStrongUpdateTable().equals(in.getStrongUpdateTable())) {
182 public int hashCode() {
185 hash += getReadTable().hashCode() + getWriteTable().hashCode() * 31 +getStrongUpdateTable().hashCode();