We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
I have a question on branch prediction and conditional select instructions.
In this document (https://developer.arm.com/architectures/learn-the-architecture/armv8-a-instruction-set-architecture/program-flow-conditional-select-instructions), it mentions the following.
Importantly, conditional selects also remove the need to branch. In modern processors, this kind of branch can be difficult for the branch prediction logic to predict correctly. A mispredicted branch can have a negative effect on performance, it is better that you remove branches where possible.
It sounds like there will not be prediction computation squashing when conditional select instructions are used. But can it be true? For example, when this set of instructions is given,
CMP X0, XZR
CSEL X1, X2, X3, EQ
< rest of calculation is based on X1 >
If X0 is zero, then X1 is X2. if X0 is non-zero, then X1 is X3.
From my understanding, any branch prediction work based on X1 = X2 has to be squashed if X1 becomes X3 and vise-versa.
Or am I missing something?
Thanks,
Andrew