On Mon, Apr 18, 2016 at 6:24 PM, Jan Hubicka <hubi...@ucw.cz> wrote: > Hi, > as discussed on IRC today, I would like to re-apply the patch to fix bogus > realistic bounds in niter. As it turned out, we seem to rely on this bogus > estimate in few benchmarks and there is miscompilation with avx512. > > The performance regressions should be solved my planned patch to introduce > likely upper bounds - here we can track the assumption that there are no > trailing arrays in the structures. I plan to send it after some benchmarking. > > Moreover we can get smarter about tracking trailing arrays. We seem to get > wrong MEM_REFs (as noticed by Richard), we may disable the path for non-C > based languages (regresions are for Fortran testcases) and we can track object > sizes. > > I plan to do that step-by-step so possible additional fallout is easier to > track. This patch re-instantiate first fix included in the orignial > patch - ivopts should consider max_stmt-executions_int when giving an estimate > on number of iterations. > > Bootstrapped/regtested x86_64-linux, comitted. > > Honza > > Index: ChangeLog > =================================================================== > --- ChangeLog (revision 235157) > +++ ChangeLog (working copy) > @@ -1,3 +1,8 @@ > +2016-04-17 Jan Hubicka <j...@suse.cz> > + > + * tree-ssa-loop-ivopts.c (avg_loop_niter): Use also > + max_loop_iterations_int. > + > 2016-04-18 Richard Biener <rguent...@suse.de> > > PR tree-optimization/43434 > Index: tree-ssa-loop-ivopts.c > =================================================================== > --- tree-ssa-loop-ivopts.c (revision 235064) > +++ tree-ssa-loop-ivopts.c (working copy) > @@ -121,7 +121,11 @@ avg_loop_niter (struct loop *loop) > { > HOST_WIDE_INT niter = estimated_stmt_executions_int (loop); > if (niter == -1) > - return AVG_LOOP_NITER (loop); > + { > + niter = max_stmt_executions_int (loop); > + if (niter == -1 || niter > AVG_LOOP_NITER (loop)) > + return AVG_LOOP_NITER (loop); Any reason why AVG_LOOP_NITER is still used if niter gives larger number?
Thanks, bin > + } > > return niter; > }