adjustments to stack-based method scheduling, debug controls, a micro benchmark,...
[IRC.git] / Robust / src / IR / State.java
index 5ceca0f87adce4f8333e1456e49eb49c2138cb85..e12612dc72ca73e12b1e0d0a3c1600d9aa7270cc 100644 (file)
@@ -6,6 +6,8 @@ import java.util.*;
 import Analysis.TaskStateAnalysis.*;
 
 public class State {
+
+    public int lines;
   public State() {
     this.classes=new SymbolTable();
     this.tasks=new SymbolTable();
@@ -17,6 +19,8 @@ public class State {
     this.tagmap=new Hashtable();
     this.selfloops=new HashSet();
     this.excprefetch=new HashSet();
+    this.classpath=new Vector();
+    this.lines=0;
   }
 
   public void addParseNode(ParseNode parsetree) {
@@ -44,9 +48,9 @@ public class State {
   /** Boolean flag which indicates whether compiler is compiling a task-based
    * program. */
   public boolean WEBINTERFACE=false;
+  public boolean MINIMIZE=false;
   public boolean TASK=false;
   public boolean FASTCHECK=false;
-  public boolean DSM=false;
   public boolean PREFETCH=false;
   public boolean TASKSTATE=false;
   public boolean TAGSTATE=false;
@@ -54,29 +58,97 @@ public class State {
   public boolean FLATIRGRAPHTASKS=false;
   public boolean FLATIRGRAPHUSERMETHODS=false;
   public boolean FLATIRGRAPHLIBMETHODS=false;
-  public boolean MULTICORE=false;
   public boolean OWNERSHIP=false;
   public int OWNERSHIPALLOCDEPTH=3;
   public boolean OWNERSHIPWRITEDOTS=false;
   public boolean OWNERSHIPWRITEALL=false;
   public String OWNERSHIPALIASFILE=null;
+  public boolean OWNERSHIPALIASTAB=false;
+  public int OWNERSHIPDEBUGCALLCOUNT=0;
+  public String OWNERSHIPDEBUGCALLEE=null;
+  public String OWNERSHIPDEBUGCALLER=null;
+  
+  public boolean DISJOINT=false;
+  public boolean DISJOINTRELEASEMODE=false;
+  public boolean DISJOINTDETERMINISM=false;
+  public int DISJOINTALLOCDEPTH=3;
+  public boolean DISJOINTWRITEDOTS=false;
+  public boolean DISJOINTWRITEALL=false;
+  public boolean DISJOINTWRITEIHMS=false;
+  public String DISJOINTALIASFILE=null;
+  public boolean DISJOINTALIASTAB=false;
+
+  public String DISJOINTDEBUGCALLEE=null;
+  public String DISJOINTDEBUGCALLER=null;
+  public int DISJOINTDEBUGCALLVISITTOSTART=0;
+  public int DISJOINTDEBUGCALLNUMVISITS=0;
+  public boolean DISJOINTDEBUGCALLSTOPAFTER=false;
+
+  public String DISJOINTSNAPSYMBOL=null;
+  public int DISJOINTSNAPVISITTOSTART=0;
+  public int DISJOINTSNAPNUMVISITS=0;
+  public boolean DISJOINTSNAPSTOPAFTER=false;
+
+  public boolean DISJOINTDVISITSTACK=true;
+  public boolean DISJOINTDVISITPQUE=false;
+  public boolean DISJOINTDVISITSTACKEESONTOP=false;
+
+  public boolean DISJOINTDEBUGSCHEDULING=false;
+
   public boolean OPTIONAL=false;
-  public boolean RAW=false;
-  public boolean SCHEDULING=false;
-  public boolean USEPROFILE=false;
+  public boolean ARRAYPAD=false;
   public boolean THREAD=false;
   public boolean CONSCHECK=false;
   public boolean INSTRUCTIONFAILURE=false;
+  public boolean MLP=false;
+  public boolean MLPDEBUG=false;
+  public int MLP_NUMCORES=0;
+  public int MLP_MAXSESEAGE=0;
+  public boolean METHODEFFECTS=false;
   public static double TRUEPROB=0.8;
   public static boolean PRINTFLAT=false;
+  
+  //DSM options
+  public boolean DSM=false;
+  public boolean DSMTASK=false;
+  public static boolean ABORTREADERS=false;
+
+  // Recovery Stats Options
+  public boolean DSMRECOVERYSTATS=false;
+  //STM options
+  public boolean EVENTMONITOR=false;
+  public static boolean STMARRAY=false;
+  public static boolean SINGLETM=false;
+  public static boolean READSET=false;
+  public boolean SANDBOX=false;
+  public boolean DCOPTS=false;
+  public boolean DELAYCOMP=false;
+  public boolean DUALVIEW=false;
+  public boolean HYBRID=false;
+  
+  // Bamboo options
+  public boolean MULTICORE=false;
+  public boolean MULTICOREGC=false;
+  public boolean BAMBOOCOMPILETIME = false;
+  public boolean ARRAYBOUNDARYCHECK=true;
+  public boolean RAW=false;
+  public boolean SCHEDULING=false;
+  public boolean USEPROFILE=false;
   public static boolean PRINTSCHEDULING=false;
   public static boolean PRINTSCHEDULESIM=false;
+  public static boolean PRINTCRITICALPATH=false;
   public int CORENUM = 1;
+  public int CORENUM4GC = 0;
+  public String profilename = null;
+  public String outputdir = "/scratch/";
+  //Other options
   public String structfile;
   public String main;
-
+  public boolean INLINEATOMIC=false;
+  public int inlineatomicdepth;
   public HashSet selfloops;
   public HashSet excprefetch;
+  public Vector classpath;
   public SymbolTable classes;
   public SymbolTable tasks;
   public Set parsetrees;
@@ -84,11 +156,10 @@ public class State {
   public Hashtable flatmethodmap;
   private HashSet arraytypes;
   public Hashtable arraytonumber;
-  private int numclasses=0;
+  private int numclasses=1; // start from 1 instead of 0 for multicore gc
   private int numtasks=0;
   private int arraycount=0;
-
-
+  public boolean OPTIMIZE=false;
 
   private Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors;
   private Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> analysisresults;
@@ -119,7 +190,7 @@ public class State {
   public int getArrayNumber(TypeDescriptor td) {
     if (arraytonumber.containsKey(td))
       return ((Integer)arraytonumber.get(td)).intValue();
-    else throw new Error("Could not find array type:" + td.toPrettyString());
+    else return -1;
   }
 
   public int numArrays() {
@@ -175,6 +246,19 @@ public class State {
     return (FlatMethod)flatmethodmap.get(td);
   }
 
+  // The descriptor is either a method or task desc
+  // and should call one of the above methods
+  public FlatMethod getMethodFlat(Descriptor d) {
+    FlatMethod fm;
+    if( d instanceof MethodDescriptor ) {
+      fm = getMethodFlat( (MethodDescriptor) d);
+    } else {
+      assert d instanceof TaskDescriptor;
+      fm = getMethodFlat( (TaskDescriptor) d);
+    }
+    return fm;
+  }
+
   public void addTreeCode(MethodDescriptor md, BlockNode bn) {
     treemethodmap.put(md,bn);
   }