Quote Originally Posted by GClements View Post
The type doesn't matter.
Ok on that part. int or vec3, who cares, they're both uniform values. Fine.

Quote Originally Posted by GClements View Post
Because GLSL assumes (and GPUs implement) a SIMD architecture, a conditional is typically executed by executing both branches but ignoring state changes in whichever branch wasn't selected by the condition. But if a non-selected branch results in an error, it can still effect the overall execution of the shader.
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.