For a MIPS 5 stage pipeline, the branch target is known by the decode stage because it can be easily extracted if the branch offset it is in the instruction and also you read the registers in the decode stage.
So then for an out of order pipeline, you obviously run into a problem with with instructions like 'jr', which might use a register that hasn't been calculated yet. For uses like this, there is clear use for a branch target buffer.
But for an instruction like 'beq', I see the necessity for a branch predictor, but not for the branch target because you already know the branch offset and of course you know the current program counter so you can easily come up with the branch destination.
Are register jumps the only instructions that use the branch target buffer or am I missing something?