1 bdemsky 1.1.2.1 // LoopMap.java, created Thu Jun 17 16:11:41 1999 by root 2 cananian 1.1.2.5 // 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 import harpoon.Temp.TempMap; 6 bdemsky 1.1.2.1 import harpoon.Temp.Temp; 7 cananian 1.3 import net.cscott.jutil.WorkSet; 8 cananian 1.1.2.3 import harpoon.IR.Quads.Quad; 9 bdemsky 1.1.2.1 import harpoon.Analysis.Loops.Loops; 10 bdemsky 1.1.2.1 import harpoon.Analysis.UseDef; 11 bdemsky 1.1.2.1 import harpoon.ClassFile.HCodeElement; 12 bdemsky 1.1.2.1 import harpoon.ClassFile.HCode; 13 bdemsky 1.1.2.1 14 bdemsky 1.1.2.1 import java.util.Set; 15 bdemsky 1.1.2.1 /** 16 bdemsky 1.1.2.1 * <code>LoopMap</code> 17 bdemsky 1.1.2.1 * 18 bdemsky 1.1.2.1 * @author Brian Demsky <bdemsky@mit.edu> 19 cananian 1.3 * @version $Id: LoopMap.java,v 1.3 2004/02/08 01:52:54 cananian Exp $ 20 bdemsky 1.1.2.1 */ 21 bdemsky 1.1.2.1 public class LoopMap implements TempMap { 22 bdemsky 1.1.2.1 23 bdemsky 1.1.2.1 /** Creates a <code>LoopMap</code>. */ 24 bdemsky 1.1.2.1 public LoopMap(HCode hc,Loops lp, TempMap ssitossa) { 25 bdemsky 1.1.2.1 //We need to build to map in the constructor 26 bdemsky 1.1.2.1 //Set HCode pointer 27 bdemsky 1.1.2.1 this.lp=lp; 28 bdemsky 1.1.2.1 this.hc=hc; 29 bdemsky 1.1.2.1 this.ud=new UseDef(); 30 cananian 1.1.2.4 this.elements=lp.loopIncElements(); 31 bdemsky 1.1.2.1 this.ssitossa=ssitossa; 32 bdemsky 1.1.2.1 } 33 bdemsky 1.1.2.1 34 bdemsky 1.1.2.1 public Temp tempMap(Temp t) { 35 bdemsky 1.1.2.1 //Breadth first search 36 bdemsky 1.1.2.1 WorkSet todo=new WorkSet(); 37 bdemsky 1.1.2.1 WorkSet newpile=new WorkSet(); 38 bdemsky 1.1.2.1 todo.push(t); 39 bdemsky 1.1.2.1 Temp finalt=ssitossa.tempMap(t); 40 bdemsky 1.1.2.1 Temp n=null; 41 bdemsky 1.1.2.1 while (true) { 42 bdemsky 1.1.2.1 if (todo.isEmpty()) { 43 bdemsky 1.1.2.1 //go down to next layer 44 bdemsky 1.1.2.1 todo=newpile; 45 bdemsky 1.1.2.1 newpile=new WorkSet(); 46 bdemsky 1.1.2.1 } 47 bdemsky 1.1.2.1 n=(Temp)todo.pop(); 48 bdemsky 1.1.2.1 if (n==finalt) break; 49 bdemsky 1.1.2.1 HCodeElement []sources=ud.defMap(hc,n); 50 bdemsky 1.1.2.1 Quad q=(Quad)sources[0]; 51 bdemsky 1.1.2.1 if (elements.contains(q)) { 52 bdemsky 1.1.2.1 Temp []uses=q.use(); 53 bdemsky 1.1.2.1 for (int i=0;i<uses.length;i++) 54 bdemsky 1.1.2.2 if (finalt==ssitossa.tempMap(uses[i])) 55 bdemsky 1.1.2.2 newpile.push(uses[i]); 56 bdemsky 1.1.2.1 } else break; 57 bdemsky 1.1.2.1 } 58 bdemsky 1.1.2.1 return n; 59 bdemsky 1.1.2.1 } 60 bdemsky 1.1.2.1 61 bdemsky 1.1.2.1 TempMap ssitossa; 62 bdemsky 1.1.2.1 HCode hc; 63 bdemsky 1.1.2.1 Set elements; 64 bdemsky 1.1.2.1 UseDef ud; 65 bdemsky 1.1.2.1 Loops lp; 66 bdemsky 1.1.2.1 } 67 bdemsky 1.1.2.1 68 bdemsky 1.1.2.1 69 cananian 1.2