From d0ed943ca48801dabdac2a70c974de074181c70b Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 13 Jan 2015 13:41:46 +0000 Subject: [PATCH] re PR tree-optimization/64406 (ICE: SIGSEGV in estimate_numbers_of_iterations_loop (tree-ssa-loop-niter.c:3453) with custom flags) 2015-01-13 Richard Biener PR tree-optimization/64406 * tree-loop-distibution.c (pass_loop_distribution::execute): Reset the SCEV hashtable if we distributed anything. * gcc.dg/pr64406.c: New testcase. From-SVN: r219528 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr64406.c | 26 ++++++++++++++++++++++++++ gcc/tree-loop-distribution.c | 3 +++ 4 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr64406.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d99589b2cab..ba272a1d606 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-13 Richard Biener + + PR tree-optimization/64406 + * tree-loop-distibution.c (pass_loop_distribution::execute): + Reset the SCEV hashtable if we distributed anything. + 2015-01-13 Richard Biener PR tree-optimization/64404 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 854d5f44611..819a122c920 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-13 Richard Biener + + PR tree-optimization/64406 + * gcc.dg/pr64406.c: New testcase. + 2015-01-13 Richard Biener PR tree-optimization/64404 diff --git a/gcc/testsuite/gcc.dg/pr64406.c b/gcc/testsuite/gcc.dg/pr64406.c new file mode 100644 index 00000000000..8af8e557770 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr64406.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-loop-distribute-patterns -fno-tree-loop-ivcanon -fno-tree-loop-vectorize -ftree-vectorize" } */ + +unsigned in[72]; + +void bar (unsigned out[], unsigned ia[]); + +void +foo () +{ + int i; + unsigned out[72], ia[8]; + for (i = 0; i < 8; i++) + { + out[i * 8] = in[i * 8] + 5; + out[i * 8 + 1] = in[i * 8 + 1] + 6; + out[i * 8 + 2] = in[i * 8 + 2] + 7; + out[i * 8 + 3] = in[i * 8 + 3] + 8; + out[i * 8 + 4] = in[i * 8 + 4] + 9; + out[i * 8 + 5] = in[i * 8 + 5] + 10; + out[i * 8 + 6] = in[i * 8 + 6] + 11; + out[i * 8 + 7] = in[i * 8 + 7] + 12; + ia[i] = in[i]; + } + bar (out, ia); +} diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index ecd51fb788a..904f4e8db60 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -1838,6 +1838,9 @@ out: if (changed) { + /* Cached scalar evolutions now may refer to wrong or non-existing + loops. */ + scev_reset_htab (); mark_virtual_operands_for_renaming (fun); rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa); } -- 2.30.2