[Bug rtl-optimization/91154] [10 Regression] 456.hmmer regression on Haswell caused by r272922
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jul 17 13:10:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91154
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #6)
> So pretty much undo all ifcvt into conditional moves (aka pretend the target
> doesn't have cmov) or something else?
> The problem is that cmov isn't unconditionally bad or unconditionally good
> and moving in either direction usually results in significant regressions.
> cmov is good if the branch will be often badly predicted, so when the branch
> prediction is close to 50%, and is bad when it is usually well predicted.
I'd only do it for MAX<small-constant, x> and MIN<large-constant, x>. There's
also another conditional move a few instructions up, not sure if cmove
density would be another thing to key on.
If target costing generally favors the cmp + if-then-else then we may also
simply advertise [us]{min,max} patterns here? That said, RTL expansion
doesn't look at cost but only asks can_conditionally_move_p (mode) but
hopefully if-conversion considers actual rtx-cost.
Other ideas welcome of course.
More information about the Gcc-bugs
mailing list