From 9731a71c571699e497274dc343cbbfb43ea5b213 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 6 Oct 2006 09:27:28 +0200 Subject: [PATCH] re PR tree-optimization/29290 (SPEC CPU2000 178.galgel ICE using -O3 -ftree-loop-linear) PR tree-optimization/29290 * tree-loop-linear.c (linear_transform_loops): Bail if loop_nest has multiple exits. * gfortran.dg/loop_nest_1.f90: New test. From-SVN: r117484 --- gcc/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gfortran.dg/loop_nest_1.f90 | 9 +++++++++ gcc/tree-loop-linear.c | 4 ++-- 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/loop_nest_1.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59bafdec7ff..ace6a48e3f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2006-10-06 Jakub Jelinek + PR tree-optimization/29290 + * tree-loop-linear.c (linear_transform_loops): Bail if loop_nest has + multiple exits. + PR target/29198 * config/i386/i386.c (legitimize_pic_address): Reject TLS symbols. * config/i386/predicates.md (local_symbolic_operand): Likewise. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5027cb4f571..4754970e48c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-10-06 Jakub Jelinek + PR tree-optimization/29290 + * gfortran.dg/loop_nest_1.f90: New test. + PR target/29198 * gcc.dg/tls/opt-12.c: New test. diff --git a/gcc/testsuite/gfortran.dg/loop_nest_1.f90 b/gcc/testsuite/gfortran.dg/loop_nest_1.f90 new file mode 100644 index 00000000000..8968d88c470 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/loop_nest_1.f90 @@ -0,0 +1,9 @@ +! PR tree-optimization/29290 +! { dg-do compile } +! { dg-options "-O3 -ftree-loop-linear" } + +subroutine pr29290 (a, b, c, d) + integer c, d + real*8 a(c,c), b(c,c) + a(1:d,1:d) = b(1:d,1:d) +end diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index e0f5bd2991b..2ef7eacec13 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -265,12 +265,12 @@ linear_transform_loops (struct loops *loops) { ... } - for (j = 0; j < 50; j++) + for (j = 0; j < 50; j++) { ... } } */ - if (!loop_nest || !loop_nest->inner) + if (!loop_nest || !loop_nest->inner || !loop_nest->single_exit) continue; VEC_truncate (tree, oldivs, 0); VEC_truncate (tree, invariants, 0);