private void analyze() {
		coalesceVarnodes();
		for (JitBlock block : cfm.getBlocks()) {
			ScopeInfo info = new ScopeInfo(block);
			infos.put(block, info);
			blockQueue.add(info);
		}
		while (pushNext(Which.UP)) {
		}

		blockQueue.addAll(infos.values());
		while (pushNext(Which.DOWN)) {
		}

		for (ScopeInfo info : infos.values()) {
			info.finish();
		}
	}
Perform the analysis.

<p>
This starts with the upward set, which is computed by pushing queued block's varnodes upward
until the queue is empty. All blockes are queued initially. When a block's set is affected,
it's re-added to the queue, so we know we've converged when the queue is empty. The downward
set is then computed in the same fashion.
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitVarScopeModel.java