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:
parent
883259c6d3
commit
ca8587095e
@ -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
|
||||
|
31
gcc/testsuite/g++.dg/tree-ssa/pr28003.C
Normal file
31
gcc/testsuite/g++.dg/tree-ssa/pr28003.C
Normal 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;
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user