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 15 September 2017 at 22:09, Marc Glisse <marc.glisse@inria.fr> wrote:
> 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)
Hi,
Thanks for the suggestions, I have updated the patch.
Is this OK ?
Bootstrap+test in progress on x86_64-unknown-linux-gnu.
I will try address the right shift by 4 case in follow up patch.

Thanks,
Prathamesh
>
> --
> Marc Glisse

Attachment: unsigned-div-to-cmp-2.txt
Description: Text document


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