1 pnkfelix 1.1.2.1 // BackwardDataFlowBasicBlockVisitor.java, created Wed May 26 16:33:58 1999 by pnkfelix 2 cananian 1.1.2.5 // Copyright (C) 1999 Felix S. Klock II <pnkfelix@mit.edu> 3 pnkfelix 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 pnkfelix 1.1.2.1 package harpoon.Analysis.DataFlow; 5 pnkfelix 1.1.2.1 6 salcianu 1.4 import harpoon.Analysis.BasicBlockInterf; 7 salcianu 1.4 import java.util.Iterator; 8 cananian 1.5 import net.cscott.jutil.WorkSet; 9 pnkfelix 1.1.2.1 10 pnkfelix 1.1.2.1 /** 11 pnkfelix 1.1.2.1 * <code>BackwardDataFlowBasicBlockVisitor</code> 12 pnkfelix 1.1.2.1 * 13 cananian 1.1.2.5 * @author Felix S. Klock II <pnkfelix@mit.edu> 14 cananian 1.6 * @version $Id: BackwardDataFlowBasicBlockVisitor.java,v 1.6 2004/02/08 03:19:21 cananian Exp $ 15 pnkfelix 1.1.2.1 */ 16 pnkfelix 1.1.2.2 public abstract class BackwardDataFlowBasicBlockVisitor 17 pnkfelix 1.1.2.2 extends DataFlowBasicBlockVisitor { 18 pnkfelix 1.1.2.2 19 pnkfelix 1.1.2.2 private static final boolean DEBUG = false; 20 pnkfelix 1.1.2.1 21 pnkfelix 1.1.2.4 /** Performs the <i>merge</i> operation between <code>q</code> and 22 pnkfelix 1.1.2.4 its predecessors, readding <code>BasicBlock</code>s to 23 pnkfelix 1.1.2.4 <code>W</code> where necessary. 24 pnkfelix 1.1.2.4 <BR> <B>effects:</B> Runs <code>merge(q, p)</code> for all 25 pnkfelix 1.1.2.4 <code>p</code> element of Predecessors(<code>q</code>). 26 pnkfelix 1.1.2.4 If the <code>merge(q, p)</code> operation returns 27 pnkfelix 1.1.2.4 <code>true</code> for a given <code>p</code>, adds 28 pnkfelix 1.1.2.4 <code>p</code> to <code>W</code>, indicating that 29 pnkfelix 1.1.2.4 <code>p</code> must be revisited by <code>this</code>. 30 cananian 1.3 @see #merge(BasicBlock, BasicBlock) 31 pnkfelix 1.1.2.1 */ 32 cananian 1.5 public void addSuccessors(WorkSet W, BasicBlockInterf q) { 33 cananian 1.6 for (Object parentO : q.prevSet()) { 34 cananian 1.6 BasicBlockInterf parent = (BasicBlockInterf) parentO; 35 pnkfelix 1.1.2.2 if (DEBUG) 36 pnkfelix 1.1.2.2 System.out.println 37 pnkfelix 1.1.2.2 ("addSucc: merging from: " + q + 38 pnkfelix 1.1.2.2 " to: " + parent); 39 pnkfelix 1.1.2.2 if (merge(q, parent)) { 40 cananian 1.5 W.add(parent); 41 pnkfelix 1.1.2.1 } 42 pnkfelix 1.1.2.2 if (DEBUG) 43 pnkfelix 1.1.2.2 System.out.println 44 pnkfelix 1.1.2.2 ("addSucc: worklist: " + W); 45 pnkfelix 1.1.2.1 } 46 pnkfelix 1.1.2.1 } 47 pnkfelix 1.1.2.1 48 cananian 1.2 }