This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: FRE - SCCVN problem with initialized global variables

On 7/18/07, Andreas Krebbel <> wrote:

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.


int global = 1;

foo (int a)
  return a != global;

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)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]