@Override public BitVectorIntSet parse(String string) throws NumberFormatException { int[] data = SparseIntSet.parseIntArray(string); BitVectorIntSet result = new BitVectorIntSet(); for (int element : data) { result.add(element); } return result; }
@Override public BitVectorIntSet parse(String string) throws NumberFormatException { int[] data = SparseIntSet.parseIntArray(string); BitVectorIntSet result = new BitVectorIntSet(); for (int element : data) { result.add(element); } return result; }
@Override public BitVectorIntSet parse(String string) throws NumberFormatException { int[] data = SparseIntSet.parseIntArray(string); BitVectorIntSet result = new BitVectorIntSet(); for (int element : data) { result.add(element); } return result; }
/** * @throws IllegalArgumentException if set is null */ @Override public BitVectorIntSet make(int[] set) { if (set == null) { throw new IllegalArgumentException("set is null"); } if (set.length == 0) { return new BitVectorIntSet(); } else { // XXX not very efficient. TreeSet<Integer> T = new TreeSet<>(); for (int element : set) { T.add(element); } BitVectorIntSet result = new BitVectorIntSet(); for (Integer I : T) { result.add(I.intValue()); } return result; } }
/** * @throws IllegalArgumentException if set is null */ @Override public BitVectorIntSet make(int[] set) { if (set == null) { throw new IllegalArgumentException("set is null"); } if (set.length == 0) { return new BitVectorIntSet(); } else { // XXX not very efficient. TreeSet<Integer> T = new TreeSet<>(); for (int element : set) { T.add(element); } BitVectorIntSet result = new BitVectorIntSet(); for (Integer I : T) { result.add(I.intValue()); } return result; } }
/** * @throws IllegalArgumentException if set is null */ @Override public BitVectorIntSet make(int[] set) { if (set == null) { throw new IllegalArgumentException("set is null"); } if (set.length == 0) { return new BitVectorIntSet(); } else { // XXX not very efficient. TreeSet<Integer> T = new TreeSet<>(); for (int element : set) { T.add(element); } BitVectorIntSet result = new BitVectorIntSet(); for (Integer I : T) { result.add(I.intValue()); } return result; } }
public void addSubgraphForNode(CGNode node) { int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node); addNodesForParameters(node); } }
@Override public IntSet getSuccNodeNumbers(CGNode node) { if (!keep.contains(node)){ return null; } IntSet tmp = cg.getSuccNodeNumbers(node); BitVectorIntSet kp = new BitVectorIntSet(); for (CGNode n : keep) { if (!removedEdge(node, n)) { kp.add(getNumber(n)); } } return tmp.intersection(kp); }
@Override public IntSet getPredNodeNumbers(CGNode node) { if (!keep.contains(node)){ return null; } IntSet tmp = cg.getPredNodeNumbers(node); BitVectorIntSet kp = new BitVectorIntSet(); for (CGNode n : keep) { if (!removedEdge(n, node)) { kp.add(getNumber(n)); } } return tmp.intersection(kp); }
@Override public IntSet getSuccNodeNumbers(CGNode node) { if (!keep.contains(node)){ return null; } IntSet tmp = cg.getSuccNodeNumbers(node); BitVectorIntSet kp = new BitVectorIntSet(); for (CGNode n : keep) { if (!removedEdge(node, n)) { kp.add(getNumber(n)); } } return tmp.intersection(kp); }
@Override public IntSet getPredNodeNumbers(CGNode node) { if (!keep.contains(node)){ return null; } IntSet tmp = cg.getPredNodeNumbers(node); BitVectorIntSet kp = new BitVectorIntSet(); for (CGNode n : keep) { if (!removedEdge(n, node)) { kp.add(getNumber(n)); } } return tmp.intersection(kp); }
@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); } }
public void addSubgraphForNode(CGNode node) { int n = cg.getNumber(node); if (!cgNodesVisited.contains(n)) { cgNodesVisited.add(n); unconditionallyAddConstraintsFromNode(node); addNodesForParameters(node); } }
@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); } }
/** * @return {@link IntSet} representing instruction indices of each PEI in the ir */ private static IntSet getPEIs(final IR ir) { BitVectorIntSet result = new BitVectorIntSet(); for (int i = 0; i < ir.getInstructions().length; i++) { if (ir.getInstructions()[i] != null && ir.getInstructions()[i].isPEI()) { result.add(i); } } return result; }
/** * @return {@link IntSet} representing instruction indices of each PEI in the ir */ private static IntSet getPEIs(final IR ir) { BitVectorIntSet result = new BitVectorIntSet(); for (int i = 0; i < ir.getInstructions().length; i++) { if (ir.getInstructions()[i] != null && ir.getInstructions()[i].isPEI()) { result.add(i); } } return result; }
/** * Record that in this procedure we've discovered a same-level realizable path from (s_p,0) to (n,d_j) * * @param n local block number of the basic block n */ @SuppressWarnings("unused") private void addZeroPathEdge(int n, int j) { BitVectorIntSet z = (BitVectorIntSet) zeroPaths.get(j); if (z == null) { z = new BitVectorIntSet(); zeroPaths.set(j, z); } z.add(n); if (altPaths != null) { IBinaryNaturalRelation R = altPaths.get(0); if (R == null) { // we expect the first dimension of R to be dense, the second sparse R = new BasicNaturalRelation(new byte[] { BasicNaturalRelation.SIMPLE_SPACE_STINGY }, BasicNaturalRelation.TWO_LEVEL); altPaths.set(0, R); } R.add(n, j); } if (TabulationSolver.DEBUG_LEVEL > 1) { System.err.println("recording 0-path edge, now d2= " + j + " reached at " + z); } }
@Override public IntSet intersection(IntSet that) { if (that == null) { throw new IllegalArgumentException("null that"); } if (that instanceof MutableSharedBitVectorIntSet) { return intersection((MutableSharedBitVectorIntSet) that); } else if (that instanceof BitVectorIntSet) { MutableSharedBitVectorIntSet m = new MutableSharedBitVectorIntSet((BitVectorIntSet) that); return intersection(m); } else if (that instanceof SparseIntSet) { BitVectorIntSet bv = new BitVectorIntSet(that); return intersection(bv); } else { // really slow. optimize as needed. BitVectorIntSet result = new BitVectorIntSet(); for (IntIterator it = intIterator(); it.hasNext();) { int x = it.next(); if (that.contains(x)) { result.add(x); } } return result; } }
@Override public IntSet intersection(IntSet that) { if (that == null) { throw new IllegalArgumentException("null that"); } if (that instanceof MutableSharedBitVectorIntSet) { return intersection((MutableSharedBitVectorIntSet) that); } else if (that instanceof BitVectorIntSet) { MutableSharedBitVectorIntSet m = new MutableSharedBitVectorIntSet((BitVectorIntSet) that); return intersection(m); } else if (that instanceof SparseIntSet) { BitVectorIntSet bv = new BitVectorIntSet(that); return intersection(bv); } else { // really slow. optimize as needed. BitVectorIntSet result = new BitVectorIntSet(); for (IntIterator it = intIterator(); it.hasNext();) { int x = it.next(); if (that.contains(x)) { result.add(x); } } return result; } }
/** * Record that in this procedure we've discovered a same-level realizable path from (s_p,0) to (n,d_j) * * @param n local block number of the basic block n */ @SuppressWarnings("unused") private void addZeroPathEdge(int n, int j) { BitVectorIntSet z = (BitVectorIntSet) zeroPaths.get(j); if (z == null) { z = new BitVectorIntSet(); zeroPaths.set(j, z); } z.add(n); if (altPaths != null) { IBinaryNaturalRelation R = altPaths.get(0); if (R == null) { // we expect the first dimension of R to be dense, the second sparse R = new BasicNaturalRelation(new byte[] { BasicNaturalRelation.SIMPLE_SPACE_STINGY }, BasicNaturalRelation.TWO_LEVEL); altPaths.set(0, R); } R.add(n, j); } if (TabulationSolver.DEBUG_LEVEL > 1) { System.err.println("recording 0-path edge, now d2= " + j + " reached at " + z); } }