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  <hiradi...@msn.com>

         * gcc.dg/vect/pr48052.c: New test.

gcc/ChangeLog:

2015-05-19  hiraditya  <hiradi...@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.

Jeff

Reply via email to