This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Transform (x / y) != 0 to x >=y and (x / y) == 0 to x < y if x, y are unsigned


On Fri, 15 Sep 2017, Wilco Dijkstra wrote:

Marc Glisse wrote:

The question is whether, having computed c=a/b, it is cheaper to test a<b or c!=0.
I think it is usually the second one, but not for all types on all targets. Although since
you mention VRP, it is easier to do further optimizations using the information a<b.

No, a<b is always better. Division does have high latency and low throughput on
all modern cores, so rather than having to wait until the division finishes, you can
execute whatever depends on the comparison many cycles earlier.

Generally you want to avoid division as much as possible and when that fails
reduce any dependencies on the result of divisions.

This would indicate that we do not need to check for single-use, makes the patch simpler, thanks.
(let's ignore -Os)

--
Marc Glisse


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]