Ok on that part. int or vec3, who cares, they're both uniform values. Fine.
GPUs do not have a branch prediction unit, do they? Therefore they don't speculatively execute the code of the wrong branch.
Even if my condition is "if (gl_FragCoord.x > 10000)" which is not a dynamic-uniform (as you said), I don't see any reason why the GPU would choose to evaluate the wrong block of code. On a CPU it's because of the branch prediction unit (or maybe because of out-of-order execution), but on a GPU, I don't get it.