/** * traverse locals in order, first by node, then by value number: attempt to improve locality */ private void computePredecessorsForLocals(NumberedNodeManager<Object> nodeManager, BasicNaturalRelation R) { ArrayList<LocalPointerKey> list = new ArrayList<>(); for (Object n : nodeManager) { if (n instanceof LocalPointerKey) { list.add((LocalPointerKey) n); } } Object[] arr = list.toArray(); Arrays.sort(arr, new LocalPointerComparator()); for (int i = 0; i < arr.length; i++) { if (VERBOSE) { if (i % VERBOSE_INTERVAL == 0) { System.err.println("Building HeapGraph: " + i + " of " + arr.length); } } LocalPointerKey n = (LocalPointerKey) arr[i]; int num = nodeManager.getNumber(n); int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { for (int j : succ) { R.add(j, num); } } } }
/** * traverse locals in order, first by node, then by value number: attempt to improve locality */ private void computePredecessorsForLocals(NumberedNodeManager<Object> nodeManager, BasicNaturalRelation R) { ArrayList<LocalPointerKey> list = new ArrayList<>(); for (Object n : nodeManager) { if (n instanceof LocalPointerKey) { list.add((LocalPointerKey) n); } } Object[] arr = list.toArray(); Arrays.sort(arr, new LocalPointerComparator()); for (int i = 0; i < arr.length; i++) { if (VERBOSE) { if (i % VERBOSE_INTERVAL == 0) { System.err.println("Building HeapGraph: " + i + " of " + arr.length); } } LocalPointerKey n = (LocalPointerKey) arr[i]; int num = nodeManager.getNumber(n); int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { for (int j : succ) { R.add(j, num); } } } }
private void computePredecessorsForNonLocals(NumberedNodeManager<Object> nodeManager, BasicNaturalRelation R) { // Note: we run this loop backwards on purpose, to avoid lots of resizing of // bitvectors // in the backing relation. i.e., we will add the biggest bits first. // pretty damn tricky. for (int i = nodeManager.getMaxNumber(); i >= 0; i--) { if (VERBOSE) { if (i % VERBOSE_INTERVAL == 0) { System.err.println("Building HeapGraph: " + i); } } Object n = nodeManager.getNode(i); if (!(n instanceof LocalPointerKey)) { int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { for (int j : succ) { R.add(j, i); } } } } }
private void computePredecessorsForNonLocals(NumberedNodeManager<Object> nodeManager, BasicNaturalRelation R) { // Note: we run this loop backwards on purpose, to avoid lots of resizing of // bitvectors // in the backing relation. i.e., we will add the biggest bits first. // pretty damn tricky. for (int i = nodeManager.getMaxNumber(); i >= 0; i--) { if (VERBOSE) { if (i % VERBOSE_INTERVAL == 0) { System.err.println("Building HeapGraph: " + i); } } Object n = nodeManager.getNode(i); if (!(n instanceof LocalPointerKey)) { int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { for (int j : succ) { R.add(j, i); } } } } }