Depends how many instructions are there. IIRC it should always predicate for <= 4 instructions within a conditional block or even <=7 if it decides it’d be better (dark compiler magic). I’m not a compiler guru though.
If there are more instructions in a block, there’ll be a conditional jump. It’s actually better to jump when you have a large block of code. If you’re predicating, all threads will always execute all control paths (masking themselves off for non-taken branches). If you’re jumping, it might happen so that all threads evaluate to a single control path and there’ll only be a single jump. It’s a balancing act between paying for a jump instruction (potentially several) and paying for several arithmetic/logical instructions that may be executed even when there’s no need.
For highly divergent code, when a warp will have to execute most control paths sequentially anyway, it’s better to predicate because you don’t get the jump instruction overhead. For rarely diverging code with big conditional blocks it can be better to jump, because what you pay in jump instruction overhead you might gain in not following non-taken control paths.