Have I understood this right, if
statements are more dependent on branch prediction and v-table look-up is more dependent on branch target prediction? Regarding v-tables, there is no "branch prediction", just the target prediction?
Trying to understand how a v-table is processed by the CPU.
Branch prediction is predicting whether or not the branch will be taken. Branch target prediction is prediction where the branch is going to. These two things are independent and can occur in all combinations.
Examples of these might be:
Unconditional branch, fixed target
goto
statementbreak
orcontinue
statementif/else
statement (to jump past theelse
clause)Unconditional branch, variable target
switch
statement (if compiled into a jump table)Conditional branch, fixed target
if
statementswitch
statement (if compiled into a series ofif/else
statements)&&
and||
operators?:
operatorConditional branch, variable target
if (condition) { obj->VirtualFunctionCall(); }
into a conditional indirect jump likejne *%eax
if it appears at the end of a function due to tail call optimization.