re PR tree-optimization/28003 (optimizer bug)

2006-08-22  Daniel Berlin  <dberlin@dberlin.org>

	PR tree-optimization/28003
	* tree-ssa-alias.c (compute_may_aliases): Compute call clobbered
	before grouping aliases.

From-SVN: r116323
This commit is contained in:
Daniel Berlin 2006-08-22 14:04:16 +00:00 committed by Daniel Berlin
parent 883259c6d3
commit ca8587095e
3 changed files with 40 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2006-08-22 Daniel Berlin <dberlin@dberlin.org>
PR tree-optimization/28003
* tree-ssa-alias.c (compute_may_aliases): Compute call clobbered
before grouping aliases.
2006-08-22 Roger Sayle <roger@eyesopen.com>
* config/i386/i386.c (ix86_value_regno): Don't return FIRST_MMX_REG

View File

@ -0,0 +1,31 @@
// PR tree-optimization/28003
// Alias grouping needs to be computed after call clobbering, because it
// changes around the tags and variables in a way that makes our
// call clobbering computation incorrect.
// { dg-do run }
// { dg-options "-O2" }
extern "C" void abort(void);
struct A
{
int i, j[9];
A() : i(1) { j[0]=j[1]=j[2]=j[3]=j[4]=j[5]=j[6]=j[7]=j[8]=0; }
};
struct B
{
A a;
};
B b[] =
{
{}, {}, {}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}
};
int main()
{
if (1 - b[sizeof(b)/sizeof(B) - 1].a.i != 0)
abort();
return 0;
}

View File

@ -678,14 +678,14 @@ compute_may_aliases (void)
/* Compute type-based flow-insensitive aliasing for all the type
memory tags. */
compute_flow_insensitive_aliasing (ai);
/* Compute call clobbering information. */
compute_call_clobbered (ai);
/* Determine if we need to enable alias grouping. */
if (ai->total_alias_vops >= MAX_ALIASED_VOPS)
group_aliases (ai);
/* Compute call clobbering information. */
compute_call_clobbered (ai);
/* If the program has too many call-clobbered variables and/or function
calls, create .GLOBAL_VAR and use it to model call-clobbering
semantics at call sites. This reduces the number of virtual operands