Thus far we have seen one kind of data hazard: a calculation must wait until a value it needs has been calculated. There are actually three kinds of data hazard:
``Read after write'': the register must be read after it has been written (or at least calculated)
``Write after write'': The register must be written after previous instructions have written to it - updates must be performed in order
``Write after read'': The register must only be written to after previous instructions have read it