What is a Control Hazard (also known as a branch hazard)?
A Control Hazard is caused by instructions that change the program flow, such as conditional branches or jumps. When the CPU fetches the next instruction, it cannot yet determine the target of a conditional branch until the branch condition is calculated (usually in the Execute stage). This uncertainty can cause the pipeline to stall, or fetch the wrong instruction, thus incurring a penalty.