From: jjenista Date: Mon, 6 Apr 2009 21:48:08 +0000 (+0000) Subject: Move mlp and sese stuff into a separate compiler pass X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f945e8b3c7ac44f4a58c1e5388429735e0d298e6;p=IRC.git Move mlp and sese stuff into a separate compiler pass --- diff --git a/Robust/src/Analysis/MLP/MLPAnalysis.java b/Robust/src/Analysis/MLP/MLPAnalysis.java new file mode 100644 index 00000000..8b0a17ba --- /dev/null +++ b/Robust/src/Analysis/MLP/MLPAnalysis.java @@ -0,0 +1,62 @@ +package Analysis.MLP; + +import Analysis.CallGraph.*; +import Analysis.OwnershipAnalysis.*; +import IR.*; +import IR.Flat.*; +import java.util.*; +import java.io.*; + + +public class MLPAnalysis { + + // data from the compiler + private State state; + private TypeUtil typeUtil; + private CallGraph callGraph; + private OwnershipAnalysis ownAnalysis; + + public MLPAnalysis(State state, + TypeUtil tu, + CallGraph callGraph, + OwnershipAnalysis ownAnalysis + ) { + + double timeStartAnalysis = (double) System.nanoTime(); + + this.state = state; + this.typeUtil = tu; + this.callGraph = callGraph; + this.ownAnalysis = ownAnalysis; + + + double timeEndAnalysis = (double) System.nanoTime(); + double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) ); + String treport = String.format( "The mlp analysis took %.3f sec.", dt ); + System.out.println( treport ); + } + + + Stack seseStack; + + protected void analyze() { + seseStack = new Stack(); + + /* + if( !seseStack.empty() ) { + seseStack.peek().addInVar( tmp ); + seseStack.peek().addOutVar( out_temp ); + } + */ + + /* + if( !seseStack.empty() ) { + throw new Error("Error: return statement enclosed within SESE "+seseStack.peek()); + } + */ + + /* + + */ + } +} diff --git a/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java b/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java index e7128a88..14a099bf 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java +++ b/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java @@ -417,7 +417,7 @@ public class OwnershipAnalysis { double timeEndAnalysis = (double) System.nanoTime(); double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) ); - String treport = String.format( "The analysis took %.3f sec.", dt ); + String treport = String.format( "The reachability analysis took %.3f sec.", dt ); System.out.println( treport ); if( writeDOTs && !writeAllDOTs ) { diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 3fdcebea..e595193f 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -38,7 +38,6 @@ public class BuildCode { public static String PREFIX=""; public static String arraytype="ArrayObject"; public static int flagcount = 0; - public boolean MLP=false; Virtual virtualcalls; TypeUtil typeutil; protected int maxtaskparams=0; @@ -79,8 +78,6 @@ public class BuildCode { this.backuptable=new Hashtable>(); this.wb=new WriteBarrier(locality, st); } - - this.MLP=st.MLP; } /** The buildCode method outputs C code for all the methods. The Flat @@ -1441,6 +1438,9 @@ public class BuildCode { } else if(current_node.numNext()==1) { output.print(" "); generateFlatNode(fm, lb, current_node, output); + if (state.MLP && current_node.kind()==FKind.FlatSESEEnterNode) { + current_node=((FlatSESEEnterNode)current_node).getFlatExit(); + } FlatNode nextnode=current_node.getNext(0); if (visited.contains(nextnode)) { output.println("goto L"+nodetolabel.get(nextnode)+";"); @@ -1532,11 +1532,11 @@ public class BuildCode { return; case FKind.FlatSESEEnterNode: - if( MLP ) generateFlatSESEEnterNode(fm, lb, (FlatSESEEnterNode) fn, output); + if( state.MLP ) generateFlatSESEEnterNode(fm, lb, (FlatSESEEnterNode) fn, output); return; case FKind.FlatSESEExitNode: - if( MLP ) generateFlatSESEExitNode(fm, lb, (FlatSESEExitNode) fn, output); + if( state.MLP ) generateFlatSESEExitNode(fm, lb, (FlatSESEExitNode) fn, output); return; case FKind.FlatGlobalConvNode: @@ -1897,12 +1897,34 @@ public class BuildCode { output.println("}"); } + + public void generateSESE(FlatMethod fm, LocalityBinding lb, FlatSESEEnterNode faen, PrintWriter output) { + + } + + public void generateFlatSESEEnterNode(FlatMethod fm, LocalityBinding lb, FlatSESEEnterNode faen, PrintWriter output) { - output.println("mlpEnqueue( (struct SESE*)0 );"); + /* + output.println("struct sese"+faen.getPrettyIdentifier()+"in {"); + Iterator itr = faen.getInVarSet().iterator(); + while( itr.hasNext() ) { + TempDescriptor td = itr.next(); + output.println(" "+td+";"); + } + output.println("}"); + + output.println("struct sese"+faen.getPrettyIdentifier()+"out {"); + itr = faen.getOutVarSet().iterator(); + while( itr.hasNext() ) { + TempDescriptor td = itr.next(); + output.println(" "+td+";"); + } + output.println("}"); + */ } public void generateFlatSESEExitNode(FlatMethod fm, LocalityBinding lb, FlatSESEExitNode faen, PrintWriter output) { - output.println("mlpNotifyExit( (struct SESE*)0 );"); + //output.println("mlpNotifyExit( (struct SESE*)0 );"); } private void generateFlatCheckNode(FlatMethod fm, LocalityBinding lb, FlatCheckNode fcn, PrintWriter output) { diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index 681afda2..307aa993 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -1083,7 +1083,8 @@ public class BuildFlat { FlatSESEExitNode fsexn=new FlatSESEExitNode(sn); sn.setFlatExit(fsexn); - fsexn.setFlatEnter( sn.getStart().getFlatEnter() ); + FlatSESEEnterNode fsen=sn.getStart().getFlatEnter(); + fsexn.setFlatEnter(fsen); sn.getStart().getFlatEnter().setFlatExit( fsexn ); return new NodePair(fsexn, fsexn); } diff --git a/Robust/src/IR/Flat/FlatSESEEnterNode.java b/Robust/src/IR/Flat/FlatSESEEnterNode.java index 7c521a3d..6b17aacc 100644 --- a/Robust/src/IR/Flat/FlatSESEEnterNode.java +++ b/Robust/src/IR/Flat/FlatSESEEnterNode.java @@ -1,21 +1,52 @@ package IR.Flat; import IR.Tree.SESENode; -import java.util.Vector; +import java.util.HashSet; public class FlatSESEEnterNode extends FlatNode { private static int identifier=0; private int id; protected FlatSESEExitNode exit; protected SESENode treeNode; + protected HashSet inVars; + protected HashSet outVars; public FlatSESEEnterNode( SESENode sn ) { - this.id=identifier++; - treeNode = sn; + this.id = identifier++; + treeNode = sn; + inVars = new HashSet(); + outVars = new HashSet(); } + public void rewriteUse() { } + public void rewriteDef() { } + + public void addInVar( TempDescriptor td ) { + inVars.add( td ); + } + + public void addOutVar( TempDescriptor td ) { + outVars.add( td ); + } + + public void addInVarSet( HashSet s ) { + inVars.addAll( s ); + } + + public void addOutVarSet( HashSet s ) { + outVars.addAll( s ); + } + + public HashSet getInVarSet() { + return inVars; + } + + public HashSet getOutVarSet() { + return outVars; + } + public SESENode getTreeNode() { return treeNode; } diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index 0e193ef8..a6b88127 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -40,6 +40,7 @@ import Analysis.Locality.GenerateConversions; import Analysis.Prefetch.PrefetchAnalysis; import Analysis.FlatIRGraph.FlatIRGraph; import Analysis.OwnershipAnalysis.OwnershipAnalysis; +import Analysis.MLP.MLPAnalysis; import Analysis.Loops.*; import IR.MethodDescriptor; import IR.Flat.FlatMethod; @@ -229,7 +230,7 @@ public class Main { sc.getClass("TagDescriptor"); } if (state.THREAD||state.DSM||state.SINGLETM) { - sc.getClass("Thread"); + sc.getClass("Thread"); } sc.semanticCheck(); @@ -268,7 +269,41 @@ public class Main { } } + if (state.FLATIRGRAPH) { + FlatIRGraph firg = new FlatIRGraph(state, + state.FLATIRGRAPHTASKS, + state.FLATIRGRAPHUSERMETHODS, + state.FLATIRGRAPHLIBMETHODS); + } + if (state.OWNERSHIP && !state.MLP) { + CallGraph callGraph = new CallGraph(state); + OwnershipAnalysis oa = new OwnershipAnalysis(state, + tu, + callGraph, + state.OWNERSHIPALLOCDEPTH, + state.OWNERSHIPWRITEDOTS, + state.OWNERSHIPWRITEALL, + state.OWNERSHIPALIASFILE); + } + + if (state.MLP) { + // gotta run this to have mlp turned on + assert state.OWNERSHIP; + + CallGraph callGraph = new CallGraph(state); + OwnershipAnalysis oa = new OwnershipAnalysis(state, + tu, + callGraph, + state.OWNERSHIPALLOCDEPTH, + state.OWNERSHIPWRITEDOTS, + state.OWNERSHIPWRITEALL, + state.OWNERSHIPALIASFILE); + MLPAnalysis mlpa = new MLPAnalysis(state, + tu, + callGraph, + oa); + } if (state.TAGSTATE) { CallGraph callgraph=new CallGraph(state); @@ -358,25 +393,6 @@ public class Main { } } - if (state.FLATIRGRAPH) { - FlatIRGraph firg = new FlatIRGraph(state, - state.FLATIRGRAPHTASKS, - state.FLATIRGRAPHUSERMETHODS, - state.FLATIRGRAPHLIBMETHODS); - } - - if (state.OWNERSHIP) { - CallGraph callGraph = new CallGraph(state); - OwnershipAnalysis oa = new OwnershipAnalysis(state, - tu, - callGraph, - state.OWNERSHIPALLOCDEPTH, - state.OWNERSHIPWRITEDOTS, - state.OWNERSHIPWRITEALL, - state.OWNERSHIPALIASFILE); - } - - System.out.println("Lines="+state.lines); System.exit(0); } diff --git a/Robust/src/Makefile b/Robust/src/Makefile index 7179fd3a..a86f8fe8 100644 --- a/Robust/src/Makefile +++ b/Robust/src/Makefile @@ -87,6 +87,7 @@ Analysis/OwnershipAnalysis/ChangeTuple.class \ Analysis/OwnershipAnalysis/ChangeTupleSet.class \ Analysis/OwnershipAnalysis/Canonical.class \ Analysis/OwnershipAnalysis/MethodContext.class \ +Analysis/MLP/MLPAnalysis.class \ Util/GraphNode.class Util/Namer.class Util/Relation.class \ Interface/HTTPHeader.class Interface/HTTPResponse.class \ Interface/HTTPServices.class Interface/HashStrings.class \ @@ -118,6 +119,7 @@ JAVAFILES=IR/*.java \ Analysis/Loops/*.java \ Analysis/Locality/*.java \ Analysis/OwnershipAnalysis/*.java \ + Analysis/MLP/*.java \ Analysis/Prefetch/*.java \ Analysis/Scheduling/*.java \ Analysis/TaskStateAnalysis/*.java \ @@ -168,13 +170,13 @@ mytabbing: javadoc: mkdir javadoc - javadoc -classpath ../cup:.:$(CLASSPATH) -sourcepath . -private -d javadoc Lex Util IR IR.Tree IR.Flat Analysis Analysis.CallGraph Analysis.Flag Analysis.TaskStateAnalysis Analysis.Locality Analysis.Prefetch Main Analysis.OwnershipAnalysis Analysis.Scheduling + javadoc -classpath ../cup:.:$(CLASSPATH) -sourcepath . -private -d javadoc Lex Util IR IR.Tree IR.Flat Analysis Analysis.CallGraph Analysis.Flag Analysis.TaskStateAnalysis Analysis.Locality Analysis.Prefetch Main Analysis.OwnershipAnalysis Analysis.MLP Analysis.Scheduling clean: - rm -f IR/*.class IR/Tree/*.class Main/*.class Lex/*.class Parse/*.class Parse/Sym.java Parse/Parser.java IR/Flat/*.class classdefs.h methodheaders.h methods.c structdefs.h virtualtable.h task.h taskdefs.c taskdefs.h Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class Analysis/TaskStateAnalysis/*.class Interface/*.class Util/*.class Analysis/Locality/*.class Analysis/Prefetch/*.class Analysis/FlatIRGraph/*.class Analysis/OwnershipAnalysis/*.class Analysis/Scheduling/*.class Analysis/Loops/*.class + rm -f IR/*.class IR/Tree/*.class Main/*.class Lex/*.class Parse/*.class Parse/Sym.java Parse/Parser.java IR/Flat/*.class classdefs.h methodheaders.h methods.c structdefs.h virtualtable.h task.h taskdefs.c taskdefs.h Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class Analysis/TaskStateAnalysis/*.class Interface/*.class Util/*.class Analysis/Locality/*.class Analysis/Prefetch/*.class Analysis/FlatIRGraph/*.class Analysis/OwnershipAnalysis/*.class Analysis/MLP/*.class Analysis/Scheduling/*.class Analysis/Loops/*.class cleanclass: - rm -f IR/*.class IR/Tree/*.class Main/*.class IR/Flat/*.class Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class Analysis/TaskStateAnalysis/*.class Interface/*.class Util/*.class Analysis/Locality/*.class Analysis/Prefetch/*.class Analysis/FlatIRGraph/*.class Analysis/OwnershipAnalysis/*.class Analysis/Scheduling/*.class Analysis/Loops/*.class + rm -f IR/*.class IR/Tree/*.class Main/*.class IR/Flat/*.class Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class Analysis/TaskStateAnalysis/*.class Interface/*.class Util/*.class Analysis/Locality/*.class Analysis/Prefetch/*.class Analysis/FlatIRGraph/*.class Analysis/OwnershipAnalysis/*.class Analysis/MLP/*.class Analysis/Scheduling/*.class Analysis/Loops/*.class cleandoc: rm -rf javadoc diff --git a/Robust/src/Tests/mlp/tinyTest/makefile b/Robust/src/Tests/mlp/tinyTest/makefile index 402bc180..a62898ae 100644 --- a/Robust/src/Tests/mlp/tinyTest/makefile +++ b/Robust/src/Tests/mlp/tinyTest/makefile @@ -4,6 +4,7 @@ SOURCE_FILES=$(PROGRAM).java BUILDSCRIPT=~/research/Robust/src/buildscript BSFLAGS= -mlp -mainclass Test -ownership -ownallocdepth 1 -ownwritedots final -enable-assertions -flatirusermethods -ownaliasfile aliases.txt #-justanalyze -recover +#BSFLAGS= -mainclass Test -ownership -ownallocdepth 1 -ownwritedots final -enable-assertions -flatirusermethods -ownaliasfile aliases.txt #-justanalyze -recover all: $(PROGRAM).bin