4 ms·
Even if you do the branchiest thing possible in the source, no bitwise or "looks cmov-y" stuff, all compilers that matter will do this without a branch with opt
by BeeOnRope 7y ago
Even if you do the branchiest thing possible in the source, no bitwise or "looks cmov-y" stuff, all compilers that matter will do this without a branch with optimization on:
https://godbolt.org/z/XCBGYW https://godbolt.org/z/XCBGYW
Only icc vectorizes this at -O2 (still branchless, of course), but clang and gcc vectorize it if you go to -O3.
- gpderetta 7y agoSure, but where's the code golfing fun in there ;)
- BeeOnRope 7y ago:) I guess I'm not fun at [code golfing] parties. I just want to gently push back on the notion that the source level branchy-ness is tightly tied to the generated assembly level branchiness. Sometimes, it is - but it is a long topic to characterize when. For simple things like counters based on a condition, you'll almost always get branch-free. Same for assignment/return value based on a condition, where the possibilities don't involve lots of asymmetric work (or a asymmetric memory access).