commit out Jim's code so the compiler in CVS will compile.
[IRC.git] / Robust / src / Main / Main.java
1 package Main;
2
3 import java.io.Reader;
4 import java.io.BufferedReader;
5 import java.io.FileReader;
6 import java.util.Vector;
7
8 import IR.Tree.ParseNode;
9 import IR.Tree.BuildIR;
10 import IR.Tree.SemanticCheck;
11 import IR.Flat.BuildFlat;
12 import IR.Flat.BuildCode;
13 import IR.State;
14 import IR.TypeUtil;
15 import Analysis.Scheduling.ScheduleAnalysis;
16 import Analysis.Scheduling.ScheduleEdge;
17 import Analysis.TaskStateAnalysis.TaskAnalysis;
18 import Analysis.TaskStateAnalysis.TaskGraph;
19 import Analysis.CallGraph.CallGraph;
20 import Analysis.TaskStateAnalysis.TagAnalysis;
21 import Analysis.TaskStateAnalysis.GarbageAnalysis;
22 import Analysis.TaskStateAnalysis.ExecutionGraph;
23 import Analysis.TaskStateAnalysis.SafetyAnalysis;
24 import Analysis.Locality.LocalityAnalysis;
25 import Analysis.Locality.GenerateConversions;
26 import Analysis.Prefetch.PrefetchAnalysis;
27 import Analysis.FlatIRGraph.FlatIRGraph;
28 import Analysis.OwnershipAnalysis.OwnershipAnalysis;
29 import Interface.*;
30
31 public class Main {
32
33     /** Main method for the compiler.  */
34
35   public static void main(String args[]) throws Exception {
36       String ClassLibraryPrefix="./ClassLibrary/";
37       State state=new State();
38
39       for(int i=0;i<args.length;i++) {
40           String option=args[i];
41           if (option.equals("-precise"))
42               IR.Flat.BuildCode.GENERATEPRECISEGC=true;
43           else if (option.equals("-prefetch"))
44               state.PREFETCH=true;
45           else if (option.equals("-dir"))
46               IR.Flat.BuildCode.PREFIX=args[++i]+"/";
47           else if (option.equals("-selfloop"))
48               state.selfloops.add(args[++i]);
49           else if (option.equals("-classlibrary"))
50               ClassLibraryPrefix=args[++i]+"/";
51           else if (option.equals("-mainclass"))
52               state.main=args[++i];
53           else if (option.equals("-struct"))
54               state.structfile=args[++i];
55           else if (option.equals("-conscheck"))
56               state.CONSCHECK=true;
57           else if (option.equals("-task"))
58               state.TASK=true;
59           else if (option.equals("-taskstate"))
60               state.TASKSTATE=true;
61           else if (option.equals("-flatirtasks")) {
62               state.FLATIRGRAPH=true;
63               state.FLATIRGRAPHTASKS=true;
64           }
65           else if (option.equals("-flatirusermethods")) {
66               state.FLATIRGRAPH=true;
67               state.FLATIRGRAPHUSERMETHODS=true;
68           }
69           else if (option.equals("-flatirlibmethods")) {
70               state.FLATIRGRAPH=true;
71               state.FLATIRGRAPHLIBMETHODS=true;
72           }
73           else if (option.equals("-ownership"))
74               state.OWNERSHIP=true;
75           else if (option.equals("-optional"))
76               state.OPTIONAL=true;
77           else if (option.equals("-scheduling"))
78                   state.SCHEDULING=true; 
79           else if (option.equals("-thread"))
80               state.THREAD=true;
81           else if (option.equals("-dsm"))
82               state.DSM=true;
83           else if (option.equals("-webinterface"))
84               state.WEBINTERFACE=true;
85           else if (option.equals("-instructionfailures"))
86               state.INSTRUCTIONFAILURE=true;
87           else if (option.equals("-help")) {
88               System.out.println("-classlibrary classlibrarydirectory -- directory where classlibrary is located");
89               System.out.println("-selfloop task -- this task doesn't self loop its parameters forever");
90               System.out.println("-dir outputdirectory -- output code in outputdirectory");
91               System.out.println("-struct structfile -- output structure declarations for repair tool");
92               System.out.println("-mainclass -- main function to call");
93               System.out.println("-dsm -- distributed shared memory support");
94               System.out.println("-precise -- use precise garbage collection");
95               System.out.println("-conscheck -- turn on consistency checking");
96               System.out.println("-task -- compiler for tasks");
97               System.out.println("-thread -- threads");
98               System.out.println("-instructionfailures -- insert code for instruction level failures");
99               System.out.println("-taskstate -- do task state analysis");
100               System.out.println("-flatirtasks -- create dot files for flat IR graphs of tasks");
101               System.out.println("-flatirusermethods -- create dot files for flat IR graphs of user methods");
102               System.out.println("-flatirlibmethods -- create dot files for flat IR graphs of library class methods");
103               System.out.println("  note: -flatirusermethods or -flatirlibmethods currently generate all class method flat IR graphs");
104               System.out.println("-ownership -- do ownership analysis");
105               System.out.println("-optional -- enable optional arguments");
106               System.out.println("-webinterface -- enable web interface");
107               System.out.println("-help -- print out help");
108               System.exit(0);
109           } else {
110               readSourceFile(state, args[i]);
111           }
112       }
113       
114
115       readSourceFile(state, ClassLibraryPrefix+"System.java");
116       readSourceFile(state, ClassLibraryPrefix+"String.java");
117       readSourceFile(state, ClassLibraryPrefix+"HashSet.java");
118       readSourceFile(state, ClassLibraryPrefix+"HashMap.java");
119       readSourceFile(state, ClassLibraryPrefix+"HashMapIterator.java");
120       readSourceFile(state, ClassLibraryPrefix+"HashEntry.java");
121       readSourceFile(state, ClassLibraryPrefix+"Integer.java");
122       readSourceFile(state, ClassLibraryPrefix+"StringBuffer.java");
123       readSourceFile(state, ClassLibraryPrefix+"FileInputStream.java");
124       readSourceFile(state, ClassLibraryPrefix+"InputStream.java");
125       readSourceFile(state, ClassLibraryPrefix+"OutputStream.java");
126       readSourceFile(state, ClassLibraryPrefix+"FileOutputStream.java");
127       readSourceFile(state, ClassLibraryPrefix+"File.java");
128       readSourceFile(state, ClassLibraryPrefix+"Math.java");
129       readSourceFile(state, ClassLibraryPrefix+"InetAddress.java");
130       readSourceFile(state, ClassLibraryPrefix+"SocketInputStream.java");
131       readSourceFile(state, ClassLibraryPrefix+"SocketOutputStream.java");
132
133
134       if (state.TASK) {
135           readSourceFile(state, ClassLibraryPrefix+"Object.java");
136           readSourceFile(state, ClassLibraryPrefix+"TagDescriptor.java");
137       } else if (state.DSM) {
138           readSourceFile(state, ClassLibraryPrefix+"ThreadDSM.java");
139           readSourceFile(state, ClassLibraryPrefix+"ObjectJavaDSM.java");
140       } else {
141           if (state.THREAD) {
142               readSourceFile(state, ClassLibraryPrefix+"Thread.java");
143               readSourceFile(state, ClassLibraryPrefix+"ObjectJava.java");
144           } else
145               readSourceFile(state, ClassLibraryPrefix+"ObjectJavaNT.java");
146       }
147
148       if (state.TASK) {
149           readSourceFile(state, ClassLibraryPrefix+"StartupObject.java");
150           readSourceFile(state, ClassLibraryPrefix+"Socket.java");
151           readSourceFile(state, ClassLibraryPrefix+"ServerSocket.java");
152       } else {
153           readSourceFile(state, ClassLibraryPrefix+"SocketJava.java");
154           readSourceFile(state, ClassLibraryPrefix+"ServerSocketJava.java");
155       }
156
157       BuildIR bir=new BuildIR(state);
158       bir.buildtree();
159       
160       TypeUtil tu=new TypeUtil(state);
161       
162       SemanticCheck sc=new SemanticCheck(state,tu);
163       sc.semanticCheck();
164       tu.createFullTable();
165
166       BuildFlat bf=new BuildFlat(state,tu);
167       bf.buildFlat();
168       SafetyAnalysis sa=null;
169
170       if (state.TASKSTATE) {
171           CallGraph callgraph=new CallGraph(state);
172           TagAnalysis taganalysis=new TagAnalysis(state, callgraph);
173           TaskAnalysis ta=new TaskAnalysis(state, taganalysis);
174           ta.taskAnalysis();
175           TaskGraph tg=new TaskGraph(state, ta);
176           tg.createDOTfiles();
177           
178           if (state.OPTIONAL) {
179               ExecutionGraph et=new ExecutionGraph(state, ta);
180               et.createExecutionGraph();
181               sa = new SafetyAnalysis(et.getExecutionGraph(), state, ta);
182               sa.doAnalysis();
183               state.storeAnalysisResult(sa.getResult());
184               state.storeOptionalTaskDescriptors(sa.getOptionalTaskDescriptors());
185           }
186           
187           if (state.WEBINTERFACE) {
188               GarbageAnalysis ga=new GarbageAnalysis(state, ta);
189               WebInterface wi=new WebInterface(state, ta, tg, ga, taganalysis);
190               JhttpServer serve=new JhttpServer(8000,wi);
191               serve.run();
192           }
193           
194           if (state.SCHEDULING) {
195                   ScheduleAnalysis scheduleAnalysis = new ScheduleAnalysis(state, ta);
196                   scheduleAnalysis.preSchedule();
197                   
198                   // Randomly set the newRate and probability of ScheduleEdges
199                   /*Vector<ScheduleEdge> sedges = scheduleAnalysis.getSEdges4Test();
200                   java.util.Random r=new java.util.Random();
201                   for(int i = 0; i < sedges.size(); i++) {
202                           ScheduleEdge temp = sedges.elementAt(i);
203                           int tint = 0;
204                           do {
205                                   tint = r.nextInt()%100;
206                           }while(tint <= 0);
207                           temp.setProbability(tint);
208                           do {
209                                   tint = r.nextInt()%10;
210                           } while(tint <= 0);
211                           temp.setNewRate(tint);
212                           //temp.setNewRate((i+1)%2+1);
213                   }
214                   //sedges.elementAt(3).setNewRate(2);*/
215                   scheduleAnalysis.printScheduleGraph("scheduling_ori.dot");
216                   scheduleAnalysis.scheduleAnalysis();
217                   scheduleAnalysis.printScheduleGraph("scheduling.dot");
218           }
219           
220       }
221
222       if (state.DSM) {
223           CallGraph callgraph=new CallGraph(state);
224           if (state.PREFETCH) {
225               PrefetchAnalysis pa=new PrefetchAnalysis(state, callgraph, tu);
226           }
227           LocalityAnalysis la=new LocalityAnalysis(state, callgraph, tu);
228           GenerateConversions gc=new GenerateConversions(la, state);
229           BuildCode bc=new BuildCode(state, bf.getMap(), tu, la);
230           bc.buildCode();
231       } else {
232           BuildCode bc=new BuildCode(state, bf.getMap(), tu, sa);
233           bc.buildCode();
234       }
235
236       if (state.FLATIRGRAPH) {
237           FlatIRGraph firg = new FlatIRGraph(state,
238                                              state.FLATIRGRAPHTASKS,
239                                              state.FLATIRGRAPHUSERMETHODS,
240                                              state.FLATIRGRAPHLIBMETHODS);
241       }
242
243       if (state.OWNERSHIP) {
244           //      OwnershipAnalysis oa = new OwnershipAnalysis(state);
245       }
246
247       System.exit(0);
248   }
249     
250     /** Reads in a source file and adds the parse tree to the state object. */
251     
252     private static void readSourceFile(State state, String sourcefile) throws Exception {
253         Reader fr = new BufferedReader(new FileReader(sourcefile));
254         Lex.Lexer l = new Lex.Lexer(fr);
255         java_cup.runtime.lr_parser g;
256         g = new Parse.Parser(l);
257         ParseNode p=null;
258         try {
259             p=(ParseNode) g./*debug_*/parse().value;
260         } catch (Exception e) {
261             System.err.println("Error parsing file:"+sourcefile);
262             e.printStackTrace();
263             System.exit(-1);
264         }
265         state.addParseNode(p);
266         if (l.numErrors()!=0) {
267             System.out.println("Error parsing "+sourcefile);
268             System.exit(l.numErrors());
269         }
270     }
271 }