Speculation is an approach that allows the compiler or the processor to “guess” about the
properties of an instruction, so as to enable execution to begin for other instructions that may depend on
the speculated instruction. For example, we might speculate on the outcome of a branch, so that
instructions after the branch could be executed earlier. Or, we might speculate that a store that precedes a
load does not refer to the same address, which would allow the load to be executed before the store. The
difficulty with speculation is that it may be wrong