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 18 September 2017 at 15:40, Prathamesh Kulkarni
<prathamesh.kulkarni@linaro.org> wrote:
> 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.
>
ping https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01145.html

Thanks,
Prathamesh
> Thanks,
> Prathamesh
>>
>> --
>> Marc Glisse


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