private boolean isBlockStart(Instruction instruction, Address fallFrom) {

		// If there is not a fall-from instruction
		if (fallFrom == null) {

			// if current instruction is offcut, it is not start
			try {
				Address addr = instruction.getMinAddress();
				Instruction chkInstr = listing.getInstructionContaining(addr.subtractNoWrap(1));
				if (chkInstr != null && chkInstr.getMaxAddress().compareTo(addr) >= 0) {
					return false;
				}
			}
			catch (AddressOverflowException e) {
			}
			return true;
		}

		Instruction previous = listing.getInstructionContaining(fallFrom);
		if (previous == null) {
			return true;
		}

		// blocks should never start on a delay start instruction
		// unless a from-from instruction does not exist.
		if (instruction == null || instruction.isInDelaySlot()) {
			return false;
		}

		// if previous instruction is offcut, current instruction is start
		try {
			Address addr = previous.getMinAddress();
			Instruction chkInstr = listing.getInstructionContaining(addr.subtractNoWrap(1));
			if (chkInstr != null && chkInstr.getMaxAddress().compareTo(addr) >= 0) {
				return true;
			}
		}
		catch (AddressOverflowException e) {
		}

		// If current instruction has a label, return true
		if (program.getSymbolTable().hasSymbol(instruction.getMinAddress())) {
			return true;
		}

		// If fall-from instruction has a flow-type reference, return true
		return !previous.hasFallthrough() || hasEndOfBlockFlow(previous);
	}
Check if the instruction starts a Simple block.

@param instruction instruction to test if it starts a block

@return true if this instruction is the start of a simple block.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleBlockModel.java