import IR.Tree.BuildIR;
import IR.Tree.JavaBuilder;
import IR.Tree.SemanticCheck;
-import IR.Flat.BuildCodeMultiCore;
-import IR.Flat.BuildCodeMGC;
-import IR.Flat.BuildFlat;
-import IR.Flat.BuildCode;
-import IR.Flat.BuildCodeTran;
-import IR.Flat.BuildOoOJavaCode;
+import IR.Flat.*;
import IR.Flat.Inliner;
import IR.ClassDescriptor;
import IR.State;
import Analysis.Liveness;
import Analysis.ArrayReferencees;
import Analysis.Pointer.Pointer;
+import Analysis.Disjoint.HeapAnalysis;
import IR.MethodDescriptor;
import IR.Flat.FlatMethod;
import Interface.*;
String outputdir = null;
boolean isDistributeInfo = false;
boolean isDisAll = false;
- int startnum = 0;
+ int startnum = 0;
for(int i=0; i<args.length; i++) {
state.MULTICORE=true;
else if (option.equals("-multicoregc"))
state.MULTICOREGC=true;
+ else if (option.equals("-pmc"))
+ state.PMC=true;
else if (option.equals("-mgc")) {
state.MGC = true;
} else if (option.equals("-objectlockdebug")) {
} else if (option.equals("-disjoint-write-ihms")) {
state.DISJOINTWRITEIHMS = true;
+ } else if (option.equals("-disjoint-write-all-node-graphs")) {
+ state.DISJOINT_WRITE_ALL_NODE_FINAL_GRAPHS = true;
+
} else if (option.equals("-disjoint-alias-file")) {
state.DISJOINTALIASFILE = args[++i];
String arg = args[++i];
throw new Error("disjoint-debug-callsite requires arguments:\n"+
" <callee symbol> <caller symbol> <# visit to start> <# visits to capture> <T/F stop after>");
}
+ System.out.println( "Disjoint analysis is debugging when "+
+ state.DISJOINTDEBUGCALLER+" calls "+
+ state.DISJOINTDEBUGCALLEE+" starting after "+
+ state.DISJOINTDEBUGCALLVISITTOSTART+" visits and running for "+
+ state.DISJOINTDEBUGCALLNUMVISITS+ " visits." );
} else if (option.equals("-disjoint-debug-snap-method")) {
state.DISJOINTSNAPSYMBOL=args[++i];
} else if( option.equals("-disjoint-debug-scheduling") ) {
state.DISJOINTDEBUGSCHEDULING = true;
+
+
+ } else if( option.equals("-pointsto-check-v-runtime") ) {
+ state.POINTSTO_CHECK_V_RUNTIME = true;
+
+
+ } else if( option.equals("-do-definite-reach-analysis") ) {
+ state.DO_DEFINITE_REACH_ANALYSIS = true;
+
+
+ } else if( option.equals("-disjoint-disable-global-sweep") ) {
+ state.DISJOINT_USE_GLOBAL_SWEEP = false;
+
+ } else if( option.equals("-disjoint-disable-strong-update") ) {
+ state.DISJOINT_USE_STRONG_UPDATE = false;
+
+ } else if( option.equals("-disjoint-disable-predicates") ) {
+ state.DISJOINT_USE_PREDICATES = false;
+
+ } else if( option.equals("-disjoint-summarize-per-class") ) {
+ state.DISJOINT_SUMMARIZE_PER_CLASS = true;
+
+
+ } else if( option.equals("-disjoint-count-visits") ) {
+ state.DISJOINT_COUNT_VISITS = true;
+
+ } else if( option.equals("-disjoint-count-graph-elements") ) {
+ state.DISJOINT_COUNT_GRAPH_ELEMENTS = true;
+ state.DISJOINT_COUNT_GRAPH_ELEMENTS_FILE = args[++i];
+
} else if (option.equals("-optional"))
state.OPTIONAL=true;
else if (option.equals("-optimize"))
state.KEEP_RG_FOR_ALL_PROGRAM_POINTS=true;
} else if (option.equals("-nostalltr")) {
state.NOSTALLTR = true;
+
} else if (option.equals("-ssjava")) {
state.SSJAVA = true;
- } else if (option.equals("-printlinenum")) {
+ state.SSJAVA_GENCODE_PREVENT_CRASHES = true;
+
+ } else if (option.equals("-ssjavadebug")) {
+ state.SSJAVADEBUG = true;
+ } else if (option.equals("-ssjavainfer")) {
+ state.SSJAVAINFER= true;
+ } else if( option.equals( "-ssjava-inject-error" ) ) {
+ state.SSJAVA_GENCODE_PREVENT_CRASHES = true;
+ state.SSJAVA_INJECT_ERROR = true;
+ state.SSJAVA_INV_ERROR_PROB = Integer.parseInt( args[++i] );
+ state.SSJAVA_ERROR_SEED = Integer.parseInt( args[++i] );
+
+ // special case, if the inverse prob is 0, turn off errors
+ if( state.SSJAVA_INV_ERROR_PROB == 0 ) {
+ state.SSJAVA_INJECT_ERROR = false;
+ }
+
+
+ }else if (option.equals("-printlinenum")) {
state.LINENUM=true;
} else if (option.equals("-help")) {
System.out.println("-classlibrary classlibrarydirectory -- directory where classlibrary is located");
State.logEvent("Done Parsing Commands");
System.out.println("Classpath: "+state.classpath);
- SSJavaAnalysis ssjava=new SSJavaAnalysis(state);
+
TypeUtil tu;
BuildFlat bf;
SafetyAnalysis sa=null;
PrefetchAnalysis pa=null;
OoOJavaAnalysis oooa=null;
+ HeapAnalysis heapAnalysis=null;
+
if (state.INLINEATOMIC) {
Iterator classit=state.getClassSymbolTable().getDescriptorsIterator();
while(classit.hasNext()) {
CallGraph callgraph=jb!=null?jb:(state.TASK?new BaseCallGraph(state, tu):new JavaCallGraph(state, tu));
// SSJava
+ SSJavaAnalysis ssjava=new SSJavaAnalysis(state,tu,bf,callgraph);
if(state.SSJAVA) {
ssjava.doCheck();
State.logEvent("Done SSJava Checking");
continue;
cp.optimize(fm);
dc.optimize(fm);
- if (!state.NOLOOP)
+ if (!state.NOLOOP){
+ lo.analyze(fm);
lo.optimize(fm);
+ }
+
+
cp.optimize(fm);
dc.optimize(fm);
lcse.doAnalysis(fm);
}
}
State.logEvent("Done Optimizing");
+
}
if (state.FLATIRGRAPH) {
Liveness l = new Liveness();
ArrayReferencees ar = new ArrayReferencees(state, tu, callgraph);
DisjointAnalysis da = new DisjointAnalysis(state, tu, callgraph, l, ar, null, null);
+ heapAnalysis = da;
}
if (state.OOOJAVA) {
Liveness l = new Liveness();
ArrayReferencees ar = new ArrayReferencees(state, tu, callgraph);
oooa = new OoOJavaAnalysis(state, tu, callgraph, l, ar);
+ heapAnalysis = oooa.getHeapAnalysis();
}
}
}
+ if( (state.OOOJAVA || state.POINTSTO_CHECK_V_RUNTIME) &&
+ heapAnalysis != null ) {
+ // use this extension to generate the allocsite field of Object and
+ // ArrayObject for whatever other extensions and systems need it
+ BCXallocsiteObjectField bcx = new BCXallocsiteObjectField( bc, tu, heapAnalysis );
+ bc.registerExtension( bcx );
+ }
+
+ if( state.POINTSTO_CHECK_V_RUNTIME &&
+ heapAnalysis != null ) {
+ BCXPointsToCheckVRuntime bcx = new BCXPointsToCheckVRuntime( state, bc, tu, heapAnalysis );
+ bc.registerExtension( bcx );
+ }
+
+ if( state.SSJAVA_INJECT_ERROR ) {
+ BCXSSJavaInjectError bcx = new BCXSSJavaInjectError( state, bc );
+ bc.registerExtension( bcx );
+ }
+
bc.buildCode();
State.logEvent("Done With BuildCode");
public static ParseNode readSourceFile(State state, String sourcefile) {
try {
Reader fr= new BufferedReader(new FileReader(sourcefile));
- Lex.Lexer l = new Lex.Lexer(fr, state.TASK);
+ Lex.Lexer l = new Lex.Lexer(fr, state.TASK, state.DSM);
java_cup.runtime.lr_parser g;
g = new Parse.Parser(l);
ParseNode p=null;