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-apply reverted niter change 1/4


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);
+    }
 
   return niter;
 }


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