FRE - SCCVN problem with initialized global variables
Daniel Berlin
dberlin@dberlin.org
Wed Jul 18 19:07:00 GMT 2007
On 7/18/07, Andreas Krebbel <Andreas.Krebbel@de.ibm.com> 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
More information about the Gcc
mailing list