Commit 8d34bfa8 by Pat Haugen Committed by Pat Haugen

re PR rtl-optimization/78241 (wrong code with -funroll-loops)

	PR rtl-optimization/78241
	* loop-unroll.c (unroll_loop_runtime_iterations): Don't adjust 'niter', but
	emit initial peel copy if niter expr is not reliable.

	* gcc.dg/pr78241.c: New test.

From-SVN: r242047
parent a1566696
2016-11-10 Pat Haugen <pthaugen@us.ibm.com>
PR rtl-optimization/78241
* loop-unroll.c (unroll_loop_runtime_iterations): Don't adjust 'niter', but
emit initial peel copy if niter expr is not reliable.
2016-11-10 Segher Boessenkool <segher@kernel.crashing.org> 2016-11-10 Segher Boessenkool <segher@kernel.crashing.org>
* dwarf2cfi.c (dump_cfi_row): Add forward declaration. * dwarf2cfi.c (dump_cfi_row): Add forward declaration.
...@@ -918,9 +918,10 @@ unroll_loop_runtime_iterations (struct loop *loop) ...@@ -918,9 +918,10 @@ unroll_loop_runtime_iterations (struct loop *loop)
if (tmp != niter) if (tmp != niter)
emit_move_insn (niter, tmp); emit_move_insn (niter, tmp);
/* For loops that exit at end, add one to niter to account for first pass /* For loops that exit at end and whose number of iterations is reliable,
through loop body before reaching exit test. */ add one to niter to account for first pass through loop body before
if (exit_at_end) reaching exit test. */
if (exit_at_end && !desc->noloop_assumptions)
{ {
niter = expand_simple_binop (desc->mode, PLUS, niter = expand_simple_binop (desc->mode, PLUS,
niter, const1_rtx, niter, const1_rtx,
...@@ -946,7 +947,7 @@ unroll_loop_runtime_iterations (struct loop *loop) ...@@ -946,7 +947,7 @@ unroll_loop_runtime_iterations (struct loop *loop)
auto_sbitmap wont_exit (max_unroll + 2); auto_sbitmap wont_exit (max_unroll + 2);
if (extra_zero_check) if (extra_zero_check || desc->noloop_assumptions)
{ {
/* Peel the first copy of loop body. Leave the exit test if the number /* Peel the first copy of loop body. Leave the exit test if the number
of iterations is not reliable. Also record the place of the extra zero of iterations is not reliable. Also record the place of the extra zero
......
2016-11-10 Pat Haugen <pthaugen@us.ibm.com>
PR rtl-optimization/78241
* gcc.dg/pr78241.c: New test.
2016-11-10 Jakub Jelinek <jakub@redhat.com> 2016-11-10 Jakub Jelinek <jakub@redhat.com>
* gfortran.dg/openmp-define-3.f90: Expect 201511 instead of * gfortran.dg/openmp-define-3.f90: Expect 201511 instead of
......
/* { dg-do run } */
/* { dg-options "-Og -funroll-loops" } */
static __attribute__((noinline, noclone)) unsigned
foo (unsigned x)
{
do
x++;
while (x <= 15);
return x;
}
int main ()
{
unsigned x = foo (-2);
if (x != (unsigned)-1)
__builtin_abort();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment