private List<FunctionNode> generateNodes(final Program program, AddressSetView addrSet,
			boolean useCallRefs, final TaskMonitor monitor)
			throws InterruptedException, CancelledException, Exception {

		monitor.checkCancelled();

		CachingPool<DecompInterface> decompilerPool = new CachingPool<DecompInterface>(
			new DecompilerFactory(program, vectorFactory.getSettings()));
		ParallelDecompilerCallback callback =
			new ParallelDecompilerCallback(decompilerPool, vectorFactory, useCallRefs);

		List<FunctionNode> results = null;
		try {
			AddressSetView refinedAddressSet = VTFunctionSizeUtil.minimumSizeFunctionFilter(program,
				addrSet, FUNCTION_MINIMUM_SIZE, monitor);
			results = ParallelDecompiler.decompileFunctions(callback, program, refinedAddressSet,
				monitor);
		}
		finally {
			decompilerPool.dispose();
		}

		addExternalFunctions(program, results, vectorFactory, monitor);

		monitor.setMessage("Collecting dictionary results");
		return results;
	}
Correlator which discovers functional matches by comparing data-flow feature vectors.
An initial seed set of high confidence matches are chosen.  The match set is extended
from the seeds by using local neighborhoods around the accepted match to efficiently
discover new matches.
Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelator.java