General speculative execution
Allow execution of an instruction before knowing that it is to be executed
- Branch prediction (instructions after the branch executed but not completed before branch is resolved)
- Moving code across basic block boundaries (instructions are “executed” before the branch on which they use to depend is issued)
- Conditional instructions
- Out of order execution but in-order completion