integrate typeanalysis
authorbdemsky <bdemsky>
Sat, 18 Apr 2009 01:17:08 +0000 (01:17 +0000)
committerbdemsky <bdemsky>
Sat, 18 Apr 2009 01:17:08 +0000 (01:17 +0000)
Robust/src/Analysis/Locality/DiscoverConflicts.java
Robust/src/Analysis/Locality/TypeAnalysis.java
Robust/src/IR/Flat/BuildCode.java

index 4db3435236306315422e01ff6368ea86c5a7b476..9f35c7cc027d86af7a29d613449631f50b81c76e 100644 (file)
@@ -20,12 +20,14 @@ public class DiscoverConflicts {
   Hashtable<LocalityBinding, Set<FlatNode>> treadmap;
   Hashtable<LocalityBinding, Set<TempFlatPair>> transreadmap;
   Hashtable<LocalityBinding, Set<FlatNode>> srcmap;
-    
-  public DiscoverConflicts(LocalityAnalysis locality, State state) {
+  TypeAnalysis typeanalysis;
+  
+  public DiscoverConflicts(LocalityAnalysis locality, State state, TypeAnalysis typeanalysis) {
     this.locality=locality;
     this.fields=new HashSet<FieldDescriptor>();
     this.arrays=new HashSet<TypeDescriptor>();
     this.state=state;
+    this.typeanalysis=typeanalysis;
     transreadmap=new Hashtable<LocalityBinding, Set<TempFlatPair>>();
     treadmap=new Hashtable<LocalityBinding, Set<FlatNode>>();
     srcmap=new Hashtable<LocalityBinding, Set<FlatNode>>();
@@ -56,7 +58,12 @@ public class DiscoverConflicts {
   }
 
   public void expandTypes() {
-    //FIX ARRAY...compute super/sub sets of each so we can do simple membership test
+    Set<TypeDescriptor> expandedarrays=new HashSet<TypeDescriptor>();
+    for(Iterator<TypeDescriptor> it=arrays.iterator();it.hasNext();) {
+      TypeDescriptor td=it.next();
+      expandedarrays.addAll(typeanalysis.expand(td));
+    }
+    arrays=expandedarrays;
   }
 
   Hashtable<TempDescriptor, Set<TempFlatPair>> doMerge(FlatNode fn, Hashtable<FlatNode, Hashtable<TempDescriptor, Set<TempFlatPair>>> tmptofnset) {
index beba82034fc2e65843845d01ab8793cc47e88d78..e90b860f9a60f15a51d9c38099e339cae772f758 100644 (file)
@@ -92,6 +92,10 @@ public class TypeAnalysis {
     return namemap.get(td);
   }
 
+  public boolean couldAlias(TypeDescriptor td1, TypeDescriptor td2) {
+    return namemap.get(td1).contains(td2);
+  }
+
   public void addMapping(TypeDescriptor src, TypeDescriptor dst) {
     if (!map.containsKey(src))
       map.put(src, new HashSet<TypeDescriptor>());
@@ -145,9 +149,9 @@ public class TypeAnalysis {
        if (fc.getReturnTemp()!=null) {
          addMapping(fc.getMethod().getReturnType(), fc.getReturnTemp().getType());
        }
+       MethodDescriptor callmd=fc.getMethod();
        if (fc.getThis()!=null) {
          //complicated...need to deal with virtual dispatch here
-         MethodDescriptor callmd=fc.getMethod();
          Set methods=cg.getMethods(callmd);
          for(Iterator mdit=methods.iterator();mdit.hasNext();) {
            MethodDescriptor md2=(MethodDescriptor)mdit.next();
@@ -162,7 +166,7 @@ public class TypeAnalysis {
        }
        for(int i=0;i<fc.numArgs();i++) {
          TempDescriptor arg=fc.getArg(i);
-         TypeDescriptor ptype=md.getParamType(i);
+         TypeDescriptor ptype=callmd.getParamType(i);
          addMapping(arg.getType(), ptype);
        }
        break;
index fcba393d28bca0d0479aa9322995551f758389fd..2c91f1226ebab9ec0003d8d5562e24e987be212d 100644 (file)
@@ -21,6 +21,7 @@ import Analysis.Locality.DiscoverConflicts;
 import Analysis.CallGraph.CallGraph;
 import Analysis.Prefetch.*;
 import Analysis.Loops.WriteBarrier;
+import Analysis.Locality.TypeAnalysis;
 
 public class BuildCode {
   State state;
@@ -86,7 +87,8 @@ public class BuildCode {
       this.wb=new WriteBarrier(locality, st);
     }
     if (state.SINGLETM&&state.DCOPTS) {
-      this.dc=new DiscoverConflicts(locality, st);
+      TypeAnalysis typeanalysis=new TypeAnalysis(locality, st, typeutil,callgraph);
+      this.dc=new DiscoverConflicts(locality, st, typeanalysis);
       dc.doAnalysis();
     }