1 cananian 1.1.2.6  // DataFlowBasicBlockVisitor.java, created Wed Mar 10  9:00:53 1999 by jwhaley
 2 cananian 1.1.2.12 // Copyright (C) 1998 John Whaley <jwhaley@alum.mit.edu>
 3 cananian 1.1.2.5  // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 jwhaley  1.1.2.1  package harpoon.Analysis.DataFlow;
 5 jwhaley  1.1.2.1  
 6 pnkfelix 1.1.2.7  import harpoon.Analysis.BasicBlock;
 7 salcianu 1.1.2.14 import harpoon.Analysis.BasicBlockInterf;
 8 jwhaley  1.1.2.1  import java.util.Enumeration;
 9 cananian 1.6      import net.cscott.jutil.WorkSet;
10 salcianu 1.1.2.14 
11 salcianu 1.1.2.14 import harpoon.Util.Util;
12 salcianu 1.1.2.14 
13 jwhaley  1.1.2.1  /**
14 pnkfelix 1.1.2.2   * <code>DataFlowBasicBlockVisitor</code> is a specialized
15 pnkfelix 1.1.2.8   * <code>BasicBlockVisitor</code> for performing data flow analysis on
16 pnkfelix 1.1.2.2   * a set of <code>BasicBlock</code>.
17 jwhaley  1.1.2.1   *
18 cananian 1.1.2.12  * @author John Whaley <jwhaley@alum.mit.edu>
19 cananian 1.6       * @version $Id: DataFlowBasicBlockVisitor.java,v 1.6 2004/02/08 01:51:05 cananian Exp $
20 jwhaley  1.1.2.1   */
21 jwhaley  1.1.2.1  
22 salcianu 1.1.2.14 public abstract class DataFlowBasicBlockVisitor extends harpoon.Analysis.BasicBlockInterfVisitor {
23 jwhaley  1.1.2.1  
24 pnkfelix 1.1.2.4      private static boolean DEBUG = false;
25 pnkfelix 1.1.2.2      public static void db(String s) { System.out.println(s); }
26 pnkfelix 1.1.2.11 
27 pnkfelix 1.1.2.2      /**
28 pnkfelix 1.1.2.2       * Adds the successors of the basic block q to the worklist W,
29 pnkfelix 1.1.2.2       * performing merge operations if necessary.
30 pnkfelix 1.1.2.2       */
31 cananian 1.6          public abstract void addSuccessors(WorkSet W, BasicBlockInterf q);
32 pnkfelix 1.1.2.2      
33 pnkfelix 1.1.2.2      /**
34 pnkfelix 1.1.2.3         Merges operation on the from and to basic block.  Returns true if
35 pnkfelix 1.1.2.3         the to basic block changes.
36 pnkfelix 1.1.2.3         
37 pnkfelix 1.1.2.3         <BR> <B>NOTE:</B> "changes" above refers to our knowledge about
38 pnkfelix 1.1.2.9              the basic block changing, not the contents of the basic
39 pnkfelix 1.1.2.9              block itself, which shouldn't be modified during Analysis.
40 pnkfelix 1.1.2.9              Thus, an appropriate "change" would be a variable being
41 pnkfelix 1.1.2.9              added to the IN-set of 'to' during Forward Dataflow
42 pnkfelix 1.1.2.9              Analysis.
43 pnkfelix 1.1.2.3         
44 pnkfelix 1.1.2.3      */
45 salcianu 1.4          public abstract boolean merge(BasicBlockInterf from, BasicBlockInterf to);
46 pnkfelix 1.1.2.2  
47 pnkfelix 1.1.2.2      
48 pnkfelix 1.1.2.3      /** Performs some transfer function on a basic block b.  
49 pnkfelix 1.1.2.2          <BR> <B>NOTE:</B> Transfer functions must be monotonic for
50 pnkfelix 1.1.2.2          dataflow analysis to terminate.
51 pnkfelix 1.1.2.2      */
52 pnkfelix 1.1.2.2      public abstract void visit(BasicBlock b);
53 salcianu 1.1.2.14 
54 salcianu 1.4          /** Performs some transfer function on a basic block b.  
55 salcianu 1.4              <BR> <B>NOTE:</B> Transfer functions must be monotonic for
56 salcianu 1.4              dataflow analysis to terminate.
57 salcianu 1.4          */
58 salcianu 1.1.2.14     public void visit(BasicBlockInterf b) {
59 cananian 1.3.2.1          assert false : "Unexpected BasicBlockInterf subclass";
60 salcianu 1.1.2.14     }
61 jwhaley  1.1.2.1  }
62 cananian 1.2