To speculate ambitiously requires three capabilities:
The ability of the complier to find instructionsthat, with the possible use of register renaming,can be speculatively moved and not affect theprogram data flow.
The ability to ignore exceptions in speculatedinstructions, until we know that such exceptionsshould really occur.
The ability to speculatively interchange loads andstores, or stores and stores, which may haveaddress conflicts.
The first of these is a complier capability, whilethe last two require hardware support .