@Override public int getNumber(CGNode N) { if (keep.contains(N)) { return cg.getNumber(N); } else { return -1; } }
@Override public int getNumber(CGNode N) { if (keep.contains(N)) { return cg.getNumber(N); } else { return -1; } }
@Override public boolean hasSubgraphForNode(CGNode node) { return cgNodesVisited.contains(cg.getNumber(node)); }
@Override public int getNumber(CGNode n) { return (containsNode(n) ? cg.getNumber(n) : -1); }
@Override public int getNumber(CGNode n) { return (containsNode(n) ? cg.getNumber(n) : -1); }
@Override public boolean hasSubgraphForNode(CGNode node) { return cgNodesVisited.contains(cg.getNumber(node)); }
public void addSubgraphForNode(CGNode node) { int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node); addNodesForParameters(node); } }
public void addSubgraphForNode(CGNode node) { int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node); addNodesForParameters(node); } }
/** * add edges to nodes in callers of n */ private void addCallerEdges(CGNode n) { final int num = cg.getNumber(n); if (!cgNodesWithCallerEdges.contains(num)) { cgNodesWithCallerEdges.add(num); ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); addInterproceduralEdgesForEntryAndExitBlocks(n, cfg); } }
/** * add edges to nodes in callers of n */ private void addCallerEdges(CGNode n) { final int num = cg.getNumber(n); if (!cgNodesWithCallerEdges.contains(num)) { cgNodesWithCallerEdges.add(num); ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); addInterproceduralEdgesForEntryAndExitBlocks(n, cfg); } }
/** * If n is relevant and its cfg has not already been added, add nodes and edges for n */ @SuppressWarnings("unused") private void addIntraproceduralNodesAndEdgesForCGNodeIfNeeded(CGNode n) { if (!cgNodesVisited.contains(cg.getNumber(n)) && relevant.test(n)) { if (DEBUG_LEVEL > 0) { System.err.println("Adding nodes and edges for cg node: " + n); } cgNodesVisited.add(cg.getNumber(n)); // retrieve a cfg for node n. ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); if (cfg != null) { // create a node for each basic block. addNodeForEachBasicBlock(cfg, n); SSAInstruction[] instrs = cfg.getInstructions(); // create edges for node n. for (T bb : cfg) { if (bb != cfg.entry()) addEdgesToNonEntryBlock(n, cfg, instrs, bb); } } } }
/** * If n is relevant and its cfg has not already been added, add nodes and edges for n */ @SuppressWarnings("unused") private void addIntraproceduralNodesAndEdgesForCGNodeIfNeeded(CGNode n) { if (!cgNodesVisited.contains(cg.getNumber(n)) && relevant.test(n)) { if (DEBUG_LEVEL > 0) { System.err.println("Adding nodes and edges for cg node: " + n); } cgNodesVisited.add(cg.getNumber(n)); // retrieve a cfg for node n. ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); if (cfg != null) { // create a node for each basic block. addNodeForEachBasicBlock(cfg, n); SSAInstruction[] instrs = cfg.getInstructions(); // create edges for node n. for (T bb : cfg) { if (bb != cfg.entry()) addEdgesToNonEntryBlock(n, cfg, instrs, bb); } } } }
@Override public void addSubgraphForNode(CGNode node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node == null"); } IR ir = node.getIR(); if (ir == null) { throw new IllegalArgumentException("no ir for node " + node); } int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node, ir); addNodesForInvocations(node, ir); addNodesForParameters(node, ir); } }
@Override public void addSubgraphForNode(CGNode node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node == null"); } IR ir = node.getIR(); if (ir == null) { throw new IllegalArgumentException("no ir for node " + node); } int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node, ir); addNodesForInvocations(node, ir); addNodesForParameters(node, ir); } }