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 }