https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110228

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org

--- Comment #24 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Trying to understand the failure mode here:

In bug.c.033t.early_objsz I still see the explicit stores to LocalFlags:

  <bb 4> :
  LookupFlags_15 = 0;
  goto <bb 7>; [INV]

  <bb 5> :
  if (v_13 == 1)
    goto <bb 6>; [INV]
  else
    goto <bb 7>; [INV]

  <bb 6> :
  LookupFlags_14 = 1;

  <bb 7> :
  # LookupFlags_4 = PHI <LookupFlags_15(4), LookupFlags_5(5),
LookupFlags_14(6)>
  *p_16(D) = LookupFlags_4;

But in bug.c.034t.ccp1 I see no stores at all:

  if (v_13 == 0)
    goto <bb 6>; [INV]
  else
    goto <bb 4>; [INV]

  <bb 4> :
  if (v_13 == 1)
    goto <bb 5>; [INV]
  else
    goto <bb 6>; [INV]

  <bb 5> :

  <bb 6> :
  # LookupFlags_4 = PHI <0(3), LookupFlags_5(4), 1(5)>

Specifically '# LookupFlags_4 = PHI <0(3), LookupFlags_5(4), 1(5)>' claims that
somehow gets values '0' and '1' into a PHI node.

AFAIU PHI is an equivalent of a mutable variable in an otherwise immutable SSA
form. It has to be a write it needed value is not there yet. Why the store of
'1' was removed? Is it because variable 'v_13' already happens to have 0 or 1
value?

I wonder why PHI does not look like something below:

    # LookupFlags_4 = PHI <v_13(3), LookupFlags_5(4), v_13(5)>

Reply via email to