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