This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Minor record_upper_bound tweek
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org, rguenther at suse dot de
- Date: Mon, 22 Oct 2012 17:26:25 +0200
- Subject: Minor record_upper_bound tweek
Hi,
with profile feedback we may misupdate the profile and start to believe that loops
iterate more times than they do. This patch makes at least nb_iterations_estimate
no greater than nb_iterations_upper_bound. This makes the unrolling/peeling/unswitching
heuristics to behave more consistently.
Bootstrapped/regtested x86_64-linux, OK?
Honza
* tree-sssa-loop-niter.c (record_niter_bound): Be sure that realistic
estimate is not bigger than upper bound.
Index: tree-ssa-loop-niter.c
===================================================================
--- tree-ssa-loop-niter.c (revision 192632)
+++ tree-ssa-loop-niter.c (working copy)
@@ -2506,13 +2506,20 @@ record_niter_bound (struct loop *loop, d
{
loop->any_upper_bound = true;
loop->nb_iterations_upper_bound = i_bound;
+ if (loop->any_estimate
+ && i_bound.ult (loop->nb_iterations_estimate))
+ loop->nb_iterations_estimate = i_bound;
}
if (realistic
&& (!loop->any_estimate
|| i_bound.ult (loop->nb_iterations_estimate)))
{
loop->any_estimate = true;
- loop->nb_iterations_estimate = i_bound;
+ if (loop->nb_iterations_upper_bound.ult (i_bound)
+ && loop->any_upper_bound)
+ loop->nb_iterations_estimate = loop->nb_iterations_upper_bound;
+ else
+ loop->nb_iterations_estimate = i_bound;
}
/* If an upper bound is smaller than the realistic estimate of the