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
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:
goto
statementbreak
or continue
statementif/else
statement (to jump past the else
clause)switch
statement (if compiled into a jump table)if
statementswitch
statement (if compiled into a series of if/else
statements)&&
and ||
operators?:
operatorif (condition) { obj->VirtualFunctionCall(); }
into a conditional indirect jump like jne *%eax
if it appears at the end of a function due to tail call optimization.