private void coalesceVarnode(Varnode varnode) {
		Address min = varnode.getAddress();
		Address max = maxAddr(varnode);
		Entry<Address, Varnode> leftEntry = coalesced.floorEntry(min);
		if (leftEntry != null && overlapsLeft(leftEntry.getValue(), varnode)) {
			min = leftEntry.getKey();
		}
		Entry<Address, Varnode> rightEntry = coalesced.floorEntry(max);
		if (rightEntry != null) {
			max = MathUtilities.cmax(max, maxAddr(rightEntry.getValue()));
		}
		Varnode exists = leftEntry == null ? null : leftEntry.getValue();
		Varnode existsRight = rightEntry == null ? null : rightEntry.getValue();
		if (exists == existsRight && exists != null && exists.getAddress().equals(min) &&
			maxAddr(exists).equals(max)) {
			return; // no change
		}
		coalesced.subMap(min, true, maxAddr(varnode), true).clear();
		coalesced.put(min, new Varnode(min, (int) max.subtract(min) + 1));
	}
Check for overlap when one varnode is known to be to the left of the other.

@param left the left varnode (having lower address)
@param right the right varnode (having higher address)
@return true if they overlap (not counting abutting), false otherwise.
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitVarScopeModel.java