On 7/18/07, Andreas Krebbel <[EMAIL PROTECTED]> wrote:
Hi,
GCC currently doesn't bootstrap on s390x. The problem is that
gengtype is miscompiled and I suspect the fre - sccvn changes to be
the culprit.
When sccvn performs the depth-first search for uses it might reach
global variable definitions
No, global variable definitions are *never* the SSA_NAME_DEF_STMT of
anything, so it won't reach them.
We explicitly pull out initializers from variables that are:
/* Pull out any truly constant values. */
if (TREE_READONLY (rhs)
&& TREE_STATIC (rhs)
&& DECL_INITIAL (rhs)
&& valid_gimple_expression_p (DECL_INITIAL (rhs)))
return DECL_INITIAL (rhs);
This is exacfly the same set of constraints CCP uses, and my guess is
if you disable SCCVN from doing this, you will discover the same code
is generated anyway.
. If the global variable is initialized
with a value that value is taken as constant and used to replace uses
of that variable.
e.g.:
int global = 1;
int
foo (int a)
{
return a != global;
}
int
main ()
{
global = 3;
if (foo (3))
abort ();
}
becomes (compiled with -O1):
foo (a)
{
int global.0;
int D.1626;
<bb 2>:
global.0_1 = 1;
D.1626_3 = a_2(D) != global.0_1;
return D.1626_3;
}
...
This only happens where ipa-reference proves the global is readonly
and marks it TREE_READONLY
(in this case, because there are no external function calls)
HTH,
Dan