That's a good point, but a bad example since 'x < 0 ? 1 : 0' is just the same as 'x < 0', which is also be implemented (on x86) as a CMP followed by SETcc.
Some targets don't support integer division/remainder or some floating point ops in hardware and automatic vectorization can add/remove branches in places that won't be easily predictable.
Are there any code patterns where the compiler emits branches that are not apparent in the code? Notwithstanding overflow checks, etc.