1 cananian 1.1.2.1 // MOVE.java, created Wed Aug 5 06:53:38 1998 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1998 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.IR.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.6 import harpoon.ClassFile.HCodeElement; 7 cananian 1.1.2.1 import harpoon.Temp.Temp; 8 cananian 1.1.2.1 import harpoon.Temp.TempMap; 9 cananian 1.1.2.2 import harpoon.Util.Util; 10 cananian 1.1.2.1 11 cananian 1.1.2.1 /** 12 cananian 1.1.2.1 * <code>MOVE</code> objects represent an assignment to a compiler temporary. 13 cananian 1.1.2.1 * The source of the assignment must be another temporary. 14 cananian 1.1.2.1 * 15 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 16 cananian 1.5 * @version $Id: MOVE.java,v 1.5 2002/04/11 04:00:34 cananian Exp $ 17 cananian 1.1.2.1 */ 18 cananian 1.1.2.1 public class MOVE extends Quad { 19 cananian 1.1.2.2 /** The destination <code>Temp</code>. */ 20 cananian 1.1.2.2 protected Temp dst; 21 cananian 1.1.2.2 /** The source <code>Temp</code>. */ 22 cananian 1.1.2.2 protected Temp src; 23 cananian 1.1.2.1 24 cananian 1.1.2.2 /** Creates a <code>MOVE</code> from a source and destination 25 cananian 1.1.2.2 * <code>Temp</code>. 26 cananian 1.1.2.2 * @param dst the destination <code>Temp</code>. 27 cananian 1.1.2.2 * @param src the source <code>Temp</code>. 28 cananian 1.1.2.2 */ 29 cananian 1.1.2.4 public MOVE(QuadFactory qf, HCodeElement source, 30 cananian 1.1.2.1 Temp dst, Temp src) { 31 cananian 1.1.2.4 super(qf, source); 32 cananian 1.1.2.1 this.dst = dst; this.src = src; 33 cananian 1.3.2.1 assert dst!=null && src!=null; 34 cananian 1.1.2.1 } 35 cananian 1.1.2.2 // ACCESSOR METHODS: 36 cananian 1.1.2.2 /** Returns the destination <code>Temp</code>. */ 37 cananian 1.1.2.2 public Temp dst() { return dst; } 38 cananian 1.1.2.2 /** Returns the source <code>Temp</code>. */ 39 cananian 1.1.2.2 public Temp src() { return src; } 40 cananian 1.1.2.1 41 cananian 1.1.2.2 /** Returns the <code>Temp</code>s used by this <code>Quad</code>. */ 42 cananian 1.1.2.1 public Temp[] use() { return new Temp[] { src }; } 43 cananian 1.1.2.2 /** Returns the <code>Temp</code>s defined by this <code>Quad</code>. */ 44 cananian 1.1.2.1 public Temp[] def() { return new Temp[] { dst }; } 45 cananian 1.1.2.1 46 cananian 1.1.2.3 public int kind() { return QuadKind.MOVE; } 47 cananian 1.1.2.3 48 cananian 1.1.2.5 public Quad rename(QuadFactory qqf, TempMap defMap, TempMap useMap) { 49 cananian 1.1.2.5 return new MOVE(qqf, this, map(defMap, dst), map(useMap, src)); 50 cananian 1.1.2.3 } 51 cananian 1.1.2.2 /** Rename all defined variables in this <code>Quad</code> according 52 cananian 1.1.2.5 * to a mapping. 53 cananian 1.1.2.5 * @deprecated does not preserve immutability. */ 54 cananian 1.1.2.3 void renameDefs(TempMap tm) { 55 cananian 1.1.2.1 dst = tm.tempMap(dst); 56 cananian 1.1.2.1 } 57 cananian 1.1.2.2 /** Rename all used variables in this <code>Quad</code> according 58 cananian 1.1.2.5 * to a mapping. 59 cananian 1.1.2.5 * @deprecated does not preserve immutability. */ 60 cananian 1.1.2.3 void renameUses(TempMap tm) { 61 cananian 1.1.2.1 src = tm.tempMap(src); 62 cananian 1.1.2.1 } 63 cananian 1.1.2.1 64 cananian 1.1.2.7 public void accept(QuadVisitor v) { v.visit(this); } 65 cananian 1.5 public <T> T accept(QuadValueVisitor<T> v) { return v.visit(this); } 66 cananian 1.1.2.1 67 cananian 1.1.2.2 /** Returns a human-readable representation of this <code>Quad</code>. */ 68 cananian 1.1.2.1 public String toString() { 69 cananian 1.1.2.1 return dst.toString() + " = MOVE " + src.toString(); 70 cananian 1.1.2.1 } 71 cananian 1.2 }