1 cananian 1.1.2.1  // Options.java, created Tue Jul 20 17:31:26 1999 by cananian
 2 cananian 1.1.2.1  // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1  // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1  package harpoon.Main;
 5 cananian 1.1.2.1  
 6 salcianu 1.6      import harpoon.Backend.Backend;
 7 cananian 1.1.2.2  import harpoon.ClassFile.HCodeFactory;
 8 cananian 1.3      import harpoon.ClassFile.HMethod;
 9 cananian 1.8      import harpoon.ClassFile.Linker;
10 cananian 1.3      
11 salcianu 1.6      import java.util.Map;
12 salcianu 1.6      import java.util.HashMap;
13 salcianu 1.6      
14 cananian 1.1.2.1  /**
15 cananian 1.1.2.1   * <code>Options</code> contains the values of the current runtime
16 cananian 1.1.2.1   * environment.
17 cananian 1.1.2.1   * 
18 cananian 1.1.2.1   * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
19 cananian 1.8       * @version $Id: Options.java,v 1.8 2003/07/10 02:01:38 cananian Exp $
20 cananian 1.1.2.1   */
21 cananian 1.1.2.1  public class Options {
22 cananian 1.1.2.1      /** Stream for writing statistics. */
23 cananian 1.1.2.1      public static java.io.PrintWriter statWriter = null;
24 cananian 1.1.2.1      /** Stream for writing profiling data. */
25 cananian 1.1.2.1      public static java.io.PrintWriter profWriter = null;
26 cananian 1.1.2.2  
27 cananian 1.1.2.2      /** Make a code factory to implement a pass, given a string name. */
28 cananian 1.8          public static HCodeFactory cfFromString(String name, HCodeFactory hcf,
29 cananian 1.8                                                  Linker linker) {
30 cananian 1.1.2.2          name = name.intern();
31 wbeebee  1.7              if (name=="none")
32 wbeebee  1.7                  return hcf;
33 cananian 1.1.2.2          if (name=="to-quad-with-try")
34 cananian 1.1.2.2              return harpoon.IR.Quads.QuadWithTry.codeFactory(hcf);
35 cananian 1.1.2.2          if (name=="to-quad")
36 cananian 1.1.2.2              return harpoon.IR.Quads.QuadNoSSA.codeFactory(hcf);
37 cananian 1.1.2.9          if (name=="to-quad-ssa")
38 cananian 1.1.2.9              return harpoon.IR.Quads.QuadSSA.codeFactory(hcf);
39 cananian 1.1.2.2          if (name=="to-quad-ssi")
40 cananian 1.1.2.3              return harpoon.IR.Quads.QuadSSI.codeFactory(hcf);
41 cananian 1.1.2.2          if (name=="to-low-quad")
42 cananian 1.1.2.2              return harpoon.IR.LowQuad.LowQuadNoSSA.codeFactory(hcf);
43 cananian 1.1.2.6          if (name=="to-low-quad-ssa")
44 cananian 1.1.2.6              return harpoon.IR.LowQuad.LowQuadSSA.codeFactory(hcf);
45 cananian 1.1.2.5          if (name=="to-low-quad-ssi")
46 cananian 1.1.2.5              return harpoon.IR.LowQuad.LowQuadSSI.codeFactory(hcf);
47 cananian 1.1.2.2          if (name=="scc-opt")
48 cananian 1.1.2.4              return harpoon.Analysis.Quads.SCC.SCCOptimize.codeFactory(hcf);
49 cananian 1.1.2.2          if (name=="ssi-stats")
50 cananian 1.1.2.4              return harpoon.Analysis.Quads.SSIStats.codeFactory(hcf);
51 cananian 1.1.2.7          if (name=="type-switch-remover")
52 cananian 1.1.2.8              return new harpoon.Analysis.Quads.TypeSwitchRemover(hcf).codeFactory();
53 cananian 1.1.2.10         if (name=="new-mover")
54 cananian 1.1.2.10             return new harpoon.Analysis.Quads.NewMover(hcf).codeFactory();
55 cananian 1.8              if (name=="dyn-sync-remover")
56 cananian 1.8                  return new harpoon.Analysis.DynamicSyncRemoval.SyncRemover
57 cananian 1.8                      (hcf, linker).codeFactory();
58 cananian 1.1.2.2          else throw new Error("Unknown code factory type: "+name);
59 cananian 1.3          }
60 cananian 1.3      
61 salcianu 1.4      
62 salcianu 1.6          /** Returns the Backend ID (one of the constants defined in
63 salcianu 1.6              harpoon.Backend.Backend) that corresponds to the string
64 salcianu 1.6              representation <code>backendName</code>.  E.g., it returns
65 salcianu 1.6              <code>Backend.SPARC</code> for &quot;sparc&quot; etc. */
66 salcianu 1.6          static String getBackendID(String backendName) {
67 salcianu 1.6              return backendName.toLowerCase().intern();
68 salcianu 1.4          }
69 salcianu 1.4      
70 cananian 1.2      }