adjustments to stack-based method scheduling, debug controls, a micro benchmark,...
[IRC.git] / Robust / src / IR / State.java
index dcf54b21ef76d37fac87382d1f7b9cb2c4e58a00..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();
@@ -18,6 +20,7 @@ public class State {
     this.selfloops=new HashSet();
     this.excprefetch=new HashSet();
     this.classpath=new Vector();
+    this.lines=0;
   }
 
   public void addParseNode(ParseNode parsetree) {
@@ -45,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;
@@ -55,29 +58,94 @@ 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 ARRAYBOUNDARYCHECK=true;
-  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 ABORTREADERS=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;
@@ -88,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;
@@ -179,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);
   }