1 cananian 1.1.2.1 // LABEL.java, created Fri Dec 11 05:59:31 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.1 import harpoon.Util.Util;
10 cananian 1.1.2.1 
11 cananian 1.1.2.1 /**
12 cananian 1.1.2.1  * <code>LABEL</code> marks a basic-block entrance.
13 cananian 1.1.2.1  * 
14 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
15 cananian 1.3      * @version $Id: LABEL.java,v 1.3 2002/04/11 04:00:34 cananian Exp $
16 cananian 1.1.2.1  */
17 cananian 1.1.2.1 public class LABEL extends PHI {
18 cananian 1.1.2.1     /** the (optional) name of this label. <p>
19 cananian 1.1.2.1      *  <code>null</code> if the label has no name. */
20 cananian 1.1.2.1     protected String label;
21 cananian 1.1.2.1 
22 cananian 1.1.2.1     /** Creates a <code>LABEL</code> representing the entrance to a basic
23 cananian 1.1.2.1      *  block.
24 cananian 1.1.2.1      * @param label the name of this label, or <code>null</code> for no name.
25 cananian 1.1.2.1      */
26 cananian 1.1.2.3     public LABEL(QuadFactory qf, HCodeElement source, String label,
27 cananian 1.1.2.1                  Temp dst[], Temp src[][], int arity) {
28 cananian 1.1.2.3         super(qf, source, dst, src, arity);
29 cananian 1.1.2.1         this.label = label;
30 cananian 1.1.2.1     }
31 cananian 1.1.2.3     public LABEL(QuadFactory qf, HCodeElement source, String label,
32 cananian 1.1.2.1                  Temp dst[], int arity) {
33 cananian 1.1.2.3         super(qf, source, dst, arity);
34 cananian 1.1.2.1         this.label = label;
35 cananian 1.1.2.1     }
36 cananian 1.1.2.4     /** Creates a <code>LABEL</code> to replace a <code>PHI</code>.
37 cananian 1.1.2.1      * @param label the name of this label, or <code>null</code> for no name.
38 cananian 1.1.2.1      */
39 cananian 1.1.2.3     public LABEL(QuadFactory qf, PHI phi, String label) {
40 cananian 1.1.2.3         this(qf, phi, label, phi.dst, phi.src, phi.arity());
41 cananian 1.1.2.1         // SHOULD I REWRITE EDGES in this constructor?
42 cananian 1.1.2.1     }
43 cananian 1.1.2.1     /** Returns the optional name of this label, or <code>null</code> if
44 cananian 1.1.2.1      *  this label has no name. */
45 cananian 1.1.2.1     public String label() { return label; }
46 cananian 1.1.2.1     
47 cananian 1.1.2.2     public int kind() { return QuadKind.LABEL; }
48 cananian 1.1.2.2     
49 cananian 1.1.2.5     public Quad rename(QuadFactory qqf, TempMap defMap, TempMap useMap) {
50 cananian 1.1.2.5         return new LABEL(qqf, this,
51 cananian 1.1.2.5                          label, map(defMap,dst), map(useMap,src), arity());
52 cananian 1.1.2.2     }
53 cananian 1.1.2.2 
54 cananian 1.1.2.7     public void accept(QuadVisitor v) { v.visit(this); }
55 cananian 1.3         public <T> T accept(QuadValueVisitor<T> v) { return v.visit(this); }
56 cananian 1.1.2.1 
57 cananian 1.1.2.1     /** Returns a human-readable representation of this quad. */
58 cananian 1.1.2.1     public String toString() {
59 cananian 1.1.2.1         StringBuffer sb = new StringBuffer("LABEL("+prev.length+"): ");
60 cananian 1.1.2.1         for (int i=0; i<dst.length; i++) {
61 cananian 1.1.2.1             sb.append(dst[i].toString() + "=(");
62 cananian 1.1.2.1             for (int j=0; j<src[i].length; j++) {
63 cananian 1.1.2.1                 if (src[i][j]==null)
64 cananian 1.1.2.1                     sb.append("null");
65 cananian 1.1.2.1                 else
66 cananian 1.1.2.1                     sb.append(src[i][j].toString());
67 cananian 1.1.2.1                 if (j < src[i].length-1)
68 cananian 1.1.2.1                     sb.append(",");
69 cananian 1.1.2.1             }
70 cananian 1.1.2.1             sb.append(")");
71 cananian 1.1.2.1             if (i < dst.length-1)
72 cananian 1.1.2.1                 sb.append("; ");
73 cananian 1.1.2.1         }
74 cananian 1.1.2.1         return sb.toString();
75 cananian 1.1.2.1     }
76 cananian 1.2     }