> Not having loop handling does seem offI do agree. The fact that those uop queues are already there and Intel isn't using them as a loop buffer does make me ask questions. Have they just not gotten around to it? Have they decided its not worth the power savings? Maybe they are aiming for simplicity?
> However, a large amount of comparative wall time in code is spent on sequences of a short piece of code and a branch that is hard to predict.
The thing is, any time the branch predictor has at least one correct prediction, the decode throughput doubles to 6 IPC. And if it gets two correct predictions in a row, the IPC triples to 9.
I'm not sure how many cycles the "execute both sides of the branch" would save on a misspredict, but your basic blocks would need to be very short and the prediction accuracy would need to be very low (like, 50% or lower) before it can actually out-preform the leapfrogging decoder approach on those sequences of code.
> but if you just synthetically insert a split some distance down, you may be misaligned with the actual instruction stream
It only inserts the splits after decoding, so they will always be at the correct alignment.