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
This commit is contained in:
Zdenek Dvorak 2007-05-10 23:33:11 +02:00 committed by Zdenek Dvorak
parent 5635c26e57
commit e71d7f88ba
5 changed files with 38 additions and 5 deletions

View file

@ -1,3 +1,10 @@
2007-05-10 Zdenek Dvorak <dvorakz@suse.cz>
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 <bernd.schmidt@analog.com>
* config/bfin/bfin.h (MOVE_RATIO): Define.

View file

@ -1,3 +1,8 @@
2007-05-10 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/31885
* gcc.dg/tree-ssa/loop-29.c: New test.
2007-05-10 Dominique d'Humières <dominiq@lps.ens.fr>
* assumed_dummy_1.f90: Fix dg directive.

View file

@ -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" } } */

View file

@ -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)))

View file

@ -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);
}