There are situations, called hazards that stop the next instruction in the instruction stream from implementing during its designated clock cycle. Hazards decrease the performance from the ideal speedup gained by pipelining. There are three classes of Hazards:
1. Structural Hazards: It happens from resource conflicts when the hardware cannot support all possible combinations of instructions simultaneously in overlapped implementation.
2. Data Hazards: It happens when an instruction depends on the results of last instruction in a way that is exposed by the overlapping of instructions in the pipeline.
3. Control Hazards: It happens from the pipelining of branches and other instructions that change the PC.