1 bdemsky  1.1.2.1 // MyLowQuadNoSSA.java, created Fri Jul  9 14:13:48 1999 by root
  2 bdemsky  1.1.2.1 // Copyright (C) 1999 Brian Demsky <bdemsky@mit.edu>
  3 bdemsky  1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
  4 bdemsky  1.1.2.1 package harpoon.Analysis.LowQuad.Loop;
  5 bdemsky  1.1.2.1 
  6 bdemsky  1.1.2.1 import harpoon.Analysis.Maps.Derivation;
  7 bdemsky  1.1.2.1 import harpoon.ClassFile.HClass;
  8 bdemsky  1.1.2.1 import harpoon.ClassFile.HCode;
  9 bdemsky  1.1.2.1 import harpoon.ClassFile.HCodeElement;
 10 bdemsky  1.1.2.1 import harpoon.ClassFile.HMethod;
 11 bdemsky  1.1.2.1 import harpoon.IR.LowQuad.Code;
 12 bdemsky  1.1.2.1 import harpoon.IR.LowQuad.LowQuadSSI;
 13 bdemsky  1.1.2.1 import harpoon.IR.Quads.Quad;
 14 cananian 1.1.2.4 import harpoon.IR.Quads.RSSxToNoSSA;
 15 bdemsky  1.1.2.1 import harpoon.Temp.Temp;
 16 bdemsky  1.1.2.1 import harpoon.Temp.TempMap;
 17 bdemsky  1.1.2.1 import harpoon.Util.Util;
 18 bdemsky  1.1.2.1 
 19 bdemsky  1.1.2.1 import java.util.Map;
 20 bdemsky  1.1.2.1 import java.util.HashMap;
 21 bdemsky  1.1.2.1 import java.util.Iterator;
 22 bdemsky  1.1.2.1 
 23 bdemsky  1.1.2.1 /**
 24 bdemsky  1.1.2.1  * <code>MyLowQuadNoSSA</code>
 25 bdemsky  1.1.2.1  * 
 26 bdemsky  1.1.2.1  * @author  Brian Demsky <bdemsky@mit.edu>
 27 cananian 1.5      * @version $Id: MyLowQuadNoSSA.java,v 1.5 2004/02/08 03:19:44 cananian Exp $
 28 bdemsky  1.1.2.1  */
 29 bdemsky  1.1.2.1 
 30 cananian 1.1.2.3 public class MyLowQuadNoSSA extends harpoon.IR.LowQuad.LowQuadNoSSA
 31 cananian 1.1.2.3     implements Derivation 
 32 cananian 1.1.2.3     /* ergh.  implementing Derivation directly is bad.  bdemsky should fix. */
 33 cananian 1.1.2.3 {
 34 bdemsky  1.1.2.1     HashMap dT;
 35 bdemsky  1.1.2.1     HashMap tT;
 36 bdemsky  1.1.2.1     public static final String codename = "low-quad-ssa";
 37 cananian 1.1.2.3     Derivation parentDerivation;
 38 bdemsky  1.1.2.1     Map quadmap;
 39 bdemsky  1.1.2.1     TempMap tempMap;
 40 bdemsky  1.1.2.6 
 41 bdemsky  1.1.2.6 
 42 bdemsky  1.1.2.1     MyLowQuadNoSSA(final LowQuadSSI code) {
 43 bdemsky  1.1.2.1         super(code.getMethod(),null);
 44 cananian 1.1.2.4         RSSxToNoSSA translate=new RSSxToNoSSA(qf, code);
 45 bdemsky  1.1.2.1         quads=translate.getQuads();
 46 bdemsky  1.1.2.1         tempMap=translate.tempMap();
 47 bdemsky  1.1.2.1         quadmap=translate.quadMap();
 48 bdemsky  1.1.2.1         dT=new HashMap();
 49 bdemsky  1.1.2.1         tT=new HashMap();
 50 cananian 1.1.2.3         parentDerivation=code.getDerivation();
 51 bdemsky  1.1.2.6         buildmaps(code, translate.newTempMap());
 52 cananian 1.1.2.3         setDerivation(this);
 53 bdemsky  1.1.2.1     }
 54 bdemsky  1.1.2.1 
 55 bdemsky  1.1.2.6     private void buildmaps(final HCode code, Map newtempmap) {
 56 bdemsky  1.1.2.1         Iterator iterate=((HCode)code).getElementsI();
 57 bdemsky  1.1.2.1         while (iterate.hasNext()) {
 58 bdemsky  1.1.2.1             Quad q=(Quad)iterate.next();
 59 bdemsky  1.1.2.1             Temp[] defs=q.def();
 60 bdemsky  1.1.2.1             for(int i=0;i<defs.length;i++) {
 61 cananian 1.1.2.3                 Derivation.DList parents=parentDerivation.derivation(q, defs[i]);
 62 bdemsky  1.1.2.1                 if (parents!=null) {
 63 bdemsky  1.1.2.6                     System.out.print("NoSSA: "+q+","+defs[i]+"->"+quadmap.get(q)+","+tempMap.tempMap(defs[i])+" "+parents);
 64 bdemsky  1.1.2.1                     dT.put(tempMap.tempMap(defs[i]),Derivation.DList.rename(parents,tempMap));
 65 bdemsky  1.1.2.6                     System.out.println(dT.get(tempMap.tempMap(defs[i])));
 66 bdemsky  1.1.2.1                     tT.put(tempMap.tempMap(defs[i]), 
 67 bdemsky  1.1.2.5                            null);
 68 bdemsky  1.1.2.6                 } else {
 69 cananian 1.1.2.3                     tT.put(tempMap.tempMap(defs[i]),parentDerivation.typeMap(null,defs[i]));
 70 bdemsky  1.1.2.6                     System.out.print("NoSSA: "+q+","+defs[i]+"->"+quadmap.get(q)+","+tempMap.tempMap(defs[i])+" "+parents);
 71 bdemsky  1.1.2.6                     System.out.println(tT.get(tempMap.tempMap(defs[i])));
 72 bdemsky  1.1.2.6                 }
 73 bdemsky  1.1.2.1             }
 74 bdemsky  1.1.2.6         }
 75 cananian 1.5             for (Object newtO : newtempmap.keySet()) {
 76 cananian 1.5                 Temp newt = (Temp) newtO;
 77 bdemsky  1.1.2.6             Temp oldt=(Temp)newtempmap.get(newt);
 78 bdemsky  1.1.2.6             dT.put(newt, dT.get(oldt));
 79 bdemsky  1.1.2.6             tT.put(newt, tT.get(oldt));
 80 bdemsky  1.1.2.1         }
 81 bdemsky  1.1.2.1     }
 82 bdemsky  1.1.2.1     
 83 bdemsky  1.1.2.1     public Derivation.DList derivation(HCodeElement hce, Temp t) {
 84 cananian 1.3.2.1         assert hce!=null && t!=null;
 85 bdemsky  1.1.2.1         return (Derivation.DList)dT.get(t);
 86 bdemsky  1.1.2.1     }
 87 bdemsky  1.1.2.1     
 88 bdemsky  1.1.2.1 
 89 bdemsky  1.1.2.1     public HClass typeMap(HCodeElement hce, Temp t) {
 90 cananian 1.3.2.1         assert t!=null;
 91 bdemsky  1.1.2.1         Object type = tT.get(t);
 92 bdemsky  1.1.2.5         //      if (type==null)
 93 bdemsky  1.1.2.5         //  System.out.println("TYPE UNKNOWN for :"+hce+","+t+"in MyLowQuadQNoSSA");
 94 bdemsky  1.1.2.5         return (HClass) type;
 95 bdemsky  1.1.2.1     }
 96 bdemsky  1.1.2.1 
 97 bdemsky  1.1.2.1     public String getName() {
 98 bdemsky  1.1.2.1         return codename;
 99 bdemsky  1.1.2.1     }
100 cananian 1.2     }