This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Re-apply reverted niter change 1/4
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: gcc-patches List <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 19 Apr 2016 10:00:18 +0100
- Subject: Re: Re-apply reverted niter change 1/4
- Authentication-results: sourceware.org; auth=none
- References: <20160418172448 dot GA83672 at kam dot mff dot cuni dot cz>
On Mon, Apr 18, 2016 at 6:24 PM, Jan Hubicka <hubicka@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 <jh@suse.cz>
> +
> + * tree-ssa-loop-ivopts.c (avg_loop_niter): Use also
> + max_loop_iterations_int.
> +
> 2016-04-18 Richard Biener <rguenther@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;
> }