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