private CodeBlock getBlock(CodeBlock blockNeeded, CodeBlock blockHave, Address addrInBlock) {
		if (blockNeeded == null) {
			CodeBlockModel model = blockHave.getModel();
			try {
				blockNeeded =
					model.getFirstCodeBlockContaining(addrInBlock, TaskMonitor.DUMMY);
			}
			catch (CancelledException e) {
				// can't happen, dummy monitor can't be canceled
			}

			// means that there wasn't a good source block there,
			//    make an invalid source block
			//  TODO: This might not be the right thing to do.  Return a
			//        codeBlock that really isn't there, but should be if
			//        there were valid instructions.  If you got it's start
			//        address then got the block starting at from the model,
			//        you would get null, so maybe the model should be changed
			//        to return a block at this address....
			if (blockNeeded == null) {
				if (model instanceof SimpleBlockModel) {
					blockNeeded =
						((SimpleBlockModel) model).createSimpleDataBlock(addrInBlock, addrInBlock);
				}
			}
		}
		return blockNeeded;
	}
Gets the block (source or destination).  If the block is needed,
assume we have the blockHave and compute blockNeeded using that block.

@param blockNeeded - block we need 
@param blockHave - block we know
@param addrInBlock - address in the block we need
@return the block
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/CodeBlockReferenceImpl.java