From e71d7f88ba619aab4d53468d4f26e97a670842dd Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Thu, 10 May 2007 23:33:11 +0200 Subject: [PATCH] re PR tree-optimization/31885 (Not removing empty loop, scev not finding the correct result) PR tree-optimization/31885 * tree-chrec.c (chrec_contains_undetermined): Do not consider NULL_TREE to be undetermined. (automatically_generated_chrec_p): Return false for NULL. * gcc.dg/tree-ssa/loop-29.c: New test. From-SVN: r124602 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tree-ssa/loop-29.c | 21 +++++++++++++++++++++ gcc/tree-chrec.c | 7 ++++--- gcc/tree-chrec.h | 3 +-- 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/loop-29.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73581110708..40867e98cdf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-05-10 Zdenek Dvorak + + PR tree-optimization/31885 + * tree-chrec.c (chrec_contains_undetermined): Do not consider NULL_TREE + to be undetermined. + (automatically_generated_chrec_p): Return false for NULL. + 2007-05-08 Bernd Schmidt * config/bfin/bfin.h (MOVE_RATIO): Define. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 22bc7b7dda1..c0e3d1e2327 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-05-10 Zdenek Dvorak + + PR tree-optimization/31885 + * gcc.dg/tree-ssa/loop-29.c: New test. + 2007-05-10 Dominique d'Humières * assumed_dummy_1.f90: Fix dg directive. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-29.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-29.c new file mode 100644 index 00000000000..13699aafd62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-29.c @@ -0,0 +1,21 @@ +/* PR 31885 */ + +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-empty" } */ + +struct s { + int *blah; +}; + +static struct s array[] = { { 0 } }; + +void +foo (struct s *p) +{ + struct s *q = &array[1]; + while (p < q) + p++; +} + +/* { dg-final { scan-tree-dump-times "Removing empty loop" 1 "empty" } } */ +/* { dg-final { cleanup-tree-dump "empty" } } */ diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c index 119a35b97c2..7abd5ad519f 100644 --- a/gcc/tree-chrec.c +++ b/gcc/tree-chrec.c @@ -888,11 +888,12 @@ chrec_contains_undetermined (tree chrec) { int i, n; - if (chrec == chrec_dont_know - || chrec == chrec_not_analyzed_yet - || chrec == NULL_TREE) + if (chrec == chrec_dont_know) return true; + if (chrec == NULL_TREE) + return false; + n = TREE_OPERAND_LENGTH (chrec); for (i = 0; i < n; i++) if (chrec_contains_undetermined (TREE_OPERAND (chrec, i))) diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index 95c6f384dde..6be00d63165 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -36,8 +36,7 @@ extern GTY(()) tree chrec_known; static inline bool automatically_generated_chrec_p (tree chrec) { - return (chrec == chrec_not_analyzed_yet - || chrec == chrec_dont_know + return (chrec == chrec_dont_know || chrec == chrec_known); } -- 2.30.2