X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FMain%2FMain.java;h=748c0027fa06bdfcf33a21ecfae53e671574d0e8;hb=e33201f8be840c89d9e1994a2e742bf01ca8ff0c;hp=a2ae4294092c4d03d1b521ed11e8f4eb04feda27;hpb=bc5be4d1d65be3f4564fcdc675f8b332553ce243;p=IRC.git diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index a2ae4294..748c0027 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -17,6 +17,7 @@ import IR.Tree.SemanticCheck; import IR.Flat.BuildCodeMultiCore; import IR.Flat.BuildFlat; import IR.Flat.BuildCode; +import IR.Flat.Inliner; import IR.ClassDescriptor; import IR.State; import IR.TaskDescriptor; @@ -40,8 +41,11 @@ import Analysis.Locality.GenerateConversions; import Analysis.Prefetch.PrefetchAnalysis; import Analysis.FlatIRGraph.FlatIRGraph; import Analysis.OwnershipAnalysis.OwnershipAnalysis; +import Analysis.Disjoint.DisjointAnalysis; import Analysis.MLP.MLPAnalysis; import Analysis.Loops.*; +import Analysis.Liveness; +import Analysis.ArrayReferencees; import IR.MethodDescriptor; import IR.Flat.FlatMethod; import Interface.*; @@ -61,6 +65,8 @@ public class Main { String outputdir = null; boolean isDistributeInfo = false; + boolean isDisAll = false; + int startnum = 0; for(int i=0; i"); + } + } else if (option.equals("-disjoint-alias-file")) { + state.DISJOINTALIASFILE = args[++i]; + String arg = args[++i]; + if( arg.equals("normal") ) { + state.DISJOINTALIASTAB = false; + } else if( arg.equals("tabbed") ) { + state.DISJOINTALIASTAB = true; + } else { + throw new Error("disjoint-alias-file requires arguments "); + } + } else if (option.equals("-disjoint-debug-callsite")) { + state.DISJOINTDEBUGCALLEE=args[++i]; + state.DISJOINTDEBUGCALLER=args[++i]; + state.DISJOINTDEBUGCALLCOUNT=Integer.parseInt(args[++i]); + } else if (option.equals("-optional")) state.OPTIONAL=true; else if (option.equals("-optimize")) state.OPTIMIZE=true; else if (option.equals("-dcopts")) state.DCOPTS=true; + else if (option.equals("-arraypad")) + state.ARRAYPAD=true; else if (option.equals("-delaycomp")) state.DELAYCOMP=true; else if (option.equals("-raw")) @@ -143,28 +210,45 @@ public class Main { state.SCHEDULING=true; else if (option.equals("-distributioninfo")) isDistributeInfo=true; - else if (option.equals("-useprofile")) + else if (option.equals("-disall")) + isDisAll=true; + else if (option.equals("-disstart")) + startnum = Integer.parseInt(args[++i]); + else if (option.equals("-useprofile")) { state.USEPROFILE=true; + state.profilename = args[++i]; + } else if (option.equals("-thread")) state.THREAD=true; else if (option.equals("-dsm")) state.DSM=true; + else if (option.equals("-recoverystats")) + state.DSMRECOVERYSTATS=true; + else if (option.equals("-dsmtask")) + state.DSMTASK=true; else if (option.equals("-singleTM")) state.SINGLETM=true; + else if (option.equals("-readset")) + state.READSET=true; else if (option.equals("-webinterface")) state.WEBINTERFACE=true; else if (option.equals("-instructionfailures")) state.INSTRUCTIONFAILURE=true; else if (option.equals("-abcclose")) state.ARRAYBOUNDARYCHECK=false; + else if (option.equals("-mlp")) { - state.MLP=true; - state.OWNERSHIP=true; + state.MLP = true; + state.OWNERSHIP = true; + state.MLP_NUMCORES = Integer.parseInt( args[++i] ); + state.MLP_MAXSESEAGE = Integer.parseInt( args[++i] ); + } else if (option.equals("-mlpdebug")) { - state.MLP=true; state.MLPDEBUG=true; - state.OWNERSHIP=true; - } else if (option.equals("-help")) { + + } else if (option.equals("-methodeffects")) { + state.METHODEFFECTS=true; + }else if (option.equals("-help")) { System.out.println("-classlibrary classlibrarydirectory -- directory where classlibrary is located"); System.out.println("-selfloop task -- this task doesn't self loop its parameters forever"); System.out.println("-dir outputdirectory -- output code in outputdirectory"); @@ -194,8 +278,8 @@ public class Main { System.out.println("-optional -- enable optional arguments"); System.out.println("-abcclose close the array boundary check"); System.out.println("-scheduling do task scheduling"); - System.out.println("-mlp build mlp code"); - System.out.println("-mlp build mlp code, report progress and interim results"); + System.out.println("-mlp build mlp code"); + System.out.println("-mlpdebug if mlp, report progress and interim results"); System.out.println("-multicore generate multi-core version binary"); System.out.println("-numcore set the number of cores (should be used together with -multicore), defaultly set as 1"); System.out.println("-interrupt generate raw version binary with interruption (should be used togethere with -raw)"); @@ -213,7 +297,7 @@ public class Main { sourcefiles.add(args[i]); } } - + //add default classpath if (state.classpath.size()==1) state.classpath.add(ClassLibraryPrefix); @@ -251,6 +335,20 @@ public class Main { SafetyAnalysis sa=null; PrefetchAnalysis pa=null; MLPAnalysis mlpa=null; + if (state.INLINEATOMIC) { + Iterator classit=state.getClassSymbolTable().getDescriptorsIterator(); + while(classit.hasNext()) { + ClassDescriptor cn=(ClassDescriptor)classit.next(); + Iterator methodit=cn.getMethods(); + while(methodit.hasNext()) { + // do inlining + MethodDescriptor md=(MethodDescriptor)methodit.next(); + FlatMethod fm=state.getMethodFlat(md); + Inliner.inlineAtomic(state, tu, fm, state.inlineatomicdepth); + } + } + } + if (state.OPTIMIZE) { CallGraph callgraph=new CallGraph(state); @@ -271,47 +369,68 @@ public class Main { cp.optimize(fm); dc.optimize(fm); lo.optimize(fm); + cp.optimize(fm); + dc.optimize(fm); lcse.doAnalysis(fm); cse.doAnalysis(fm); cp.optimize(fm); dc.optimize(fm); + cp.optimize(fm); + dc.optimize(fm); } } } - + if (state.FLATIRGRAPH) { FlatIRGraph firg = new FlatIRGraph(state, state.FLATIRGRAPHTASKS, state.FLATIRGRAPHUSERMETHODS, state.FLATIRGRAPHLIBMETHODS); } - + if (state.OWNERSHIP && !state.MLP) { CallGraph callGraph = new CallGraph(state); + Liveness liveness = new Liveness(); + ArrayReferencees ar = new ArrayReferencees(state); OwnershipAnalysis oa = new OwnershipAnalysis(state, tu, callGraph, + liveness, + ar, state.OWNERSHIPALLOCDEPTH, state.OWNERSHIPWRITEDOTS, state.OWNERSHIPWRITEALL, - state.OWNERSHIPALIASFILE); + state.OWNERSHIPALIASFILE, + state.METHODEFFECTS); } if (state.MLP) { CallGraph callGraph = new CallGraph(state); + Liveness liveness = new Liveness(); + ArrayReferencees ar = new ArrayReferencees(state); OwnershipAnalysis oa = new OwnershipAnalysis(state, tu, callGraph, + liveness, + ar, state.OWNERSHIPALLOCDEPTH, state.OWNERSHIPWRITEDOTS, state.OWNERSHIPWRITEALL, - state.OWNERSHIPALIASFILE); + state.OWNERSHIPALIASFILE, + state.METHODEFFECTS); mlpa = new MLPAnalysis(state, tu, callGraph, oa); } + if (state.DISJOINT) { + CallGraph cg = new CallGraph(state); + Liveness l = new Liveness(); + ArrayReferencees ar = new ArrayReferencees(state); + DisjointAnalysis oa = new DisjointAnalysis(state, tu, cg, l, ar); + } + if (state.TAGSTATE) { CallGraph callgraph=new CallGraph(state); TagAnalysis taganalysis=new TagAnalysis(state, callgraph); @@ -345,9 +464,13 @@ public class Main { if (state.SCHEDULING) { // Use ownership analysis to get alias information CallGraph callGraph = new CallGraph(state); + Liveness liveness = new Liveness(); + ArrayReferencees ar = new ArrayReferencees(state); OwnershipAnalysis oa = new OwnershipAnalysis(state, tu, callGraph, + liveness, + ar, state.OWNERSHIPALLOCDEPTH, state.OWNERSHIPWRITEDOTS, state.OWNERSHIPWRITEALL, @@ -358,7 +481,7 @@ public class Main { ta, oa); if(isDistributeInfo) { - mcImplSynthesis.distribution(); + mcImplSynthesis.distribution(isDisAll, startnum); } else { //double timeStartAnalysis = (double) System.nanoTime(); mcImplSynthesis.setScheduleThreshold(20); @@ -369,6 +492,7 @@ public class Main { //double timeEndAnalysis = (double) System.nanoTime(); //double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) ); //System.err.println("The analysis took" + dt + "sec."); + //System.exit(0); // generate multicore codes if(state.MULTICORE) { @@ -378,6 +502,7 @@ public class Main { sa, scheduling, mcImplSynthesis.getCoreNum(), + state.CORENUM4GC, pa); bcm.setOwnershipAnalysis(oa); bcm.buildCode(); @@ -410,8 +535,18 @@ public class Main { } public static void loadClass(State state, BuildIR bir, String sourcefile) { - ParseNode pn=readSourceFile(state, sourcefile); - bir.buildtree(pn, null); + try { + ParseNode pn=readSourceFile(state, sourcefile); + bir.buildtree(pn, null); + } catch (Exception e) { + System.out.println("Error in sourcefile:"+sourcefile); + e.printStackTrace(); + System.exit(-1); + } catch (Error e) { + System.out.println("Error in sourcefile:"+sourcefile); + e.printStackTrace(); + System.exit(-1); + } } /** Reads in a source file and adds the parse tree to the state object. */