Commit 9ffa621e by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/47427 (ICE in process_constraint, at tree-ssa-structalias.c:2901)

	PR tree-optimization/47427
	PR tree-optimization/47428
	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
	coalesce if the new root var would be TREE_READONLY.

	* gcc.c-torture/compile/pr47427.c: New test.
	* gcc.c-torture/compile/pr47428.c: New test.

From-SVN: r169226
parent ae5b7e39
2011-01-25 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/47427
PR tree-optimization/47428
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
coalesce if the new root var would be TREE_READONLY.
2011-01-25 Richard Guenther <rguenther@suse.de> 2011-01-25 Richard Guenther <rguenther@suse.de>
PR middle-end/47414 PR middle-end/47414
......
2011-01-25 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/47427
PR tree-optimization/47428
* gcc.c-torture/compile/pr47427.c: New test.
* gcc.c-torture/compile/pr47428.c: New test.
2011-01-25 Richard Guenther <rguenther@suse.de> 2011-01-25 Richard Guenther <rguenther@suse.de>
PR middle-end/47411 PR middle-end/47411
......
/* PR tree-optimization/47427 */
char *g, *h;
int
bar (unsigned char x, const int y)
{
lab:
for (; h; g = h)
for (g = 0; h; h++)
{
int a = 1;
if (h)
{
if (a)
goto lab;
return y;
}
}
return x;
}
void
foo (void)
{
if (bar (0, 1))
bar (1, 0);
}
/* PR tree-optimization/47428 */
struct S
{
int s;
} a;
int b;
void bar (struct S);
int
baz (int x __attribute__((unused)), int y)
{
int i;
for (i = 0; i < 1; i = 1)
for (y = 0; y < 1; y = 1);
return y;
}
void
foo (void)
{
fn (0);
}
int
fn (const int x, int y __attribute__((unused)))
{
if (baz (baz (0, x), 0))
return 0;
else
bar (a);
return 0;
}
void
bar (struct S x)
{
for (;;)
for (; x.s;)
b = 0 ? : baz (0, 0);
}
/* Rename SSA copies. /* Rename SSA copies.
Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andrew MacLeod <amacleod@redhat.com> Contributed by Andrew MacLeod <amacleod@redhat.com>
...@@ -170,7 +170,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug) ...@@ -170,7 +170,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
return false; return false;
} }
/* Never attempt to coalesce 2 difference parameters. */ /* Never attempt to coalesce 2 different parameters. */
if (TREE_CODE (root1) == PARM_DECL && TREE_CODE (root2) == PARM_DECL) if (TREE_CODE (root1) == PARM_DECL && TREE_CODE (root2) == PARM_DECL)
{ {
if (debug) if (debug)
...@@ -226,6 +226,18 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug) ...@@ -226,6 +226,18 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
ign2 = false; ign2 = false;
} }
/* Don't coalesce if the new chosen root variable would be read-only.
If both ign1 && ign2, then the root var of the larger partition
wins, so reject in that case if any of the root vars is TREE_READONLY.
Otherwise reject only if the root var, on which replace_ssa_name_symbol
will be called below, is readonly. */
if ((TREE_READONLY (root1) && ign2) || (TREE_READONLY (root2) && ign1))
{
if (debug)
fprintf (debug, " : Readonly variable. No coalesce.\n");
return false;
}
/* Don't coalesce if the two variables aren't type compatible . */ /* Don't coalesce if the two variables aren't type compatible . */
if (!types_compatible_p (TREE_TYPE (root1), TREE_TYPE (root2)) if (!types_compatible_p (TREE_TYPE (root1), TREE_TYPE (root2))
/* There is a disconnect between the middle-end type-system and /* There is a disconnect between the middle-end type-system and
......
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