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: Fix PR48052: loop not vectorized if index is "unsigned int"


On Mon, Jun 1, 2015 at 4:00 PM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Sat, May 30, 2015 at 7:47 AM, Jeff Law <law@redhat.com> wrote:
>> On 05/19/2015 10:12 AM, Aditya K wrote:
>>>
>>> w.r.t. the PR48052, here is the patch which finds out if scev would wrap
>>> or not.
>>> The patch symbolically evaluates if valid_niter>= loop->nb_iterations is
>>> true. In that case the scev would not wrap (??).
>>> Currently, we only look for two special 'patterns', which are sufficient
>>> to analyze the simple test cases.
>>>
>>> valid_niter = ~s (= UNIT_MAX - s)
>>> We have to prove that valid_niter>= loop->nb_iterations
>>>
>>> Pattern1 loop->nb_iterations: s>= e ? s - e : 0
>>> Pattern2 loop->nb_iterations: (e - s) -1
>>>
>>> In the first case we prove that valid_niter>= loop->nb_iterations in both
>>> the cases i.e., when s>=e and when not.
>>> In the second case we prove valid_niter>= loop->nb_iterations, by simple
>>> analysis that  UINT_MAX>= e is true in all cases.
>>>
>>> I haven't tested this patch completely. I'm looking for feedback and any
>>> scope for improvement.
>>>
>>>
>>> hth,
>>> -Aditya
>>>
>>>
>>>
>>> Vectorize loops which has typecast.
>>>
>>> 2015-05-19  hiraditya  <hiraditya@msn.com>
>>>
>>>          * gcc.dg/vect/pr48052.c: New test.
>>>
>>> gcc/ChangeLog:
>>>
>>> 2015-05-19  hiraditya  <hiraditya@msn.com>
>>>
>>>          * tree-ssa-loop-niter.c (fold_binary_cond_p): Fold a conditional
>>> operation when additional constraints are
>>>          available.
>>>          (fold_binary_minus_p): Fold a subtraction operations of the form
>>> (A - B -1) when additional constraints are
>>>          available.
>>>          (scev_probably_wraps_p): Use the above two functions to find
>>> whether valid_niter>= loop->nb_iterations.
>>
>> Is any of this work still useful if Bin Cheng's work on improving overflow
>> detection for scev goes forward?  I certainly got the impression that Bin's
>> work would solve 48052 and others.
>
> Bin is probably the one to answer this.  His patches are still on my list
> of patches to review...
Richard, you have already approved the first one.  The second one is
at https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02317.html . You may
need to decide if it is as expected.

Yes, PRs like 62173, 52563 and 48052 will be fixed with these two patches.

Thanks,
bin
>
> Richard.
>
>> Jeff
>>


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