There are some restricted form of value prediction in the wild: Indirect branch prediction is fairly common; so is alias prediction that will speculate whether two data addresses (at least one if which is a store) do not alias; AMD memory renaming also makes assumptions around stack addresses; outside of these special cases I'm not aware on any cpu that will actually generally speculate actual values or address.
On relaxed memory model machines naive value prediction would break dependency ordering (i.e. memory order consume), so things get very complicated.
What you posted is right, but I wouldn't classify indirect branch prediction as value prediction, because it doesn't supply a value to any other part of the processor (e.g. substitute a predicted value into a register). It just steers the frontend to where instructions should be fetched from, so it is just branch prediction.
Branch-Prediction and Value-Prediction are two similar fields but they are really different fields.
When a branch prediction is wrong we have to change the execution path and therefore flush the executed instructions (on the wrong path).
With a value prediction the execution path is correct so you don't have to flush the instructions, but you have to replay them with the right value.
These two techniques involve very different hardware.
Here in the article it is about value prediction emulated in software using branch prediction, it uses the hardware of the branch prediction therefore mispredicted instructions must be flushed.
The only valid example of value prediction you gave here is for prediction of the stack address for memory renaming. In all other cases you have to flush the instructions, while for memory renaming you can just replay it.
And this is a very restricted form of value prediction. There is no real complete value prediction mechanism in modern processors yet.
Comments
I was under the impression that high end CPUs already perform value prediction while speculating?
There are some restricted form of value prediction in the wild: Indirect branch prediction is fairly common; so is alias prediction that will speculate whether two data addresses (at least one if which is a store) do not alias; AMD memory renaming also makes assumptions around stack addresses; outside of these special cases I'm not aware on any cpu that will actually generally speculate actual values or address.
On relaxed memory model machines naive value prediction would break dependency ordering (i.e. memory order consume), so things get very complicated.
What you posted is right, but I wouldn't classify indirect branch prediction as value prediction, because it doesn't supply a value to any other part of the processor (e.g. substitute a predicted value into a register). It just steers the frontend to where instructions should be fetched from, so it is just branch prediction.
Branch-Prediction and Value-Prediction are two similar fields but they are really different fields.
When a branch prediction is wrong we have to change the execution path and therefore flush the executed instructions (on the wrong path).
With a value prediction the execution path is correct so you don't have to flush the instructions, but you have to replay them with the right value. These two techniques involve very different hardware.
Here in the article it is about value prediction emulated in software using branch prediction, it uses the hardware of the branch prediction therefore mispredicted instructions must be flushed.
The only valid example of value prediction you gave here is for prediction of the stack address for memory renaming. In all other cases you have to flush the instructions, while for memory renaming you can just replay it.
And this is a very restricted form of value prediction. There is no real complete value prediction mechanism in modern processors yet.