http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53346
Jan Hubicka <hubicka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu.org --- Comment #21 from Jan Hubicka <hubicka at gcc dot gnu.org> 2012-11-14 22:18:53 UTC --- Well, as I wrote to the other PR, the main problem of cmov is extension of dependency chain. For well predicted sequence with conditional jump there is no update of rbs so the loop executes faster, because the loads/stores/comparisons executes "in parallel". The load in the next iteration can then happen speculatively before the condition from previous iteration is resolved. With cmov in it, there is dependence on rbx for all the other computations in the loop. I guess there is no localy available information suggesting suggesting that the particular branch is well predictable, at least without profile feedback (where we won't disable the conversion anyway). I wonder 1) why the conversion to cmov do not happen on RTL if conversion pass 2) whether we can do something to detect similar patterns and possibly disable cmovs on them...