The target of taken conditional direct branches does not
need to be resolved in IEW: the target can be computed at
decode, usually using the decoded instruction word and the PC.
The higher-than-necessary penalty is taken only on conditional
branches that are predicted taken but miss in the BTB. Thus,
this is mostly inconsequential on IPC if the BTB is big/associative
enough (fewer capacity/conflict misses). Nonetheless, what gem5
simulates is not representative of how conditional branch targets
can be handled.
Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
}
// Go ahead and compute any PC-relative branches.
- if (inst->isDirectCtrl() && inst->isUncondCtrl()) {
+ // This includes direct unconditional control and
+ // direct conditional control that is predicted taken.
+ if (inst->isDirectCtrl() &&
+ (inst->isUncondCtrl() || inst->readPredTaken()))
+ {
++decodeBranchResolved;
if (!(inst->branchTarget() == inst->readPredTarg())) {