changes
authorbdemsky <bdemsky>
Mon, 15 Jun 2009 23:49:31 +0000 (23:49 +0000)
committerbdemsky <bdemsky>
Mon, 15 Jun 2009 23:49:31 +0000 (23:49 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/State.java
Robust/src/IR/Tree/SemanticCheck.java
Robust/src/IR/TypeDescriptor.java
Robust/src/Main/Main.java

index 10845a51cf750647d00f3ac8ed67ff50ca4fa6d0..0df10c511d8476d4cd2806f83fa2d364be26b858 100644 (file)
@@ -19,9 +19,11 @@ import Analysis.TaskStateAnalysis.TaskIndex;
 import Analysis.Locality.LocalityAnalysis;
 import Analysis.Locality.LocalityBinding;
 import Analysis.Locality.DiscoverConflicts;
+import Analysis.Locality.DelayComputation;
 import Analysis.CallGraph.CallGraph;
 import Analysis.Prefetch.*;
 import Analysis.Loops.WriteBarrier;
+import Analysis.Loops.GlobalFieldType;
 import Analysis.Locality.TypeAnalysis;
 import Analysis.MLP.MLPAnalysis;
 
@@ -62,6 +64,7 @@ public class BuildCode {
   boolean nonSESEpass=true;
   WriteBarrier wb;
   DiscoverConflicts dc;
+  DelayComputation delaycomp;
   CallGraph callgraph;
 
   public BuildCode(State st, Hashtable temptovar, TypeUtil typeutil, SafetyAnalysis sa, PrefetchAnalysis pa) {
@@ -102,6 +105,14 @@ public class BuildCode {
       this.dc=new DiscoverConflicts(locality, st, typeanalysis);
       dc.doAnalysis();
     }
+    if (state.SINGLETM&&state.DELAYCOMP) {
+      TypeAnalysis typeanalysis=new TypeAnalysis(locality, st, typeutil,callgraph);
+      GlobalFieldType gft=new GlobalFieldType(callgraph, st, typeutil.getMain());
+      delaycomp=new DelayComputation(locality, st, typeanalysis, gft);
+      delaycomp.doAnalysis();
+    }
+
+
     if(state.MLP) {
       sese2bogusFlatMeth = new Hashtable<FlatSESEEnterNode, FlatMethod>();
     }
index 011a1756c0c5eecb52a70f42e29cc14eeaedcb72..e739dd88303bde7766717e192a6ebefdd8231b85 100644 (file)
@@ -101,6 +101,7 @@ public class State {
   private int arraycount=0;
   public boolean OPTIMIZE=false;
   public boolean DCOPTS=false;
+  public boolean DELAYCOMP=false;
 
 
   private Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors;
index 389fc208c49398b6855134c7b17f6a4710d0f0f6..731ffd4acc48232b545c3ac850fc268fa662c110 100644 (file)
@@ -524,7 +524,6 @@ public class SemanticCheck {
 
     checkExpressionNode(md,nametable,aan.getIndex(),new TypeDescriptor(TypeDescriptor.INT));
     TypeDescriptor ltd=left.getType();
-
     if (ltd.dereference().iswrapper()) {
       aan.wrappertype=((FieldDescriptor)ltd.dereference().getClassDesc().getFieldTable().get("value")).getType();
     }
@@ -1042,8 +1041,12 @@ NextMethod:
     case Operation.GTE:
       // 5.6.2 Binary Numeric Promotion
       //TODO unboxing of reference objects
-      if (!ltd.isNumber()||!rtd.isNumber())
-       throw new Error();
+      if (!ltd.isNumber()||!rtd.isNumber()) {
+       if (!ltd.isNumber())
+         throw new Error("Leftside is not number"+on.printNode(0)+"type="+ltd.toPrettyString());
+       if (!rtd.isNumber())
+         throw new Error("Rightside is not number"+on.printNode(0));
+      }
 
       if (ltd.isDouble()||rtd.isDouble())
        lefttype=new TypeDescriptor(TypeDescriptor.DOUBLE);
index 4ee6857061b497325928a45e06945bd598f03d0c..7725f61070dd1d5d36fea460a88f225ef52525f7 100644 (file)
@@ -58,7 +58,7 @@ public class TypeDescriptor extends Descriptor {
   }
 
   public boolean iswrapper() {
-    if (arraycount!=0||isClass())
+    if (arraycount!=0||!isClass())
       return false;
     return (name.equals("bytewrapper")||
            name.equals("booleanwrapper")||
index 45625edf109f0fe4a71ed9872e26c483aa306d58..a2ae4294092c4d03d1b521ed11e8f4eb04feda27 100644 (file)
@@ -135,7 +135,9 @@ public class Main {
        state.OPTIMIZE=true;
       else if (option.equals("-dcopts"))
        state.DCOPTS=true;
-         else if (option.equals("-raw"))
+      else if (option.equals("-delaycomp"))
+       state.DELAYCOMP=true;
+      else if (option.equals("-raw"))
        state.RAW=true;
       else if (option.equals("-scheduling"))
        state.SCHEDULING=true;