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

Marc Glisse marc.glisse@inria.fr
Fri Sep 15 16:39:00 GMT 2017


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



More information about the Gcc-patches mailing list