3 import java.util.HashSet;
4 import java.util.Hashtable;
5 import java.util.Iterator;
8 import Analysis.OwnershipAnalysis.ReachabilitySet;
9 import Analysis.OwnershipAnalysis.TokenTupleSet;
10 import IR.Flat.TempDescriptor;
12 public class ParentChildConflictsMap {
14 public static final Integer ACCESSIBLE = new Integer(1);
15 public static final Integer INACCESSIBLE = new Integer(2);
17 private Hashtable<TempDescriptor, Integer> accessibleMap;
18 private Hashtable<TempDescriptor, StallSite> stallMap;
20 public ParentChildConflictsMap() {
22 accessibleMap = new Hashtable<TempDescriptor, Integer>();
23 stallMap = new Hashtable<TempDescriptor, StallSite>();
27 public Hashtable<TempDescriptor, Integer> getAccessibleMap() {
31 public Hashtable<TempDescriptor, StallSite> getStallMap() {
35 public void addAccessibleVar(TempDescriptor td) {
36 accessibleMap.put(td, ACCESSIBLE);
39 public void addInaccessibleVar(TempDescriptor td) {
40 accessibleMap.put(td, INACCESSIBLE);
43 public void addStallSite(TempDescriptor td) {
44 StallSite stallSite = new StallSite();
45 stallMap.put(td, stallSite);
48 public boolean isAccessible(TempDescriptor td) {
49 if (accessibleMap.contains(td)
50 && accessibleMap.get(td).equals(ACCESSIBLE)) {
56 public void contributeEffect(TempDescriptor td, String type, String field,
59 StallSite stallSite = stallMap.get(td);
60 if (stallSite != null) {
61 stallSite.addEffect(type, field, effect);
66 public void merge(ParentChildConflictsMap newConflictsMap) {
68 Hashtable<TempDescriptor, Integer> newAccessibleMap = newConflictsMap
70 Hashtable<TempDescriptor, StallSite> newStallMap = newConflictsMap
73 Set<TempDescriptor> keySet = newAccessibleMap.keySet();
74 for (Iterator<TempDescriptor> iterator = keySet.iterator(); iterator
76 TempDescriptor key = iterator.next();
78 Integer newStatus = newAccessibleMap.get(key);
80 // inaccessible is prior to accessible
81 Integer currentStatus = getAccessibleMap().get(key);
82 if (currentStatus != null && currentStatus == ACCESSIBLE
83 && newStatus == INACCESSIBLE) {
84 getAccessibleMap().put(key, INACCESSIBLE);
88 keySet = newStallMap.keySet();
89 for (Iterator<TempDescriptor> iterator = keySet.iterator(); iterator
91 TempDescriptor key = iterator.next();
93 StallSite newStallSite = newStallMap.get(key);
94 StallSite currentStallSite = getStallMap().get(key);
97 HashSet<Effect> currentEffectSet = currentStallSite.getEffectSet();
98 HashSet<Effect> newEffectSet = newStallSite.getEffectSet();
99 for (Iterator iterator2 = newEffectSet.iterator(); iterator2
101 Effect effect = (Effect) iterator2.next();
102 if (!currentEffectSet.contains(effect)) {
103 currentEffectSet.add(effect);
107 // handle heap region
108 HashSet<Integer> currentHRNSet = currentStallSite.getHRNIDSet();
109 HashSet<Integer> newHRNSet = newStallSite.getHRNIDSet();
110 for (Iterator iterator2 = newHRNSet.iterator(); iterator2.hasNext();) {
111 Integer hrnID = (Integer) iterator2.next();
112 if (!currentHRNSet.contains(hrnID)) {
113 currentHRNSet.add(hrnID);
117 // handle reachabilitySet
118 ReachabilitySet currentRSet = currentStallSite.getReachabilitySet();
119 ReachabilitySet newRSet = newStallSite.getReachabilitySet();
120 Iterator<TokenTupleSet> ttsIter = newRSet.iterator();
121 while (ttsIter.hasNext()) {
122 TokenTupleSet tokenTupleSet = (TokenTupleSet) ttsIter.next();
123 currentRSet.add(tokenTupleSet);
129 new StallSite(currentEffectSet, currentHRNSet,