unroll-1.c: New testcase.
* gcc.dg/tree-prof/unroll-1.c: New testcase. * loop-unroll.c (decide_unroll_constant_iterations): Don't perform unrolling for loops with low iterations bounds or estimates. From-SVN: r192638
This commit is contained in:
parent
bcd8d322db
commit
e598c332d8
4 changed files with 42 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-10-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* loop-unroll.c (decide_unroll_constant_iterations): Don't
|
||||
perform unrolling for loops with low iterations bounds or estimates.
|
||||
|
||||
2012-10-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* loop-iv.c (iv_number_of_iterations): Record the upper bound
|
||||
|
|
|
@ -519,6 +519,7 @@ decide_unroll_constant_iterations (struct loop *loop, int flags)
|
|||
{
|
||||
unsigned nunroll, nunroll_by_av, best_copies, best_unroll = 0, n_copies, i;
|
||||
struct niter_desc *desc;
|
||||
double_int iterations;
|
||||
|
||||
if (!(flags & UAP_UNROLL))
|
||||
{
|
||||
|
@ -561,8 +562,14 @@ decide_unroll_constant_iterations (struct loop *loop, int flags)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Check whether the loop rolls enough to consider. */
|
||||
if (desc->niter < 2 * nunroll)
|
||||
/* Check whether the loop rolls enough to consider.
|
||||
Consult also loop bounds and profile; in the case the loop has more
|
||||
than one exit it may well loop less than determined maximal number
|
||||
of iterations. */
|
||||
if (desc->niter < 2 * nunroll
|
||||
|| ((estimated_loop_iterations (loop, &iterations)
|
||||
|| max_loop_iterations (loop, &iterations))
|
||||
&& iterations.ult (double_int::from_shwi (2 * nunroll))))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ";; Not unrolling loop, doesn't roll\n");
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-10-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gcc.dg/tree-prof/unroll-1.c: New testcase.
|
||||
|
||||
2012-10-19 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/54224
|
||||
|
|
24
gcc/testsuite/gcc.dg/tree-prof/unroll-1.c
Normal file
24
gcc/testsuite/gcc.dg/tree-prof/unroll-1.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* { dg-options "-O3 -fdump-rtl-loop2_unroll -funroll-loops -fno-peel-loops" } */
|
||||
void abort ();
|
||||
|
||||
int a[1000];
|
||||
int
|
||||
__attribute__ ((noinline))
|
||||
t()
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<1000;i++)
|
||||
if (!a[i])
|
||||
return 1;
|
||||
abort ();
|
||||
}
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<1000;i++)
|
||||
t();
|
||||
return 0;
|
||||
}
|
||||
/* { dg-final-use { scan-rtl-dump "Considering unrolling loop with constant number of iterations" "loop2_unroll" } } */
|
||||
/* { dg-final-use { cleanup-rtl-dump "Not unrolling loop, doesn't roll" } } */
|
||||
/* { dg-options "-O3 -fdump-rtl-loop2_unroll -funroll-loops -fno-peel-loops" } */
|
Loading…
Add table
Reference in a new issue