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 void addStallSite(TempDescriptor td, StallSite stallSite) {
49 stallMap.put(td, stallSite);
52 public boolean hasStallSite(TempDescriptor td){
53 return stallMap.containsKey(td);
56 public boolean isAccessible(TempDescriptor td) {
57 if (accessibleMap.containsKey(td)
58 && accessibleMap.get(td).equals(ACCESSIBLE)) {
64 public void contributeEffect(TempDescriptor td, String type, String field,
67 StallSite stallSite = stallMap.get(td);
68 if (stallSite != null) {
69 stallSite.addEffect(type, field, effect);
74 public void merge(ParentChildConflictsMap newConflictsMap) {
76 Hashtable<TempDescriptor, Integer> newAccessibleMap = newConflictsMap
78 Hashtable<TempDescriptor, StallSite> newStallMap = newConflictsMap
81 Set<TempDescriptor> keySet = newAccessibleMap.keySet();
82 for (Iterator<TempDescriptor> iterator = keySet.iterator(); iterator
84 TempDescriptor key = iterator.next();
86 Integer newStatus = newAccessibleMap.get(key);
88 // inaccessible is prior to accessible
89 Integer currentStatus = getAccessibleMap().get(key);
90 if (currentStatus != null && currentStatus == ACCESSIBLE
91 && newStatus == INACCESSIBLE) {
92 getAccessibleMap().put(key, INACCESSIBLE);
96 keySet = newStallMap.keySet();
97 for (Iterator<TempDescriptor> iterator = keySet.iterator(); iterator
99 TempDescriptor key = iterator.next();
101 StallSite newStallSite = newStallMap.get(key);
102 StallSite currentStallSite = getStallMap().get(key);
105 HashSet<Effect> currentEffectSet = currentStallSite.getEffectSet();
106 HashSet<Effect> newEffectSet = newStallSite.getEffectSet();
107 for (Iterator iterator2 = newEffectSet.iterator(); iterator2
109 Effect effect = (Effect) iterator2.next();
110 if (!currentEffectSet.contains(effect)) {
111 currentEffectSet.add(effect);
115 // handle heap region
116 HashSet<Integer> currentHRNSet = currentStallSite.getHRNIDSet();
117 HashSet<Integer> newHRNSet = newStallSite.getHRNIDSet();
118 for (Iterator iterator2 = newHRNSet.iterator(); iterator2.hasNext();) {
119 Integer hrnID = (Integer) iterator2.next();
120 if (!currentHRNSet.contains(hrnID)) {
121 currentHRNSet.add(hrnID);
125 // handle reachabilitySet
126 ReachabilitySet currentRSet = currentStallSite.getReachabilitySet();
127 ReachabilitySet newRSet = newStallSite.getReachabilitySet();
128 Iterator<TokenTupleSet> ttsIter = newRSet.iterator();
129 while (ttsIter.hasNext()) {
130 TokenTupleSet tokenTupleSet = (TokenTupleSet) ttsIter.next();
131 currentRSet.add(tokenTupleSet);
137 new StallSite(currentEffectSet, currentHRNSet,