I'd hope that at least the branches would be turned into cmovs.
See a related bug in GCC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56309
"conditional moves instead of compare and branch result in almost 2x slower code"
idx = 2*idx + (key > table[idx])
(to move a key down an implicitly-stored binary tree)It generally lines up with what I've observed. Surprisingly, I've found that even arithmetic comparisons like you mentioned ran a bit faster with branches instead of conditional moves. The one case where I have seen comparisons benefit is with SSE code where the comparison results go straight to a register instead of a flag.