1 cananian 1.1.2.28 // LowQuadSSA.java, created Wed May 31 16:18:58 2000 by cananian 2 cananian 1.1.2.28 // Copyright (C) 2000 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.16 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.17 package harpoon.IR.LowQuad; 5 duncan 1.1.2.1 6 duncan 1.1.2.7 import harpoon.ClassFile.HClass; 7 duncan 1.1.2.1 import harpoon.ClassFile.HCode; 8 cananian 1.1.2.29 import harpoon.ClassFile.HCodeAndMaps; 9 cananian 1.1.2.5 import harpoon.ClassFile.HCodeElement; 10 duncan 1.1.2.1 import harpoon.ClassFile.HCodeFactory; 11 duncan 1.1.2.1 import harpoon.ClassFile.HMethod; 12 cananian 1.1.2.28 import harpoon.IR.Quads.SSIToSSA; 13 duncan 1.1.2.1 import harpoon.IR.Quads.Quad; 14 cananian 1.1.2.21 import harpoon.IR.Quads.QuadSSI; 15 duncan 1.1.2.1 /** 16 cananian 1.1.2.28 * The <code>LowQuadSSA</code> codeview exposes a lowquad based 17 cananian 1.1.2.28 * representation in SSA form. 18 cananian 1.1.2.28 * 19 cananian 1.1.2.28 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 20 cananian 1.3 * @version $Id: LowQuadSSA.java,v 1.3 2003/03/10 22:19:15 cananian Exp $ 21 duncan 1.1.2.1 */ 22 cananian 1.1.2.28 public class LowQuadSSA extends Code /*which extends harpoon.IR.Quads.Code*/ { 23 duncan 1.1.2.18 /** The name of this code view. */ 24 cananian 1.1.2.28 public static final String codename = "low-quad-ssa"; 25 cananian 1.1.2.28 26 cananian 1.1.2.28 /** Creates a <code>LowQuadSSA</code> object from a 27 cananian 1.1.2.28 * <code>LowQuadSSI</code> object. */ 28 cananian 1.1.2.28 public LowQuadSSA(final LowQuadSSI code) { 29 cananian 1.1.2.28 super(code.getMethod(), null); 30 cananian 1.1.2.28 SSIToSSA ssi2ssa = new SSIToSSA(code, qf); 31 cananian 1.1.2.28 quads = ssi2ssa.rootQuad; 32 cananian 1.1.2.28 setDerivation(ssi2ssa.derivation); 33 cananian 1.1.2.28 setAllocationInformation(ssi2ssa.allocInfo); 34 duncan 1.1.2.1 } 35 duncan 1.1.2.4 36 duncan 1.1.2.18 /** 37 duncan 1.1.2.18 * Create a new code object given a quadruple representation of the 38 duncan 1.1.2.18 * method instructions. 39 duncan 1.1.2.18 */ 40 duncan 1.1.2.18 protected LowQuadSSA(HMethod method, Quad quads) { 41 cananian 1.1.2.28 super(method, quads); 42 cananian 1.1.2.28 setDerivation(null); 43 cananian 1.1.2.28 setAllocationInformation(null); 44 duncan 1.1.2.18 } 45 duncan 1.1.2.18 46 duncan 1.1.2.18 /** 47 duncan 1.1.2.18 * Clone this code representation. The clone has its own copy of the 48 duncan 1.1.2.18 * quad graph. 49 cananian 1.1.2.28 * <p><b>WARNING: does not preserve derivation or allocation info.</b> 50 duncan 1.1.2.18 */ 51 cananian 1.3 public HCodeAndMaps<Quad> clone(HMethod newMethod) { 52 cananian 1.1.2.29 return cloneHelper(new LowQuadSSA(newMethod, null)); 53 duncan 1.1.2.18 } 54 duncan 1.1.2.18 55 duncan 1.1.2.18 /** 56 duncan 1.1.2.18 * Return the name of this code view. 57 duncan 1.1.2.18 * @return the string <code>"low-quad-ssa"</code> 58 duncan 1.1.2.18 */ 59 duncan 1.1.2.18 public String getName() { return codename; } 60 duncan 1.1.2.18 61 duncan 1.1.2.18 /** 62 duncan 1.1.2.18 * Return a code factory for <code>LowQuadSSA</code>, given a 63 cananian 1.1.2.28 * code factory for <code>LowQuadSSI</code>. 64 duncan 1.1.2.18 * <BR> <B>effects:</B> if <code>hcf</code> is a code factory for 65 cananian 1.1.2.28 * <code>LowQuadSSI</code>, then creates and returns a code 66 duncan 1.1.2.18 * factory for <code>LowQuadSSA</code>. Else passes 67 duncan 1.1.2.18 * <code>hcf</code> to 68 cananian 1.1.2.28 * <code>LowQuadSSI.codeFactory()</code>, and reattempts to 69 duncan 1.1.2.18 * create a code factory for <code>LowQuadSSA</code> from the 70 cananian 1.1.2.28 * code factory returned by <code>LowQuadSSI</code>. 71 cananian 1.1.2.28 * @see LowQuadSSI#codeFactory(HCodeFactory) 72 duncan 1.1.2.18 */ 73 duncan 1.1.2.18 public static HCodeFactory codeFactory(final HCodeFactory hcf) { 74 cananian 1.1.2.30 if (hcf.getCodeName().equals(codename)) return hcf; 75 cananian 1.1.2.28 if (hcf.getCodeName().equals(LowQuadSSI.codename)) { 76 cananian 1.1.2.28 return new harpoon.ClassFile.SerializableCodeFactory() { 77 cananian 1.1.2.28 public HCode convert(HMethod m) { 78 cananian 1.1.2.28 HCode c = hcf.convert(m); 79 cananian 1.1.2.28 return (c==null) ? null : new LowQuadSSA((LowQuadSSI)c); 80 cananian 1.1.2.28 } 81 cananian 1.1.2.28 public void clear(HMethod m) { hcf.clear(m); } 82 cananian 1.1.2.28 public String getCodeName() { return codename; } 83 cananian 1.1.2.28 }; 84 cananian 1.1.2.28 } else { 85 cananian 1.1.2.28 return codeFactory(LowQuadSSI.codeFactory(hcf)); 86 cananian 1.1.2.28 } 87 duncan 1.1.2.1 } 88 duncan 1.1.2.1 89 duncan 1.1.2.18 /** 90 cananian 1.1.2.28 * Return a code factory for <code>LowQuadSSA</code>, using the default 91 cananian 1.1.2.28 * code factory for <code>LowQuadSSI</code> 92 duncan 1.1.2.18 */ 93 duncan 1.1.2.18 public static HCodeFactory codeFactory() { 94 cananian 1.1.2.28 return codeFactory(LowQuadSSI.codeFactory()); 95 duncan 1.1.2.18 } 96 cananian 1.2 }