3 import Analysis.CallGraph.*;
4 import Analysis.OwnershipAnalysis.*;
11 public class MLPAnalysis {
13 // data from the compiler
15 private TypeUtil typeUtil;
16 private CallGraph callGraph;
17 private OwnershipAnalysis ownAnalysis;
19 public MLPAnalysis(State state,
22 OwnershipAnalysis ownAnalysis
25 double timeStartAnalysis = (double) System.nanoTime();
29 this.callGraph = callGraph;
30 this.ownAnalysis = ownAnalysis;
33 double timeEndAnalysis = (double) System.nanoTime();
34 double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) );
35 String treport = String.format( "The mlp analysis took %.3f sec.", dt );
36 System.out.println( treport );
40 Stack<FlatSESEEnterNode> seseStack;
42 protected void analyze() {
43 seseStack = new Stack<FlatSESEEnterNode>();
46 if( !seseStack.empty() ) {
47 seseStack.peek().addInVar( tmp );
48 seseStack.peek().addOutVar( out_temp );
53 if( !seseStack.empty() ) {
54 throw new Error("Error: return statement enclosed within SESE "+seseStack.peek());
60 FlatSESEEnterNode fsen=new FlatSESEEnterNode(sn);
61 sn.setFlatEnter(fsen);
63 return new NodePair(fsen, fsen);
66 FlatSESEExitNode fsexn=new FlatSESEExitNode(sn);
67 sn.setFlatExit(fsexn);
68 FlatSESEEnterNode fsen=sn.getStart().getFlatEnter();
69 fsexn.setFlatEnter(fsen);
70 sn.getStart().getFlatEnter().setFlatExit( fsexn );
71 assert !seseStack.empty();
72 assert fsen == seseStack.pop();
73 if( !seseStack.empty() ) {
74 seseStack.peek().addInVarSet ( fsen.getInVarSet() );
75 seseStack.peek().addOutVarSet( fsen.getOutVarSet() );