/** * This method returns true if the passed node dominates this node * * @param master the proposed dominating node * @return whether the passed node dominates me */ boolean _isDominatedBy(DominatorTreeNode master) { DominatorTreeNode node = this; while ((node != null) && (node != master)) { node = (DominatorTreeNode) node.getParent(); } return node == master; }
private void initializeRanges() { DominatorTreeNode node = this; DominatorTreeNode parent = (DominatorTreeNode) getParent(); while (parent != null) { node = parent; parent = (DominatorTreeNode) node.getParent(); } node.initializeRanges(0); }
private int initializeRanges(int i) { low = ++i; Enumeration<TreeNode> childEnum = getChildren(); while (childEnum.hasMoreElements()) { DominatorTreeNode child = (DominatorTreeNode) childEnum.nextElement(); i = child.initializeRanges(i); } high = ++i; return i; }
/** * Return the distance of this node from the root of the dominator tree. * * @return the distance of this node from the root of the dominator tree. */ int getDepth() { if (depth == -1) { DominatorTreeNode dad = (DominatorTreeNode) getParent(); if (dad == null) { depth = 0; } else { depth = dad.getDepth() + 1; } } return depth; }
/** * This method returns the set of blocks that dominates the passed block, i.e., it answers the * question "Who dominates me?" * * @param ir the governing IR * @return a BitVector containing those blocks that dominate me */ BitVector dominators(IR ir) { // Currently, this set is computed on demand, // but we cache it for the next time. if (dominators == null) { dominators = new BitVector(ir.getMaxBasicBlockNumber() + 1); dominators.set(block.getNumber()); DominatorTreeNode node = this; while ((node = (DominatorTreeNode) getParent()) != null) { dominators.set(node.getBlock().getNumber()); } } return dominators; }