More pieces for new version of analysis
[IRC.git] / Robust / src / Analysis / MLP / LiveInNode.java
1 package Analysis.MLP;
2
3 import java.util.HashSet;
4 import java.util.Iterator;
5 import java.util.Set;
6
7 import Analysis.OwnershipAnalysis.HeapRegionNode;
8 import IR.Flat.TempDescriptor;
9
10 public class LiveInNode extends ConflictNode {
11
12         Set<SESEEffectsKey> readEffectsSet;
13         Set<SESEEffectsKey> writeEffectsSet;
14         Set<SESEEffectsKey> strongUpdateSet;
15         Set<HeapRegionNode> hrnSet;
16         int seseID;
17
18         public LiveInNode(String id, TempDescriptor td, Set<HeapRegionNode> hrnSet,
19                         Set<SESEEffectsKey> readEffectsSet,
20                         Set<SESEEffectsKey> writeEffectsSet, Set<SESEEffectsKey> strongUpdateSet, Set<Set> reachabilitySet, int seseID) {
21                 this.hrnSet = hrnSet;
22                 this.id = id;
23                 this.td = td;
24                 this.readEffectsSet = readEffectsSet;
25                 this.writeEffectsSet = writeEffectsSet;
26                 this.strongUpdateSet=strongUpdateSet;
27                 this.reachabilitySet = reachabilitySet;
28                 this.seseID=seseID;
29         }
30
31         public Set<HeapRegionNode> getHRNSet() {
32                 return hrnSet;
33         }
34
35         public Set<SESEEffectsKey> getReadEffectsSet() {
36                 return readEffectsSet;
37         }
38
39         public Set<SESEEffectsKey> getWriteEffectsSet() {
40                 return writeEffectsSet;
41         }
42         
43         public Set<SESEEffectsKey> getStrongUpdateSet(){
44                 return strongUpdateSet;
45         }
46
47         public void addReadEffectsSet(Set<SESEEffectsKey> newReadEffectsSet) {
48                 if (newReadEffectsSet != null) {
49                         readEffectsSet.addAll(newReadEffectsSet);
50                 }
51         }
52
53         public void addWriteEffectsSet(Set<SESEEffectsKey> newWriteEffectsSet) {
54                 if (newWriteEffectsSet != null) {
55                         writeEffectsSet.addAll(newWriteEffectsSet);
56                 }
57         }
58
59         public void addReachabilitySet(Set<Set> newReachabilitySet) {
60                 if (newReachabilitySet != null) {
61                         reachabilitySet.addAll(newReachabilitySet);
62                 }
63         }
64
65         public boolean isWriteConflictWith(StallSiteNode stallNode) {
66
67                 // if live-in var has write-effects on heap region node of stall site,
68                 // it is write conflict
69
70                 boolean result = false;
71                 StallSite stallSite = stallNode.getStallSite();
72
73                 if (writeEffectsSet != null) {
74                         Iterator<SESEEffectsKey> writeIter = writeEffectsSet.iterator();
75                         while (writeIter.hasNext()) {
76                                 SESEEffectsKey seseEffectsKey = (SESEEffectsKey) writeIter
77                                                 .next();
78                                 String writeHeapRegionID = seseEffectsKey.getHRNUniqueId();
79                                 String writeFieldName = seseEffectsKey.getFieldDescriptor();
80
81                                 HashSet<HeapRegionNode> stallSiteHRNSet = stallNode.getHRNSet();
82                                 for (Iterator iterator = stallSiteHRNSet.iterator(); iterator
83                                                 .hasNext();) {
84                                         HeapRegionNode stallHRN = (HeapRegionNode) iterator.next();
85                                         if (stallHRN.getGloballyUniqueIdentifier().equals(
86                                                         writeHeapRegionID)) {
87
88                                                 // check whether there are read or write effects of
89                                                 // stall sites
90
91                                                 HashSet<Effect> effectSet = stallSite.getEffectSet();
92                                                 for (Iterator iterator2 = effectSet.iterator(); iterator2
93                                                                 .hasNext();) {
94                                                         Effect effect = (Effect) iterator2.next();
95                                                         String stallEffectfieldName = effect.getField();
96
97                                                         if (stallEffectfieldName.equals(writeFieldName)) {
98                                                                 result = result | true;
99                                                         }
100                                                 }
101
102                                         }
103                                 }
104
105                         }
106                 }
107
108                 if (readEffectsSet != null) {
109                         Iterator<SESEEffectsKey> readIter = readEffectsSet.iterator();
110                         while (readIter.hasNext()) {
111
112                                 SESEEffectsKey seseEffectsKey = (SESEEffectsKey) readIter
113                                                 .next();
114                                 String readHeapRegionID = seseEffectsKey.getHRNUniqueId();
115                                 String readFieldName = seseEffectsKey.getFieldDescriptor();
116
117                                 HashSet<HeapRegionNode> stallSiteHRNSet = stallNode.getHRNSet();
118                                 for (Iterator iterator = stallSiteHRNSet.iterator(); iterator
119                                                 .hasNext();) {
120                                         HeapRegionNode stallHRN = (HeapRegionNode) iterator.next();
121                                         if (stallHRN.getGloballyUniqueIdentifier().equals(
122                                                         readHeapRegionID)) {
123
124                                                 HashSet<Effect> effectSet = stallSite.getEffectSet();
125                                                 for (Iterator iterator2 = effectSet.iterator(); iterator2
126                                                                 .hasNext();) {
127                                                         Effect effect = (Effect) iterator2.next();
128                                                         String stallEffectfieldName = effect.getField();
129
130                                                         if (effect.getEffectType().equals(
131                                                                         StallSite.WRITE_EFFECT)) {
132                                                                 if (stallEffectfieldName.equals(readFieldName)) {
133                                                                         result = result | true;
134                                                                 }
135                                                         }
136
137                                                 }
138
139                                         }
140
141                                 }
142
143                         }
144                 }
145
146                 return result;
147         }
148         
149         public int getSESEIdentifier(){
150                 return seseID;
151         }
152
153         public boolean equals(Object o) {
154
155                 if (o == null) {
156                         return false;
157                 }
158
159                 if (!(o instanceof LiveInNode)) {
160                         return false;
161                 }
162
163                 LiveInNode in = (LiveInNode) o;
164
165                 if (id.equals(in.id)) {
166                         return true;
167                 } else {
168                         return false;
169                 }
170
171         }
172
173         public String toString() {
174                 String str = "LiveInNode " + id +" type="+type;
175                 return str;
176         }
177
178 }