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.